哨兵模式概述

就是主节点宕机了,然后通过“哨兵”来自动从很多从节点中自动选出一个主节点来。从 Redis 2.8 开始就正式提供了 Sentinel (哨兵)架构来解决“手动切换为主服务器”问题。

哨兵模式是一种特殊的模式,首先 Redis 提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待 Redis 服务器响应,从而监控运行的多个 Redis 实例。

image-20211121081433399

它是根据投票的方式,得出的投票数自动将从库转换为主库。

这里的哨兵有两个作用

  • 通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。
  • 当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。

然而一个哨兵进程对Redis服务器进行监控,可能会出现问题,为此,我们可以使用多个哨兵进行监控。各个哨兵之间还会进行监控,这样就形成了多哨兵模式。

image-20211121081638591

假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行 failover(故障转移)过程,仅仅是哨兵1主观的认为主服务器不可用,这个现象成为主观下线

当后面的哨兵也检测到主服务器不可用,并且数量达到一定值时,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行 failover(故障转移)操作。切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线

启动哨兵模式

1、配置哨兵模式配置文件 sentinel.conf

# sentinel monitor <master-name> <ip> <redis-port> <quorum>
sentinel monitor redis-master-6379 127.0.0.1 6379 1

2、启动哨兵

[root@localhost bin]# redis-sentinel ./sentinel.conf

3、如果主节点宕机了,那么哨兵模式将会通过投票的方式决定哪台是主节点,通过日志可以了解到。

1882:X 21 Nov 2021 08:39:24.386 # +vote-for-leader 8ce966f56d289a4560ef0479726cf5899fdb1101 3
1882:X 21 Nov 2021 08:39:24.387 # +elected-leader master redis-master-6379 127.0.0.1 6379
1882:X 21 Nov 2021 08:39:24.387 # +failover-state-select-slave master redis-master-6379 127.0.0.1 6379
1882:X 21 Nov 2021 08:39:24.443 # +selected-slave slave 127.0.0.1:6381 127.0.0.1 6381 @ redis-master-6379 127.0.0.1 63791882:X 21 Nov 2021 08:39:24.443 * +failover-state-send-slaveof-noone slave 127.0.0.1:6381 127.0.0.1 6381 @ redis-master-6379 127.0.0.1 6379