Docker Compose 部署 Redis 哨兵集群
如果只是单机 Redis,优先看 Docker Compose 部署 Redis。需要主从复制加自动故障转移时,再上哨兵模式。
目标结构
一个常见的最小高可用组合是:
- 1 个 master
- 2 个 replica
- 3 个 sentinel
这样主节点挂掉时,哨兵才有机会完成自动故障转移。
Compose 文件的关键点
核心不是“容器能不能启动”,而是下面这几项有没有想清楚:
- 主从实例都要带认证参数
- 副本节点初始要显式指向主节点
- 如果存在 NAT、端口映射或外网访问,副本要显式声明外部可访问的地址和端口
例如副本节点的命令可以长这样:
command: >
redis-server
--slaveof redis-master 6379
--requirepass root
--masterauth root
--replica-announce-ip "nas.me"
--replica-announce-port 6380
--appendonly yes其中最容易漏掉的是:
--replica-announce-ip--replica-announce-port
如果部署环境里有端口映射,但这里没有写对,集群表面上能起来,客户端却很容易连到不可达地址。
Sentinel 配置的关键点
一个最小可用的 sentinel.conf 可以很短:
port 26379
dir "/tmp"
sentinel monitor mymaster nas.me 6379 2
sentinel auth-pass mymaster root
sentinel deny-scripts-reconfig yes
sentinel resolve-hostnames yes这里最关键的是:
mymaster:主库组名nas.me 6379:客户端真正可访问的主库地址2:至少有 2 个哨兵判定离线才触发 failover
验证方式
至少做三类检查:
docker-compose ps
docker exec -it redis-master redis-cli -a root info replication
docker logs redis-sentinel-1 -f如果这些都正常,再手动停掉主节点看一次故障转移:
docker stop redis-master一个经验判断
哨兵模式是否真的搭好,不看“容器是不是都 Up”,而看两件事:
- 主从关系是否正确
- 主节点挂掉后,客户端配置是否还能继续工作