redis(四)搭建哨兵模式:一主二从三哨兵
一、哨兵模式简介
1.哨兵模式是干什么的
哨兵主要完成:故障监控->故障转移->通知客户端
哨兵节点:哨兵系统由一个或多个哨兵节点组成,哨兵节点就是特殊的redis节点,不存储数据
数据节点:主节点和从节点都是数据节点
2.故障转移的机制
主观下线:由哨兵节点定期监控主节点是否出现了故障,每个哨兵节点每隔1秒会向主节点、从节点及其它哨兵节点发送一次ping命令做一次心跳检测。 如果主节点在一定时间范围内不回复或者是回复一个错误消息,那么这个哨兵就会认为这个主节点主观下线了
客观下线:当超过半数哨兵节点认为该主节点下线了,这样就客观下线了。
选举主哨兵节点:此时哨兵节点会通过Raft算法〈选举算法)实现选举机制共同选举出一个哨兵节点为leader,来负责处理主节点的故障转移和通知。
主节点的选举:
- 过滤掉不健康的(已下线的),没有回复哨兵ping响应的从节点
- 选择配置文件中从节点优先级最高的(replication-priority,默认值为100)
- 选择复制偏移量最大的,也就是复制最完整的从节点。
二、节点规划:主从搭建
主节点:6379
从节点:6380/6381
具体的主从搭建可以看redis(三)里面的主从复制相关内容。
三、哨兵部署:单服务器
1.在三个redis文件夹的redis.conf同目录下创建sentinel.conf

2.sentinel.conf配置
文件夹 6379 里的 sentinel.conf:
port 26379
#sentinel monitor
sentinel monitor mymaster 127.0.0.1 6379 2
daemonize yes
logfile "./sentinel.log"
文件夹 6380 里的 sentinel.conf:
port 26380
sentinel monitor mymaster 127.0.0.1 6379 2
daemonize yes
logfile "./sentinel.log"
文件夹 6381 里的 sentinel.conf:
port 26381
sentinel monitor mymaster 127.0.0.1 6379 2
daemonize yes
logfile "./sentinel.log"
3.修改所有的redis.conf
打开replica-announce-ip注释改成下面的:
replica-announce-ip "127.0.0.1"
4.启动哨兵
# 在 6379 文件夹
./redis-sentinel sentinel.conf
# 在 6380 文件夹
./redis-sentinel sentinel.conf
# 在 6381 文件夹
./redis-sentinel sentinel.conf
5.打开新的终端窗口,实时观察哨兵日志
右键当前窗口,复制会话,执行下面命令
cd /usr/local/redis/bin
tail -f sentinel.log
6.杀死主节点
[root@VM-0-16-centos bin]# ps aux|grep redis
root 3490 0.0 0.1 156552 2760 ? Ssl 16:37 0:00 ./redis-server 0.0.0.0:6379
root 6761 0.0 0.1 162696 2768 ? Ssl 16:38 0:00 ./redis-server 0.0.0.0:6380
root 9114 0.0 0.1 156552 2740 ? Ssl 16:38 0:00 ./redis-server 0.0.0.0:6381
root 9660 0.0 0.0 112828 980 pts/0 S+ 16:44 0:00 grep --color=auto redis
root 21455 0.1 0.1 153988 2652 ? Ssl 16:42 0:00 ./redis-sentinel *:26379 [sentinel]
root 24395 0.1 0.1 153988 2668 ? Ssl 16:42 0:00 ./redis-sentinel *:26380 [sentinel]
root 27688 0.1 0.1 153988 2572 ? Ssl 16:42 0:00 ./redis-sentinel *:26381 [sentinel]
[root@VM-0-16-centos bin]# kill -9 3490
7.等待一段时间看哨兵日志
#发现主从节点
21455:X 31 Jan 2026 16:42:23.326 # +monitor master mymaster 127.0.0.1 6379 quorum 2
21455:X 31 Jan 2026 16:42:23.327 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6379
21455:X 31 Jan 2026 16:42:23.333 * +slave slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6379
#发现邻居哨兵节点
21455:X 31 Jan 2026 16:42:41.222 * +sentinel sentinel 25b93d49c38c547d14468a5666f0988833ef6a6d 127.0.0.1 26380 @ mymaster 127.0.0.1 6379
21455:X 31 Jan 2026 16:42:58.948 * +sentinel sentinel 789e1b7f0c966f7087a6df0f84c0b3a3b2deb6a8 127.0.0.1 26381 @ mymaster 127.0.0.1 6379
#主观下线
21455:X 31 Jan 2026 16:44:57.042 # +sdown master mymaster 127.0.0.1 6379
21455:X 31 Jan 2026 16:44:57.138 # +new-epoch 1
21455:X 31 Jan 2026 16:44:57.140 # +vote-for-leader 789e1b7f0c966f7087a6df0f84c0b3a3b2deb6a8 1
#客观下线
21455:X 31 Jan 2026 16:44:57.143 # +odown master mymaster 127.0.0.1 6379 #quorum 2/2
21455:X 31 Jan 2026 16:44:57.143 # Next failover delay: I will not start a failover before Sat Jan 31 16:50:58 2026
#故障转移从6379换到了6381
21455:X 31 Jan 2026 16:44:57.573 # +config-update-from sentinel 789e1b7f0c966f7087a6df0f84c0b3a3b2deb6a8 127.0.0.1 26381 @ mymaster 127.0.0.1 6379
21455:X 31 Jan 2026 16:44:57.573 # +switch-master mymaster 127.0.0.1 6379 127.0.0.1 6381
#重新认主
21455:X 31 Jan 2026 16:44:57.574 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6381
21455:X 31 Jan 2026 16:44:57.574 * +slave slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6381
21455:X 31 Jan 2026 16:45:27.603 # +sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6381
8.验证
查看新主节点状态
./redis-cli -p 6381 info replication

查看 6380 是否自动“认主”
./redis-cli -p 6380 info replication

四、哨兵部署:多服务器
假设你的三台服务器 内网IP 如下:
-
服务器 A (主):192.168.1.10
-
服务器 B (从):192.168.1.11
-
服务器 C (从):192.168.1.12
那么,三台服务器上的 sentinel.conf 应该统一改成这样:
# 1. 端口可以统一,也可以保留你的 26380,只要防火墙放行即可
port 26379
# 2. 必须改成主节点的真实 IP
sentinel monitor mymaster 192.168.1.10 6379 2
# 3. 运行模式和日志
daemonize yes
logfile "./sentinel.log"
# 4. 跨机部署强烈建议添加:告诉别人我的真实 IP
# 服务器 A 就写 A 的 IP,服务器 B 就写 B 的 IP
sentinel announce-ip 192.168.1.x
# 5. 安全与绑定
bind 0.0.0.0
protected-mode no
除了改哨兵配置,你还需要去修改那三台服务器上的 redis.conf:
-
从节点 (B 和 C):replicaof 192.168.1.10 6379 (将当前的 Redis 实例设置为 192.168.1.10:6379 的“从节点”)。
-
所有节点 (A, B, C):
-
bind 0.0.0.0 (允许跨机同步)。
-
protected-mode no。
-
replica-announce-ip <自己的ip>(告诉其他节点自己的地址)
-
确保防火墙打开了 6379 和 26379 端口,你的跨服务器哨兵集群就能像刚才单机测试时一样完美运行。








