Redis
故障转移
案例1
一、故障现象
二、排查思路
- 网络问题引起连接
Redis
超时 Redis
集群状态不可用
三、排查过程
1、查看redis
集群状态和节点状态
redis
集群状态和节点状态都是正常
2、检查集群节点网络情况
通过ping
,telnet
命令测试连接集群节点网络情况都是正常的
3、查看redis
日志
准备登录redis
机器查询redis
日志,发现其中一台redis
机器无法登录,联系客户重启机器后,发现恢复正常,web
能够正常访问。
四、故障原因
Redis
集群其中一台机器异常,引起redis
集群异常。
五、解决方案
重启系统
六、拓展
由于redis
是通过ping
,pong
协议进行通讯的,所以系统虽然异常,但是由于端口依然能够通讯,所以没有做故障转移。
案例2
一、故障现象
WEB
页面无法访问,tomcat
日志显示连接redis
异常
二、排查思路
- 网络问题引起连接
Redis
超时 Redis
集群状态不可用
三、排查过程
1、查看redis
集群状态和节点状态
发现10.25.98.171
机器宕机,导致上面的redis
节点故障,且上面有两个master
节点也是故障的状态
四、故障原因
Redis
集群中一台机器宕机,导致redis
集群中两个master
处于故障状态,且两个master
对应的slave
节点没有切换成master
节点,所以redis
集群为不可用状态。
五、解决方案
找到故障机器master
节点对应的slave
节点,通过redis-cli
命令登录进去,然后通过cluster failover force
命令强制将slave
节点切换成master
节点
六、拓展
这次Redis
集群中一台down
机了,且集群中master
节点状态为fail
状态,为什么对应的slave
节点没有切换为master
节点呢?
查看Redis
配置发现cluster-node-timeout
参数设置的1200000,也就是20分钟。
cluster-node-timeout
表示集群节点的不可用时间(超时时间), 超过这个时间就会被认为下线,单位是毫秒。
验证:
1、将cluster-node-timeout
设置为1200000,手动停止其中一个master
节点
手动将master
节点10.241.80.113:7100
停止,观察它对应的slave节点10.241.80.114:7200
什么时候能够切换为master
节点
通过日志可以看到09:20:26
连接master
节点异常
09:40:29
故障转移成功。故障转移大概耗时20分钟。
通过cluster nodes
命令发现节点10.241.80.114:7200
切换为master
节点
2、将cluster-node-timeout
设置为12000,手动停止其中一个master
节点
手动将master
节点10.241.80.114:7200
停止,观察它对应的slave
节点10.241.80.113:7100
什么时候能够切换为master
节点
通过日志可以看到09:59:25
连接master
节点异常
09:59:39
故障转移成功。故障转移大概耗时14秒。
通过cluster nodes
命令发现节点10.241.80.113:7100
切换为master
节点
结论:
cluster-node-timeout
参数直接影响发生故障转移时长,主节点不可用时间达到cluster-node-timeout
参数值,才会认为主节点不可能,从而主节点被下线,从节点切换为主节点。
8415](C:\Users\29649\AppData\Roaming\Typora\typora-user-images\image-20211108195308415.png)
结论:
cluster-node-timeout
参数直接影响发生故障转移时长,主节点不可用时间达到cluster-node-timeout
参数值,才会认为主节点不可能,从而主节点被下线,从节点切换为主节点。