Redis Sentinel (哨兵)

作者:

Sentinel(哨兵)是 Redis 的高可用解决方案:由一个或者多个 Sentinel 实例组成的 Sentinel 系统可以监控多个主服务器,以及主服务器下属的所有从服务器,并在被监控的主服务器进入下线状态时,自动进行故障转移,新的主服务器代替已经下线的主服务器继续处理命令请求。

Sentinel 初始化

sentinel的本质就是一个运行在特殊模式下 Redis 服务器,使用和普通Redis 服务器不同的命令表,不需要使用数据库,所以初始化sentinel不会载入rdb或者aof文件。

简单的配置如下:

主服务器名字:mymaster ;主服务器 IP:127.0.0.1 ;主服务器 PORT:26379
当主服务器下线后至少2个哨兵同意主服务器才可以客观下线

sentinel monitor mymaster 127.0.0.1 26379 2   

当主服务器30秒没有响应被标记为主观下线

sentinel down-after-milliseconds  mymaster 30000 

故障转移时,支持多少个从服务器同时复制新的主服务器

sentinel parallel-syncs  mymaster  1
哨兵初始化步骤:

1)初始化状态
2)根据配置,初始化监视的主服务器列表
3)创建连向主服务器的网络连接

Sentinel 会以十秒一次的频率向监视的主服务器发送 INFO 命令,主服务器会回复大致下面的内容:

#Server
run_id :7611c59dc3a29aa6fa069f841bb6a1019008a9c
#Replication
role:master
slave1:ip=127.0.0.1,port=1111,state=online.offset=43,lag=0
slave2:ip=127.0.0.1,port=2222,state=online.offset=43,lag=0
slave3:ip=127.0.0.1,port=3333,state=online.offset=43,lag=0

根据主服务器的回复,哨兵就可以自动发现从服务器,与其建立订阅连接和命令连接。
在这里插入图片描述

哨兵之间的自动发现

哨兵和其监视的服务器之间建立了两个网络连接:命令连接和订阅连接。建立订阅连接之后,哨兵会通过订阅连接向服务器发送 SUBSCRIBE sentinel:hello。 哨兵对 sentinel:hello 频道的订阅会一直持续到与该服务器断开连接。

哨兵通过命令连接向监视的服务器发送命令告知服务器自己的存在,服务器通过订阅连接向所有的监视该服务器的哨兵发送回复信息,回复信息中会包含监视该服务器的所有的哨兵的信息。

下面就是 127.0.0.1:26379 这个哨兵通过订阅连接从频道中接收的它监视的主服务器 127.0.0.1:6379 发来的信息(第一条是自己的信息会被忽略):
在这里插入图片描述

哨兵根据主服务器发来的频道消息,与所有监视同一个主服务器的哨兵建立命令连接进行通信。
在这里插入图片描述

检测主观/客观下线

默认情况下,哨兵会每秒向与它创建了命令连接的实例(包括主服务器、从服务器、其他的哨兵)发送 PING 命令,如果一个实例在指定时间内连续返回无效的回复,哨兵就会将这个实例标记为主观下线。

注意:接收命令的实例如果返回非+PONG 、+LOADING、-MASTERDOWN或者指定时间内(sentinel down-after-milliseconds配置的时间)没有回复,就是无效的回复。

当指定数目(sentinel monitor mymaster 127.0.0.1 26379 2 配置的数目)的哨兵同意实例的状态是主观下线,就会将该实例的状态就变为客观下线。

选举 Sentinel leader

主服务器客观下线之后,需要选举出领头的哨兵来进行故障转移,每个监视这个主服务器的哨兵都有可能成为 leader,如果在指定时间内没有选举出来,过一段时间再进行一次选举。

每个哨兵会向其他哨兵发送下面的命令,包含 master 的 ip、 端口、自己的纪元和运行id。

SENTINEL is-master-down-by-addr <ip> <port> <current_epoch> <runid>

每个哨兵只会接收第一个到达的命令,并把收到的纪元和运行 id 发回给源哨兵,表示同意源哨兵作为 leader,如果有半数以上哨兵同意,选举成功。

故障转移

  1. 从已下线的主服务器的从服务器中挑选一个状态良好、数据完整的从服务升级为新的主服务器(执行 SLAVEOF no one命令,leader sentinel 每一秒向新的 master 发送 INFO 命令并观察回复的角色信息,当升级的从服务器 role 变为 master 时,就说明选中的从服务器已经顺利升级为新的主服务器。)

  2. 让已经下线的主服务器的所有从服务器改为复制新的主服务器。

  3. 将已将下线的主服务器设置为新主服务器的从服务器,当下线的主服务器在此重启时,会成为新主服务器的从服务器。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值