在哨兵模式中,仍然只有一个 master 节点。当并发写请求较大时,哨兵模式并不能缓解写压力。
在redis-cluster集群中,每一个主节点可以添加多个从节点,主节点和从节点遵循主从模式的特性。
当用户需要处理更多的读请求时,添加从节点可以扩展系统的读性能。
redis集群的主节点内置了类似Sentinel的节点故障检测和自动故障转移功能。当集群中的某个主节点下线时,集群中的其他在线主节点发现了以后,会对已下线的主节点进行故障转移。集群进行故障转移的方法和Sentient进行故障转移的方法基本一致,不同的是,在集群里面,故障转移是由集群中其他在线的主节点负责进行的,所以集群中不需要使用Sentinel。
redis-cluster集群将键存储空间分割为16384个槽位(slot),事实上集群最大节点数量是16384个官方建议最大节点数量不超过1000个节点。
所有主节点都负责16384个哈希槽中的一部分,当16384个槽都有某个节点在负责处理时,集群进入上线状态,并开始处理客户端发送的数据命令请求。
一个slot槽位可以存放多个数据,key的槽位计算公式:HASH_SLOT = CRC16(key) mod 16384
由于Redis集群无中心节点,请求会随机发给任意主节点。
主节点只会处理自己负责槽位的命令请求,其他槽位的命令请求,该主节点会返回客户端一个转向错误。
客户端根据错误中包含的地址和端口重新向正确的负责的主节点发起命令请求。
系统:CentOS7
Redis: 5.0.9
Redis节点
注意:
配置文件主要修改:
执行结果
按照之前的配置修改并启动,使用以下命令将其加入集群:
添加完新节点后,需要对新添加的主节点进行hash槽重新分配,这样该主节点才能存储数据,redis共有16384个槽。
删除从节点192.168.164.13:7000,node_id:cb21c351b3d2378976bf7d215553d0e04d7fad43
执行结果
存在slot的主节点无法直接删除,所以我们需要先移动主节点192.168.164.13:7001的slot至其他三个主节点
查看集群节点信息
删除主节点
执行结果
查看集群信息