哨兵集群
Redis哨兵是一种用于监控主从结构的高可用性方案
当主节点发生故障时,哨兵会自动将某个从节点提升为新的主节点,并通知其他从节点更新主节点信息
哨兵主要有三大功能:
- 监控:监控Redis实例是否正常运行
- 自动故障转移:当主节点出现问题时,自动将从节点提升为主节点
- 通知和协调:通过发布和订阅模式,将配置变更通知给客户端
配置高可用哨兵
主节点确定有如下配置:
bind 0.0.0.0
protected-mode yes
port 6379
requirepass 123456
daemonize yes
1
2
3
4
5
2
3
4
5
从节点的配置需要指定主节点:
bind 0.0.0.0
protected-mode yes
port 6379
slaveof 10.0.0.22 6379
requirepass 123456
masterauth 123456
daemonize yes
1
2
3
4
5
6
7
2
3
4
5
6
7
创建哨兵配置文件:sentinel.conf
echo "" > sentinel.conf
cat > sentinel.conf << EOF
port 26379
daemonize yes
protected-mode no
sentinel myid 29353d6dffaedf2df12e190357ea87454415c1ee
sentinel monitor mymaster 10.0.0.22 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel auth-pass mymaster 123456
EOF
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
启动哨兵:redis-sentinel ./sentinel.conf

成功启动,有个小错误看一下,根据实际情况修改
WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
这个警告表明 Redis 的 TCP backlog 设置为 511,但系统允许的最大值(somaxconn
)为 128
somaxconn
的默认值通常较小,增加它可以提高系统对大量并发连接的处理能力,但过大的值也可能导致系统资源耗尽
vim /etc/sysctl.conf
net.core.somaxconn = 511
sysctl -p
验证哨兵集群
在主 redis 验证状态

在从 redis 验证状态

在主节点设置一个键值,在从节点测试是否能查看


模拟故障转移,停止主 redis,查看 sentinel 日志信息
# 哨兵检测到原主节点 10.0.0.22:6379 出现了故障,并将主节点切换为 10.0.0.23:6379。这意味着 10.0.0.23 已被提升为新的主节点
127780:X 29 Aug 19:36:27.056 # +switch-master mymaster 10.0.0.22 6379 10.0.0.23 6379
# 原来的主节点 10.0.0.22 现在被重新配置为从节点,开始跟随新的主节点 10.0.0.23
127780:X 29 Aug 19:36:27.056 * +slave slave 10.0.0.22:6379 10.0.0.22 6379 @ mymaster 10.0.0.23 6379
# 哨兵检测到从节点 10.0.0.22:6379 出现了故障,进入了 sdown(subjectively down)状态,这意味着哨兵无法联系到该从节点
127780:X 29 Aug 19:36:32.091 # +sdown slave 10.0.0.22:6379 10.0.0.22 6379 @ mymaster 10.0.0.23 6379
1
2
3
4
5
6
2
3
4
5
6
开启之前的主节点
# 哨兵系统检测到从节点 10.0.0.22:6379 已经恢复正常,并从 sdown 状态(主观下线)中退出
# 意味着从节点 10.0.0.22:6379 已经恢复正常并重新与主节点同步
127780:X 29 Aug 19:39:37.269 # -sdown slave 10.0.0.22:6379 10.0.0.22 6379 @ mymaster 10.0.0.23 6379
1
2
3
2
3