php redis主从自动切换,Redis 集群的主从切换

Redis 集群的主从切换不再使用 Sentinel 作为外置监控, 而是集群内部在主节点挂掉之后选举出一个从节点取代主节点, 处理相应的分片的数据请求.

当然前提条件是对应的主节点有至少一个可连通的从. 有一些复杂的网络环境下, 也许 A 有 B, C 两个从, B 和 C 可以独立连接 A 并获取备份数据, 但 B 和 C 之间不能连通的话, 就会产生问题.

以上只是一个前提, 自动主从切换的另一个前提是半数以上的非空主节点还活着, 因为只有那些已分配槽位的主进行主从切换选举, 而且选举得出的结果需要至少半数的主意见一致. 这一点举几个典型的反例

1 主 1 从或 2 主 2 从的集群, 任意一个主挂了, 集群中不会发生自动主从切换 (建立集群需要 3 个以上的主节点这一规定在官方的 redis-trib.rb 脚本中, 而不是集群自身的限制)

3 主 3 从的集群, 几乎同时挂掉 2 个主, 集群中不会发生自动主从切换

3 主 3 从的集群, 其中一个主没有分配槽位, 挂掉另外任意一个主, 集群中不会发生自动主从切换

第一种情况中, 主挂掉, 当然不满足半数以上 (不是至少半数) 的主还活着.

第二种情况中, 2 个主先后挂掉之间的时间间隔很重要. 比如现在有 A B C D E F 共 6 个 Redis, 主从结构为 A slaveof D, B slaveof E, C slaveof F, 这时如果 D 挂了, 剩下 2 个主, 是有机会进行选举让 A 切换为主的, 如果 A 切换为主之后, E 再挂掉, 之后仍然可以选举, 让 B 切换; 但是, 如果选举还没完成, A 还没来得及切换, E 又挂了, 那么相当于集群同时挂掉 2 个主, 剩下 1 个 F 无法选举, 于是自动主从切换不会发生.

第三种情况, 假设还是 6 个 Redis, 主从结构为 A slaveof D, B slaveof E, C slaveof F, 但 F 没有槽位, 那么 D 挂了的话, F 不参与选举, 跟第一种情况一样, 没半数, 不予切换.

这时, 可以手动切换. 切换方法是使用 redis-cli 工具连上相应的从节点, 执行 cluster failover TAKEOVER 命令 (必须加上 TAKEOVER 参数).

比如上面第二种情况, D 和 E 都挂了, 那么需要连上 A 执行上述命令, 强制 A 取代已经死掉的 D 成一个主. 注意, 这时活着的主的数量就会恢复到 2 个, 满足了一半以上的数量要求, 接下来 B 会自动切换为主.

这种行为还引出一个让运维哭的结论: 如果使用两台对等的机器配置一个交叉集群, 那么如果一台机器断电了, 剩下一台机器是上的实例是不会自动主从切换的...

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值