redis之哨兵模式

上篇文章我们说到主从复制中主机宕机,要手动设置一台从机。那么哨兵模式就是解决这个问题,让系统去设置主机,并且应用程序不必修改代码,自动连接新的主机。
哨兵模式就是在redis的进程中加上redis的监控进程,来完成对redis进程的监控。一旦发现redis进程有故障,就会做出相应的反应,来保证redis的高可用。一般中小型企业使用一主二从三哨兵的模式搭建redis集群,而大型企业数据量较大,一台服务器可能不够存储,就会使用redis集群模式。
上篇文章我们分析过一主多从的模式,一主二从就是其中的一种模式。
下面我们主要分析哨兵模式。
redis之哨兵模式_第1张图片
一般我们会在每台redis服务器中去创建一个哨兵进程,来监控本台服务器和其他服务器的状况。
哨兵进程会以每一秒向redis主服务器和其他从服务器和其他哨兵进程发送ping命令,
每个服务器会对收到的ping命令进行回复,发送pong命令。
哨兵收到pong命令,则表示机器可用,收不到的话会分为主观下线和客观下线。
主观下线:服务器最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值,则这个服务器就会被这个哨兵认为主观下线。主观下线并不一定是服务器真正下线了。
客观下线:如果一个Master主服务器被标记为主观下线,则正在监视这个Master主服务器的所有
Sentinel(哨兵)进程要以每秒一次的频率确认Master主服务器的确进入了主观下线状态。当有足够数量的 Sentinel(哨兵)进程(大于等于配置文件指定的值)在指定的时间范围内确认Master主服务器进入了主观下线状态, 则Master主服务器会被标记为客观下线(Master真正宕机)。
上面我们分析了主机客观是否真正宕机。假如真正宕机会怎么选举新的主机呢
首先所有监视主机的Sentinel中选择一个领头Sentinel:
1.所有监视主机的Sentinel都有可能成为领头Sentinel
2.监视主机的Sentinel都要求其他Sentinel选择自己为局部领头Sentinel
3.局部领头Sentinel的选择规则是先到先得,就是最先向目标Sentinel发送设置要求的Sentinel将会成为局部领头Sentinel,之后接受到的请求都会被拒绝。
4.如果有某个Sentinel被半数以上的Sentinel设置成了局部领头Sentinel,那么这个Sentinel称为领头Sentinel。
5.如果在一定时间内领头Sentinel没有选出,就再重新开始选,直到选出。
选出领头Sentinel之后,领头Sentinel将发起对主机的故障转移
1.在已经下线的主机下面选择一台从机作为主机
选举规则:
先过滤出可以使用机器,然后根据Slave优先级,对列表中剩余的从机进行排序,并选出其中优先级最高的从机。如果有多个具有相同优先级的从机,那么领头Sentinel将按照从机复制偏移量,选出其中偏移量最大的从机。如果有多个优先级最高,偏移量最大的从机,那么根据运行ID最小原则选出新的主机。每个redis在启动的时候都会生成一个运行ID,且不相同,最先启动的ID越小。
2.修改从机配置,将所有从机的主机地址改为新的主机
3.当已下线的Master重新上线后,领头Sentinel会向此服务器发送SLAVEOF命令,将当前服务器变成新的Master的Slave。
以上就是哨兵模式的过程,完成了我们一主多从的缺点。

你可能感兴趣的:(redis)