Redis 集群的主从切换
博客专区 > neuront 的博客 > 博客详情
Redis 集群的主从切换
neuront 发表于11个月前
Redis 集群的主从切换
  • 发表于 11个月前
  • 阅读 181
  • 收藏 3
  • 点赞 0
  • 评论 0

330元/年抢阿里云香港云服务器,节省80%出海成本 >>>   

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 会自动切换为主.

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

标签: Redis Redis Cluster
共有 人打赏支持
neuront
粉丝 13
博文 6
码字总数 6398
×
neuront
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: