redis--Sentinel
来源:互联网 发布:单片机如何烧程序 编辑:程序博客网 时间:2024/05/18 13:10
sentinel(哨岗、哨兵)是Redis高可用性解决方案:由一个或者多个sentinel实例组成的sentinel系统可以监视任意多个主服务器以及这些主服务器属下的从服务器;并在监视的主服务器进入下线状态以后,从之前的从服务器中重新选举出一个主服务器,代替之前的主服务器。
一、启动并初始化sentinel
1、初始化服务器;
sentinel是一个运行在特殊模式下的redis服务器,所以启动的第一步,就是初始化一个普通的redis服务器,只是和普通的服务器有所不同,它不用载入RDB文件或者AOF文件;
2、将普通redis服务器使用的代码替换成sentinel专用代码;
sentinel使用的端口号和redis服务器不同;
sentinel中的命令列表和redis服务器中的命令列表不同;
3、初始化sentinel状态;
为每一个sentinel服务器初始化一个sentinelstate结构,这个结构保存了和sentinel相关的所有状态信息;
4、根据给定的配置文件,初始化sentinel的监视主服务器列表;
5、创建连向主服务器的网络连接;
命令连接:专门用于与主从服务器进行命令的发送和接受命令的回复;
订阅连接:为了订阅sentinel:hello频道的信息;sentinel需要通过接受主服务器或者从服务器发来的频道信息来发现未知的新sentinel;
二、获取主服务器信息
sentinel默认以每十秒一次的频率,通过命令info向监视的主服务器发送命令,通过对info命令的返回信息进行分析,得到主服务器的信息和属下的从服务器的信息;来更新sentinel中的主服务器的实例结构;
三、获取从服务器信息
sentinel为每个新的从服务器创建了一个命令连接和订阅连接,sentinel默认以10秒一次的频率向从服务器发送info命令;来更新sentinel中的从服务器的实例结构;
四、向主服务器和从服务器发送信息
在默认情况下,sentinel会以每两秒一次的频率,通过命令连接向所有被监视的主从服务器的sentinel:hello频道发送了一条信息,信息的内容为以s开头的为sentinel本身的信息,以m开头的保存的是sentinel监视的主服务器的信息或者从服务器的正在复制的主服务器信息;
五、接受来自主服务器和从服务器的频道信息
六、检测主观下线状态
当某一个sentinel通过ping命令检测到某一个主服务器已经下线,那么对于目前它监视的这个服务器,它认为是主观下线了,要通过与其它的sentinel进行商量,看是否这个服务器处于客观下线的状态;
七、检测客观下线状态
如果被sentinel判断为主观下线的服务器,那么它就会给其它的sentinel发送命令,询问它们是否也检测到此服务器主观下线,如果超过sentinel配置中设置的quorum参数的值,sentinel认为处于主观下线的状态,那么这个主服务器就是客观下线的状态;
八、选举领头sentinel
当一个主服务器被判断为客户端下线时,监视这个下线服务器的各个sentinel需要进行协商,选举出一个领头sentinel,并由领头sentinel对下线服务器执行故障转移操作;只有一半以上的sentinel推选出来,并认定领头sentinel为同一个sentinel,那么这个sentinel才被选择出来;
九、故障转移
在选举产生出领头sentinel之后,领头sentinel将对已下线的主服务器执行故障转移:
<1>在已下线的主服务器的所有从服务器中根据优先级选一个作为主服务器;
<2>让已下线的主服务器属下的所有从服务器改为复制新的主服务器;
<3>将已下线的主服务器设置为新的主服务器的从服务器,当它重新上线的时候,就是作为新的服务器的从服务器;
引用《Redis设计与实现》
- Redis-Sentinel
- Redis --- Sentinel
- redis sentinel
- Redis Sentinel
- redis Sentinel
- Redis Sentinel
- redis--Sentinel
- redis sentinel
- Redis-Sentinel
- redis sentinel failover
- redis-sentinel使用总结
- Redis Sentinel 源码分析
- Redis sentinel集群实验
- redis的Sentinel 系统
- redis-sentinel 做HA
- redis 之sentinel配置
- Redis的Sentinel
- Twemproxy + Sentinel Redis架构
- Android设备获取默认的启用数据卡的SubId
- ios-程序中模拟GET和POST请求登录
- python基础--换行
- Linux进程(二)
- Android自定义view之ViewPager指示器——1
- redis--Sentinel
- JS中从Array.slice()与Array.splice()的底层实现原理分析区别
- HTTP协议理解
- 字母次数
- 如何编写测试计划
- 加农炮
- 观察者模式
- 41. First Missing Positive
- 自定义控件(三种)