Redis-Cluster集群
哨兵模式下,仍然只有一个主节点。
当并发写请求较大时,看门狗模式无法降低写压力。
在redis-cluster集群中,每个master节点可以添加多个slave节点。
主节点和从节点遵循主从模式的特点。
当用户需要处理更多的读请求时,添加从节点可以扩展系统的读性能。
Redis集群的主节点内置了节点故障检测和自动故障转移功能,类似于Sentinel。
当集群中某个主节点离线时,集群中其他在线主节点发现离线主节点后会进行故障转移。
集群故障转移方法与感知故障转移方法基本相同。
不同的是,集群中的故障转移是由集群中其他在线的主节点执行的,因此集群中不需要使用Sentinel。
Redis-cluster将集群key存储空间划分为16384个槽,实际上集群最大节点数为16384【官方建议最大节点数大于1000个节点没有】 。
所有主节点负责 16384 个哈希槽的一部分。
当16384槽位的节点负责处理时,集群进入在线状态,开始处理客户端发送的数据命令请求。
一个插槽可以存储多个数据。
键槽计算公式为:HASH_SLOT=CRC16(key)mod16384
由于Redis集群中没有中心节点,所以请求是随机的。
将被发送到任意主节点。
主节点将仅处理其负责的槽的命令请求。
对于来自其他槽位的命令请求,主节点将向客户端返回重定向错误。
客户端根据错误中包含的地址和端口将命令请求重新路由到正确的负责主节点。
系统:CentOS7Redis:5.0.9Redis节点
说明:
配置文件主要修改:
执行结果
按照之前的配置进行修改和初始化,使用如下命令将其添加到集群中:
添加新节点后,新添加的master节点的hash槽必须是重新分配主节点数据 Redis共有16384个槽。
删除slave节点192.168.164.13:7000,node_id:cb21c351b3d2378976bf7d215553d0e04d7fad43
执行结果
slot的主体部分存在节点,无法直接删除,所以我们首先需要主节点 需要将192.168.164.13:7001的slot移至其他三个主节点
查看集群节点信息
删除主节点
执行结果
查看集群信息
[redis 源码走读] sentinel 哨兵 - 脑裂处理方案
Sentinel模式的Redis集群在部署过程中可能会出现裂脑现象,即多个Master服务可能会导致数据不一致。Sentinel 通过检查故障、检测故障和执行故障转移来维护集群的高可用性。
正确部署和配置哨兵和核心服务可以有效减少裂脑现象。
配置sentinel节点数量并选举quorum,保证多个sentinel之间可以互相选举,选举出一个leader Sentinel进行故障转移。
一般建议决策的法定人数为监督人总数的一半以上;少数服从多数。
对于主服务来说,通过修改配置,当主服务与一定数量的副本失去联系时,限制客户端对失败的主服务进行写操作,从而避免数据不一致。
在解决这个问题时,需要注意配置选项min-slaves-to-write,该选项取决于复制链路的数量,应适当设置以保证集群的故障转移能力。
高版本的Redis已经优化了相关选项。
总之,通过正确部署哨兵和关键服务配置,可以有效管理Redis集群,减少裂脑现象带来的问题。