深色模式
Redis 主从与哨兵
摘要:主从复制提供数据冗余与读写分离,Sentinel 负责监控与自动切换。本文搭建一主两从 + 三哨兵,并演练一次主库故障切换,验证应用侧如何感知新主。
适用环境
bash
# 建议:1 主 2 从,3 个 Sentinel(奇数个,避免脑裂平票)
redis-server --version
nc -zv 10.0.1.31 63791
2
3
2
3
操作步骤
1. 主库配置
ini
# /etc/redis/redis.conf(主库)
bind 10.0.1.30
requirepass Str0ngPass!2026
masterauth Str0ngPass!2026 # 便于切换后再同步
appendonly yes1
2
3
4
5
2
3
4
5
2. 从库配置
ini
# /etc/redis/redis.conf(从库)
bind 10.0.1.31
requirepass Str0ngPass!2026
masterauth Str0ngPass!2026
replicaof 10.0.1.30 6379 # Redis 5.0 之前是 slaveof
replica-read-only yes1
2
3
4
5
6
2
3
4
5
6
bash
sudo systemctl restart redis
redis-cli -a 'Str0ngPass!2026' INFO replication1
2
2
3. 哨兵配置(/etc/redis/sentinel.conf,三台都配)
ini
port 26379
bind 10.0.1.30
sentinel monitor mymaster 10.0.1.30 6379 2 # 2 表示 2 个哨兵同意才判定主观下线转客观下线
sentinel auth-pass mymaster Str0ngPass!2026
sentinel down-after-milliseconds mymaster 5000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 600001
2
3
4
5
6
7
2
3
4
5
6
7
sentinel monitor一行会被哨兵运行时改写,不要手工编辑已运行过的配置文件。
4. 启动哨兵
bash
sudo redis-sentinel /etc/redis/sentinel.conf --daemonize yes
redis-cli -p 26379 INFO sentinel
redis-cli -p 26379 SENTINEL masters
redis-cli -p 26379 SENTINEL replicas mymaster1
2
3
4
2
3
4
5. 演练故障切换
bash
# 在主库上模拟故障(可控方式:sleep 30 秒)
redis-cli -a 'Str0ngPass!2026' -h 10.0.1.30 DEBUG SLEEP 30
# 观察哨兵日志与切换结果
redis-cli -p 26379 SENTINEL get-master-addr-by-name mymaster1
2
3
4
5
2
3
4
5
危险
异步复制下切换会丢失主库未同步给从库的数据。若业务不能容忍,应评估 Redis 的 WAIT 命令或改用强一致方案,而不是默认信任哨兵切换零丢失。
6. 切换后处理
- 应用侧通过哨兵获取当前主节点地址,或接入支持 Sentinel 的客户端。
- 旧主恢复后会自动成为新主的从库,检查
INFO replication确认同步正常。
验证
bash
# 主库写,从库读
redis-cli -a 'Str0ngPass!2026' -h 10.0.1.30 SET probe v1
redis-cli -a 'Str0ngPass!2026' -h 10.0.1.31 GET probe # v1
# 从库写入应被拒绝(READONLY 错误)
redis-cli -a 'Str0ngPass!2026' -h 10.0.1.31 SET probe v2
# 哨兵可正确返回主地址
redis-cli -p 26379 SENTINEL get-master-addr-by-name mymaster1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
常见坑
WARNING
主从机器的 requirepass 与 masterauth 必须一致,否则切换后新从库同步会一直报认证失败。
WARNING
哨兵数量应为奇数且部署在不同机器;只有 1 个哨兵时它自身宕机就等于失去高可用能力。
DANGER
down-after-milliseconds 设置过小会因网络抖动频繁误切换;过大会延长故障恢复时间,一般 5~30 秒并结合业务容忍度调整。