近期发现Redis Cluster集群主节点出现故障以后,从节点没有自动切换主节点,因此导致整个Redis Cluster不可用。经过多次在测试环境的尝试,Redis Cluster集群主从切换大概有以下几个因素会受影响。
#1. Redis Cluster集群主节点必须3个以上
之前在《从零搭建Redis Cluster分片集群》文中用了3台服务器组建了一个2主1从的Redis集群。后来在《Redis主从同步数据死循环》升级为2主2从。本次主节点意外掉线并且没有自动切换从节点的事故中发现,如果Redis Cluster集群主节点少于3个,则从节点不会自动进行故障转移。因此切记,要组建高可用的Redis Cluster集群,必须要有3个主节点,否则从节点不会自动切换主节点。
#2. 配置参数cluster-node-timeout
该参数默认值是15000毫秒。该参数影响主从服务器的切换时间。经过测试,当主服务器故障无响应以后,大约经过16秒时间从服务器会发起切换角色的请求。如果将该参数设置为5000毫秒,从服务器发起亲求的时间大约是6秒。
#3. 配置参数cluster-replica-validity-factor
该参数的默认值是10。该参数主要是为了判断从服务器是否有资格进行故障转移。当从节点与主节点失联的时间超过 cluster-node-timeout * cluster-replica-validity-factor + ping的间隔时间,那么该从节点不会进行故障转移。这个解释听起来比较难理解。我们可以复现这个场景:
- 1. 手动关闭从节点服务器
- 2. 等待5分钟后关闭主节点并启动从节点服务器
- 3. 此时该从节点就无法进行故障转移
扫码联系船长