Redis哨兵

Redis哨兵

作用:监控主节点和从节点的状态,自动完成故障发现和故障迁移(保证Redis服务的高可用)

节点信息:
角色 IP 端口 别名
master 127.0.0.1 6379 主节点
slave-A 127.0.0.1 7001 从节点A
slave-B 127.0.0.1 7002 从节点B
slave-C 127.0.0.1 7003 从节点C
sentinel-A 127.0.0.1 8001 哨兵A
sentinel-B 127.0.0.1 8002 哨兵B
sentinel-C 127.0.0.1 8003 哨兵C
哨兵配置文件
daemonize yes 
Port 8001
sentinel monitor mymaster 127.0.0.1 6379 2
启动所有服务
启动服务

启动之后,哨兵会根据节点信息修改配置文件(真的是直接修改)

关闭6379端口的主节点
关闭主节点后,选举出从节点为主节点

关闭主节点后,选取了slave-B(port:7002)作为新的主节点,并且重写了所有节点的配置文件(直接改变了conf下的文件),当原来的master(port:6379)重新启动后会作为现在主节点的从节点

实现原理
  • 每个哨兵都有三个定时任务监控
    1. 每隔10秒,向主节点和从节点发送info命令,获取最新的拓扑结构
    2. 每隔2秒,哨兵向Redis数据解读的sentinel:hello频道上发送该哨兵对主节点的判断以及当前哨兵(自身)的信息
    3. 每隔1秒,哨兵向所有节点和其它哨兵发送ping命令做一次心跳检测,确实是否可达
  • 主观下线和客观下线
    1. 主观下载:当前哨兵ping检测,超过了down-after-milliseconds没有进行回复,该哨兵对该节点做失败判定,这是主观下线
    2. 客观下线:当哨兵主观下线的节点是主节点时,会通过sentinel is-master-down-by-addr命令询问其它哨兵对主节点的判断,如果超过个数,当前哨兵认为主节点确实有问题,这时该哨兵做出客观下线的决定
  • 领导者 Sentinel 节点选举
    1. 每个 Sentinel都可以成为领导者,当Sentinel认为主节点主观下线之后,发送sentinel is-master-down-by-addr命令,要求将自己设置为领导者
    2. 收到命令的Sentinel节点,如果没有同意过其他Sentinel节点的sentinel is-master-down-by-addr命令,将同意,否则将拒绝(只能同意一个Sentinel)
    3. 如果该Sentinel节点发现自己的票数已经大于max(quorum, num(sentinels)/2 + 1),那么它将成为领导者
    4. 如果没有产生领导者,进行下一次选举
  • 选择从节点(slave)作为新的主节点(master)
说明
  1. 官方配置说明路径 redis/sentinel.conf (以后补个可下载路径)
  2. 官方API说明

我的个人博客,有空来坐坐

你可能感兴趣的:(Redis哨兵)