Redis哨兵模式的原理
Redis哨兵(Redis Sentinel)模式是Redis官方推荐的一种高可用方案,它弥补了主从模式的不足。哨兵(Sentinel)通过监控的方式获取节点的工作状态是否正常,当节点发生故障时,Sentinel会自动进行故障转移,并将其监控的从节点(Slave)提升为主节点(master),从而保证了系统的高可用性。具体工作原理如下:
- 每个Sentinel以每秒钟一次的频率向它所监视的Master,Slave节点以及其他Sentinel实例发送一个PING命令。
- 如果一个实例距离最后一次有效回复PING命令的时间超过down-after-milliseconds选项所指定的值,则这个实例会被当前Sentinel标记为主观下线。
- 如果一个Master被标记为主观下线,则正在监视这个Master的所有Sentinel会以每秒一次的频率确认此Master节点是否进入了主观下线状态。
- 当有足够数量的Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态,则Master会被标记为客观下线 。
- 当Master被Sentinel标记为客观下线时,Sentinel会向下线Master的所有Slave节点发送INFO命令,发送频率会从10秒一次改为每秒一次(在一般情况下,每个Sentinel会以每10秒一次的频率向它监视的所有Master,Slave发送INFO命令)。
- 若没有足够数量的Sentinel同意Master已经下线,Master的客观下线状态就会变成主观下线。若Master重新向Sentinel的PING命令返回有效回复,Master的主观下线状态就会被移除。
- 若Master已客观下线,所有Sentinel节点会投票选举一个Sentinel节点进行故障处理,在从节点中重新选取一个主节点,其他从节点挂载到新的主节点上并自动复制新主节点的数据。
Redis哨兵集群的搭建
集群环境准备
1、一台Redis主节点服务器,两台Redis从节点服务器搭建一主二从主从复制集群。
- Master:主节点服务器,IP地址为192.168.238.71。
- Slave1:从节点服务器,IP地址为192.168.238.72。
- Slave2:从节点服务器,IP地址为192.168.238.73。
2、三台Redis哨兵节点服务器。
- Sentinel1:哨兵节点服务器,IP地址为192.168.238.74。
- Sentinel2:哨兵节点服务器,IP地址为192.168.238.75。
- Sentinel3:哨兵节点服务器,IP地址为192.168.238.76。
3、开放Redis服务器与哨兵服务器的端口。
3.1、开放Redis服务器的6379端口。

3.2、开放哨兵服务器的26379端口。

哨兵模式的配置
1、修改三台哨兵服务器的IP地址绑定、关闭保护模式并配置监控的主节点,主要配置项如下:
- bind:只允许绑定的IP地址连接。
- protected-mode:保护模式,默认为yes。
- daemon:是否后台运行,默认为no。
- sentinel monitor:监控的主节点信息。
1.1、在配置文件中新增以下内容,以下三项在配置文件中默认未启用。

1.2、配置监控的主节点信息。

- mymaster:用户自定义主节点名称。
- 192.168.238.71:主节点IP地址。
- 6379:主节点端口。
- 2:重新选举主节点时,需要通过的票数。
1.3、修改完毕,查看配置文件。

2、配置完成后,启动三台哨兵服务器。

3、登录任意一台哨兵服务器,查看哨兵状态。

4、查看哨兵日志,显示了当前的主从状态。

故障转移测试
1、关闭主节点服务器,再次查看哨兵状态。

2、查看哨兵日志,主节点已发生了转移。
