目录
RedisCluster 集群方案
简介
核心原理
配置
节点配置
集群配置
健康检查
常见管理手段
扩容-增加 Redis 节点
扩容-slot 自动平衡
缩容-slot 手动分配
缩容-删除 Redis 节点
Redis 集群实现了一个数据分布式存储、节点水平扩容、故障自动转移的集群方案
1. 存储:
Redis 集群实现了对 Redis 的水平扩容,即启动 N 个 Redis 节点,将整个数据库分布存储在这 N 个节点中,每个节点存储总数据的 1/N
2. 水平扩容:
Redis 集群模式用来解决单 Redis 数据量瓶颈,并且不再需要配置单独的哨兵,可以进行水平扩展
3. 故障自动转移:
Redis 集群将 key 通过 crc16 运算后与 16384 取模,将 key 分布到固定 16384 个槽位(slot)中的一个(0-16383),每个 redis 分别保管不同 的槽位,不同的 Redis 子集群分管不同的槽位,每个子集可用一主多从实现,进行故障自动转移
4. 注意:
并且集群模式默认使用 db0 不支持 select 别的 db
Redis 集群采用了哈希 Slot+主从节点实现了一个数据分布式存储、节点水平扩容、故障自动转移的集群方案
为了提高效率,Redis 集群客户端维护当前插槽配置的映射,比如像 Java 实现的 JedisCluster
1. redis.conf 单点增加配置
cluster-enabled yes
cluster-config-file nodes-{port}.conf
2. 节点数量
要求节点数量为 2*N=2 *N个节点
生产要求至少 2 台机器,保证挂掉一台机器或者一个节点后,服务仍能正常进行
而且主从不能配对在同一台机器上
3. 启动所有节点
以 cluster 模式启动 2*N 个 redis 服务
1. 创建集群 ./redis-cli --cluster create 192.168.128.167:6381 192.168.128.167:6382 192.168.128.167:6383
192.168.128.167:6384
192.168.128.167:6385 192.168.128.167:6386 --cluster-replicas 1
2. 数据目录:这时候在数据目录下面会生成集群配置文件
redis-cli --cluster info 192.168.128.167:6381
redis-cli --cluster check 192.168.128.167:6381
准备单节点 (一主一丛)
按集群环境搭建的要求准备好单节点
192.168.128.167:6387 和 192.168.128.167:6388
添加主节点
redis-cli --cluster add-node 192.168.128.167:6387 192.168.128.167:6381
第一个节点为待加入的新节点,后面一个节点为集群中的任意节点
添加节点命令,默认是主节点
添加从节点
redis-cli --cluster add-node 192.168.128.167:6388 192.168.128.167:6381 --cluster-slave
不指定主节点时,由 Redis 自动分配,一般会自动加入没有从节点的主下面
redis-cli --cluster add-node 192.168.128.167:6388 192.168.128.167:6381 --cluster-slave --cluster-master-id
0d77af6e29a5d11ecb9cadbd6ceb282cceaca2c4
当 Redis 集群中的节点出现新增时,我们需要对数据进行 slot 重新划配,有两种模式,自动平衡模式和手动划配模式
新增的时候我们一般采用自动平衡处理,这样方便快捷
自动平衡命令
./redis-cli --cluster rebalance 192.168.128.167:6381 --cluster-use-empty-masters --cluster-replace
当我们想要对 Redis 集群进行缩容时,在删除 Redis 节点前,我们必须对要删除的节点上的数据进行手动划配迁移缩容前的 key 分布
从节点可以随时移除,0 slot 的孤主节点可以随时移除(无从节点),其它主节点无法删除
红色框节点可以直接删除,1 号节点在删除对应的从节点后可以删除,2、3、4 号节点需要将数据迁走+删除对应的从节点后可删除
redis-cli --cluster del-node 192.168.128.167:6388 eba6e33d52b8d77832f3590de76ca53b6f78e71a