Redis 集群的主从切换

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

固然前提条件是对应的主节点有至少一个可连通的从. 有一些复杂的网络环境下, 也许 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 没法选举, 因而自动主从切换不会发生.get

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

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

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

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

相关文章
相关标签/搜索