Redis-sentinel哨兵模式

Sentinel模式由一个或多个Sentinel实例组成,可以监视任意多个主服务器和主服务器属下的从服务器,并且在被监视的主服务器下线超过设定时长时,自动将其属下的从服务器升级成新的主服务器进行处理命令请求,在下线的主服务器重新上线时,只能成为从服务器。

Sentinel启动和初始化的步骤

  1. 初始化服务器
    Sentinel本质是一个运行在特殊模式在的Redis服务器,所以首先启动一个普通的Redis服务器,但Sentinel不实用数据库,所以不进行RDB文件和AOF文件的载入。
    在这里插入图片描述
  2. 将普通Redis服务器使用的代码替换成Sentinel专用代码。
  3. 初始化Sentinel状态。比如正在执行的脚本的数量,FIFO队列。
  4. 根据给定的配置文件,初始化Sentinel监视的主服务器列表。即初始化内部的masters字典,字典的键是主服务器的名字,值是被监视主服务器对应的实例结构
  5. 创建连向主服务器的网络连接。这一步之后,Sentinel成为主服务器的客户端,可以向主服务器发送命令并从命令回复中得到相关信息。这一步会创建两个连向主服务器的异步网络,一个是命令连接,专门用来向主服务器发送命令并接受命令回复;另一个是订阅连接,订阅主服务器的__sentinel__:hello频道。

两个连接的目的】:1. 订阅连接为了不丢失__sentinel__:hello频道的任何信息。防止因为客户端断线而没收到消息。2. 命令连接是为了跟主服务器进行通信。

Sentinel启动后的一些操作

  1. 获取主服务器信息。
    Sentinel默认每十秒一次向主服务器发送INFO REPLICATION来获取主服务器的当前信息。获取的信息中,一方面是主服务器本身的信息,根据这些信息对主服务器的实例结构进行更新;一部分是主服务器属下从服务器的信息,根据这些信息就可以自动发现从服务器,并且更新主服务器实例结构的slave字典,如果从服务器的实例结构已经存在就进行更新,如果不存在就创建一个实例结构。

  2. 获取从服务器信息。为新的从服务器创建实例结构并创建订阅连接和命令连接

  3. 接受来自主从服务器的频道消息。一个Sentinel发送的信息会被其他Sentinel接收到,这些信息会被用于更新其他Sentinel对发送信息Sentinel的认知,也会被用于更新其他Sentinel对被监视服务器的认知

  4. 检测主观下线状态: Sentinel会每秒向与它建立命令连接的实例(主从服务器,其他Sentinel)发送Ping命令,通过回复判断其他实例是否在线。如果在设置的时间内,连续向Sentinel返回无效回复,那么Sentinel会修改这个实例的实例结构,将其置为主观下线状态

  5. 检测客观下线状态:当Sentinel判断一个主服务器主观下线,就向同样监视这一服务器的其他Sentinel进行询问,看他们是不是也认为主服务器进入下线状态**,如果超过Sentinel认为设定的值**,则 将其判断为客观下线,执行故障转移。

  6. 选举领头Sentinel:当服务器被判定为客观下线,Sentinel中需要选出一个领头Sentinel对下线主服务器进行故障转移操作。任何一个Sentinel都可能被选举,无论是否成功都会将自己的计数器自增一次,其中 的规则是先到先得,最先向目标Sentinel发送投票请求的Sentinel会获得目标Sentinel的票选,如果获得超过半数的票选,就成为领头Sentinel。

  7. 故障转移的三个步骤
    1. 在下线主服务器属下的所有从服务器里挑选一个状态良好,数据完整的从服务器,将其转换为主服务器。发送 slave no one,当被升级的服务器的role从slave变成master,代表已经顺利升级。
    2. 出现新的主服务器后,让其他从服务器去复制新的主服务器。发送SLAVEOF命令来实现。
    3. 将已下线的主服务器设置为新的主服务器的从服务器,等其重新上线,Sentinel向他发送SLAVEOF命令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值