Redis故障转移

案例1

一、故障现象

Redis故障转移 - 图1

二、排查思路

  • 网络问题引起连接Redis超时
  • Redis集群状态不可用

三、排查过程

1、查看redis集群状态和节点状态

redis集群状态和节点状态都是正常

Redis故障转移 - 图2

2、检查集群节点网络情况

通过ping,telnet命令测试连接集群节点网络情况都是正常的

Redis故障转移 - 图3

3、查看redis日志

准备登录redis机器查询redis日志,发现其中一台redis机器无法登录,联系客户重启机器后,发现恢复正常,web能够正常访问。

Redis故障转移 - 图4

四、故障原因

Redis集群其中一台机器异常,引起redis集群异常。

五、解决方案

重启系统

六、拓展

由于redis是通过ping,pong协议进行通讯的,所以系统虽然异常,但是由于端口依然能够通讯,所以没有做故障转移。

案例2

一、故障现象

WEB页面无法访问,tomcat日志显示连接redis异常

Redis故障转移 - 图5

二、排查思路

  • 网络问题引起连接Redis超时
  • Redis集群状态不可用

三、排查过程

1、查看redis集群状态和节点状态

发现10.25.98.171机器宕机,导致上面的redis节点故障,且上面有两个master节点也是故障的状态

Redis故障转移 - 图6

四、故障原因

Redis集群中一台机器宕机,导致redis集群中两个master处于故障状态,且两个master对应的slave节点没有切换成master节点,所以redis集群为不可用状态。

五、解决方案

找到故障机器master节点对应的slave节点,通过redis-cli命令登录进去,然后通过cluster failover force命令强制将slave节点切换成master节点

Redis故障转移 - 图7

Redis故障转移 - 图8

六、拓展

这次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节点

Redis故障转移 - 图9

通过日志可以看到09:20:26连接master节点异常

Redis故障转移 - 图10

09:40:29故障转移成功。故障转移大概耗时20分钟。

Redis故障转移 - 图11

通过cluster nodes命令发现节点10.241.80.114:7200切换为master节点

Redis故障转移 - 图12

2、将cluster-node-timeout设置为12000,手动停止其中一个master节点

手动将master节点10.241.80.114:7200停止,观察它对应的slave节点10.241.80.113:7100什么时候能够切换为master节点

Redis故障转移 - 图13

通过日志可以看到09:59:25连接master节点异常

Redis故障转移 - 图14

09:59:39故障转移成功。故障转移大概耗时14秒。

Redis故障转移 - 图15

通过cluster nodes命令发现节点10.241.80.113:7100切换为master节点

Redis故障转移 - 图16

结论:

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参数值,才会认为主节点不可能,从而主节点被下线,从节点切换为主节点。