一、哨兵机制:
问:为什么要使用哨兵机制?
答:redis主从复制存在缺陷,如果主节点出现宕机等问题不能再提供服务,需要人工重新把从节点设置为主节点,还需要通知应用程序更新了主节点的地址;这样处理重复并且时间效率低;因此在redis2.8正式提供哨兵架构
问: 哨兵是什么?
答:entinel(哨兵)进程是用于监控redis集群中Master主服务器工作的状态;在Master主服务器发生故障的时候,可以实现Master 和Slave服务器的切换,保证系统的高可用(HA)
redis哨兵(sentinel)系统用于管理多个redis服务器,主要执行一下三个任务:
监控(Monitoring): 哨兵(Sentinel ) 会不断地检查你的Master和Slave是否运作正常
提醒(Notification):当被监控的某个 Redis出现问题时, 哨兵(Sentinel ) 可以通过 API 向管理员或者其他应用程序发送通知
自动故障迁移(Automatic failover):当一个Master不能正常工作时,哨兵(Sentinel ) 会开始一次自动故障迁移操作,它会 将失效Master的其中一个Slave升级为新的Master, 并让失效Master的其他Slave改为复制新的Master; 当客户端 试图连接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可以使用Master代替失效Master
执行流程:
哨兵是一个分布式系统,可以在一个架构中运行多个哨兵进程;哨兵使用流言协议(gossipprotocols)来接受Master是否下线,使用投票协议(agreement protocols)来确定是否需要执行自动故障迁移,选择那个Slave来代替Master
1、每个哨兵(Sentinel )每秒一次的频率向它所管理的Master、Slave以及其他哨兵(Sentinel )发送PING命令
2、所管理的Master、Slave以及其他哨兵(Sentinel )应在规定时间内回应PANG;如果发现对象未在指定的相应时间(时间可进行配置down-after-milliseconds)内进行响应,则暂时认为对方已经宕机(主观认为宕机);
3、如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态(大于等于配置文件指定的值),系统认为该Master确实宕机(客观宕机),通过一定的vote算法,从Slave中选出一台成为Master,然后自动修改相关配置
4、在一般情况下,每个 Sentinel 以每 10 秒一次的频率向它已知的所有Master,Slave发送 INFO 命令;但是当Master被 Sentinel 标记为客观下线时,Sentinel 向下线的 Master 的所有 Slave 发送 INFO 命令的频率会从 10 秒一次改为每秒一次
5、若没有足够数量的 Sentinel 同意 Master 已经下线, Master 的客观下线状态就会被移除;
若 Master 重新向 Sentinel 的 PING 命令返回有效回复, Master 的主观下线状态就会被移除
-----------------------------------------------------------------------------------------------------
如有错误,请及时指出,让我们一同进步!!!