美文网首页
Redis 集群手动故障切换

Redis 集群手动故障切换

作者: 运维开发笔记 | 来源:发表于2022-12-18 14:18 被阅读0次

总结写在前面:

  1. 使用cluster failover命令进行手动主从切换
  2. cluster failover命令的参数
  3. redis集群的切换步骤(理论)

redis集群的故障切换可以分成自动和手动两种。例如部署的3主3从的集群,如果一台master节点宕机,redis集群有能力自动选举新的主节点,完成故障迁移,保障系统的高可用性。

本文记录的故障切换是手动的操作,意义在于

  1. 当集群完全正常时,因为某些原因需要主从进行切换。例如我们需要下线某台服务器进行服务器升级。
  2. 当集群中多数master节点宕机,集群已不可用时的快速恢复。

操作

命令部分很简单,要注意的是这个命令必须在备节点上执行

cluster failover

或者

cluster failover force

或者

cluster failover takeover

第一种情况,集群正常时

这种情况是我们按计划进行服务器升级时,经常遇到的情况。

要升级的服务器上可能跑着很多个master节点,我们应该在变更前将该服务器上的master节点进行主备切换,这样下线服务器时可以做到业务应用无感知。

操作很简单,这种情况下只要在备节点上执行

cluster failover
具体redis做的切换步骤
  1. slave节点告知其master节点停止处理来自业务的请求
  2. master 节点将当前replication offset 回复给该slave节点
  3. salve节点在master节点的变更没有全部同步到自己时(追上replication offset),不会进行主备切换动作。
  4. salve节点追上replication offset,开始进行主备切换的工作:从集群中其他master处获取最新的epoch,然后广播自己的配置
  5. 原master节点收到配置更新:解除客户端的访问阻塞,回复重定向信息,以便客户端可以和新master通信。

第二种情况,集群已宕机

第二种情况就比较紧急了,可能遇到了意外情况导致多台或者全部master宕机,或者遇到网络分区隔离。测试redis集群已经是不可用状态。如果备节点都在,我们可以使用failover快速恢复redis集群服务。

此时在备节点上执行

cluster failover takeover

在上面第一种情况时,主备切换的第四步中需要从集群中其他master处获取最新的epoch。所以如果多数master已经宕机的情况下,是会获取失败的。

加上参数takeover,备节点会自己生成epoch。如果epoch不是最大的,则取当前有效epoch值中的最大值并自增作为新的配置epoch。

然后将原master节点管理的所有哈希槽分配给自己,接着就广播配置。

如此可以快速恢复集群能力。

有得必有失

TAKEOVER 违反Redis群集的last-failover-wins 原则,因为这种情况下epoch是备节点自己产生的,并没有同集群进行协商,所以可能存在冲突。

所以非紧急情况下不要使用takeover参数

没有用到的force

failover还有一个参数是force。

加上force的切换步骤是,不可master节点进行协商,直接开启第四步从集群中其他master处获取最新的epoch,然后广播自己的配置

所以,使用force的前提是多数master依然活着。

那么,这种情况下,如果master节点宕机,redis集群可以自动选出主节点切换。也不需要使用failover手动切换

所以,我没用过这个参数,没有什么场景适合使用。

相关文章

网友评论

      本文标题:Redis 集群手动故障切换

      本文链接:https://www.haomeiwen.com/subject/nwreqdtx.html