Redis Sentinel跨站点部署问题:本地IP与虚拟IP冲突
解决Redis Sentinel跨站点主从连接中断的问题
这个场景我之前帮团队排查过好几次,核心矛盾就是Sentinel默认会把主节点的本地私有IP同步给从节点,但跨站点的从节点根本访问不到这个IP。给你几个针对性的解决方案,按推荐优先级排序:
方案一:让主节点主动宣告虚拟IP(最推荐)
Redis主节点可以通过配置指定对外暴露的IP,这样Sentinel和从节点都会用这个IP来连接它,而不是自动识别的本地IP。操作步骤:
- 编辑主服务器B的Redis配置文件,添加一行:
(如果你用的是Redis 5.x及更早版本,把replica-announce-ip <你的虚拟vIP地址>replica换成slave,即slave-announce-ip) - 重启主节点B,再重启部署在B上的Sentinel实例
- 验证:登录从服务器P,执行
INFO replication,查看master_host字段,应该显示的是vIP而不是B的本地IP
方案二:配置Sentinel强制使用vIP识别主节点
如果不想修改主节点配置,也可以从Sentinel侧入手,让它忽略主节点的本地IP,直接用vIP来维护主从关系:
- 编辑Sentinel的配置文件,添加以下两行:
第一行让Sentinel自己对外宣告vIP,第二行禁止Sentinel解析主节点的hostname到本地IPsentinel announce-ip <你的虚拟vIP地址> sentinel resolve-hostnames no - 重启Sentinel后,执行
sentinel master <你的主节点名称>,检查返回结果里的ip字段是不是vIP
方案三:临时应急(不推荐长期用)
如果需要快速恢复连接,又暂时没法修改配置,可以手动指定从节点的主地址,同时阻止Sentinel修改从节点配置,但这样会丧失Sentinel的自动故障转移能力:
- 登录从服务器P,执行Redis命令:
REPLICAOF <你的虚拟vIP地址> <主节点端口> - 编辑Sentinel配置文件,添加:
这会阻止Sentinel通过脚本修改从节点的主配置,但故障转移后你得手动更新从节点的主地址,所以只适合临时救急sentinel deny-scripts-reconfig yes
额外注意事项
- 确保两个站点的防火墙都放开了Redis(默认6379)和Sentinel(默认26379)的端口,vIP能双向通信
- 每次修改配置后,一定要检查Sentinel日志,确认它识别的主节点地址是vIP,避免配置没生效
- 如果有多台Sentinel实例,所有实例的配置要保持一致,不然会出现主节点地址不一致的问题
内容的提问来源于stack exchange,提问作者V. Guillemette
相关产品推荐
相关产品推荐

