首页 > 代码库 > Redis-sentinel监控

Redis-sentinel监控

Sentinel介绍

Redis Sentinel 系统用于管理多个Redis服务器, 该系统执行以下三个任务:

  监控(Monitoring

  提醒(Notification

  自动故障迁移(Automatic failover

  Sentinel 是一个分布式系统,可以在一个架构中运行多个 Sentinel 实例,使用流言协议(gossip protocols)来接收关于主服务器是否下线的信息, 并使用投票协议(agreement protocols)来决定是否执行自动故障迁移, 以及选择哪个从服务器作为新的主服务器

Sentinel启动与配置

启动Sentinel

?通过redis-sentinel启动

  redis-sentinel   /path/to/sentinel.conf

?通过redis-server启动

  redis-server   /path/to/sentinel.conf--sentinel

Sentinel配置项

?sentinel announce-ip <ip>
?sentinel announce-port <port>
?sentinel monitor <master-name> <ip> <redis-port> <quorum>
?sentinel auth-pass <master-name> <password>
?sentinel down-after-milliseconds <master-name> <milliseconds>
?sentinel parallel-syncs <master-name> <numslaves>
?sentinel failover-timeout <master-name> <milliseconds>
?sentinel notification-script <master-name> <script-path>
?sentinel client-reconfig-script <master-name> <script-path>
Sentinel监控流程

1.Sentinel创建命令连接和订阅连接

  sentinelmasterslave创建命令连接和订阅连接

  sentinel与其他sentinel只创建命令连接

2.Sentinel发送消息

  sentinel定期向masterslave发送INFO命令

  sentinel定期向masterslavesentinel发送ping命令

  sentinel定期向master发送publish hello命令

  hellosentinel_ip,sentinel_port,sentinel_runid,current_epoch,

       master_name,master_ip,master_port,master_config_epoch

3.Master下线检测

  (1) sentinel检测到master超时,标记为主观下线

  (2) sentinel向其他sentinel询问master是否下线

  (3) 超过quorum数量的sentinel认为下线,标记master为客观下线

  (4) sentinel进行投票选举leader

sentinel选举leader(raft)
技术分享
 Sentinel数据结构关系图
技术分享
 Sentinel故障转移流程
技术分享技术分享
 技术分享技术分享
 
 sentinel故障转移时序图
 技术分享
 Sentinel中存在的问题

1.如果两个sentinel有一个sentinel断掉,另一个sentinel的选举leader将永远失败

2. sentinel不能识别slave中的127.0.0.1地址

3.修改sentinel模式下的实例角色时,也需要修改sentinel和实例的配置;

4.sentinel监控的slave,使用slaveof命令无效;

5. sentinel无法将slave当做master作为监控对象

6. sentinel故障迁移中,slave重配超时后sentinel向其他slave发送的slaveof命令被丢弃

备注:

       sentinel在执行故障迁移中,当被选中的slave升级为master后,其它slave需要重新配置到新master上,如果slave重配到新master超时,sentinel会向该slave发送slaveof命令将slave再次重新配置到新master上,并将命令放到待发缓冲中等待读写事件处理器处理,这时sentinel修改自己保持的实例状态将旧master实例切换到了新master实例,在切换过程中sentinelslave实例释放掉(同时也释放了命令发送连接),导致之前发送的slaveof命令还没发送已经被清空。该slave只能等待sentinel通过INFO命令发现它的master不是新master时再次向它发送slaveof命令。



来自为知笔记(Wiz)


Redis-sentinel监控