文档章节

Redis 集群的主从切换

neuront
 neuront
发布于 2016/10/14 16:23
字数 809
阅读 601
收藏 3

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

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

© 著作权归作者所有

共有 人打赏支持
neuront

neuront

粉丝 13
博文 6
码字总数 6398
作品 0
武汉
私信 提问
初探 redis 集群

单台的 redis 服务器不能保证 redis 服务的稳定性,如果 redis 服务器宕机,将会导致 redis 服务的不可用,乃至整个系统的不可用。 常见的保证 redis 服务稳定性的方式有几种: redis 备份 ...

JNG
2017/06/02
1
0
基于Docker的Redis高可用集群搭建(redis-sentinel)

前言   之前介绍了用docker来搭建redis主从环境,但这只是对数据添加了从库备份(主从复制),当主库down掉的时候,从库是不会自动升级为主库的,也就是说,该redis主从集群并非是高可用的。...

mario阿东
07/06
0
0
redis主从同步配置和哨兵机制监控master主从切换配置

搭建好redis单机后,开始研究redis集群配置 两台VM虚拟机,都安装了redis程序,一台作为master 一台作为slave 首先配置redis主从配置 配置在redis.conf文件中 主机上需要设置masterauth(光主...

文文1
10/12
0
0
玩转 Redis 集群之 Sentinel

Redis作为内存数据库,需要具备高可用的特点,不然如果服务器宕机,还在内存里的数据就会丢失。我们最常用的高可用方法就是搭建集群,master机器挂了,可以让slave机器顶上,继续提供服务。但...

微笑向暖wx
11/07
0
0
redis的哨兵(sentinel)配置和python程序应用示例

一、Sentinel概述: 当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-sentinel本身也是一个独立运行的进程,...

青苗飞扬
2017/10/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Ubuntu18.04 安装MySQL

1.安装MySQL sudo apt-get install mysql-server 2.配置MySQL sudo mysql_secure_installation 3.设置MySQL非root用户 设置原因:配置过程为系统root权限,在构建MySQL连接时出现错误:ERROR...

AI_SKI
今天
3
0
3.6 rc脚本(start方法) 3.7 rc脚本(stop和status方法) 3.8 rc脚本(以daemon方式启动)

3.6-3.7 rc脚本(start、stop和status方法) #!/usr/bin/env python# -*- coding: utf-8 -*-# [@Version](https://my.oschina.net/u/931210) : python 2.7# [@Time](https://my.oschina.......

隐匿的蚂蚁
今天
3
0
Cnn学习相关博客

CNN卷积神经网络原理讲解+图片识别应用(附源码) 笨方法学习CNN图像识别系列 深度学习图像识别项目(中):Keras和卷积神经网络(CNN) 卷积神经网络模型部署到移动设备 使用CNN神经网络进行...

-九天-
昨天
5
0
flutter 底部输入框 聊天输入框 Flexible

想在页面底部放个输入框,结果键盘一直遮住了,原来是布局问题 Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("评论"), ...

大灰狼wow
昨天
4
0
Kernel I2C子系统

备注:所有图片来源于网络 1,I2C协议: 物理拓扑: I2C总线由两根信号线组成,一条是时钟信号线SCL,一条是数据信号线SDA。一条I2C总线可以接多个设备,每个设备都接入I2C总线的SCL和SDA。I...

yepanl
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部