Docker环境下Redis Sentinel自动发现功能失效求助
检查Docker端口映射与网络连通性
确保每个Sentinel容器启动时已通过-p 26379:26379完成端口映射,同时三个主机之间的26379端口未被防火墙/安全组拦截。可通过telnet <host-ip> 26379或nc -zv <host-ip> 26379验证跨主机端口连通性。确认
announce-ip/announce-port配置生效
进入每个Sentinel容器,执行SENTINEL GETCONFIG announce-ip和SENTINEL GETCONFIG announce-port,验证返回值是否为对应主机的可访问IP和26379端口。若配置未生效,需确认启动Sentinel时指定了正确的配置文件路径,且修改配置后已重启Sentinel服务。检查Sentinel的
myid唯一性
每个Sentinel必须拥有唯一的myid标识。查看各Sentinel的sentinel.conf文件中的myid字段,若存在重复值,修改为随机16位字符串后重启Sentinel。验证
__sentinel__:hello频道消息内容
在Master节点执行PSUBSCRIBE __sentinel__:hello,查看每条消息的第五个参数(Sentinel的IP:端口)是否与配置的announce-ip:26379一致。若消息中显示容器内部IP,说明announce-ip配置未正确加载,需检查配置文件路径及启动参数。排查Sentinel日志错误
查看各Sentinel的日志文件(路径通常为/var/log/redis/sentinel.log或容器内对应路径),搜索sentinel hello相关日志,检查是否存在无法连接其他Sentinel的错误信息(如Could not connect to Sentinel at x.x.x.x:26379),根据日志定位网络或配置问题。手动添加Sentinel节点验证
若自动发现仍异常,可在任意Sentinel中执行SENTINEL SENTINEL mymaster <other-sentinel-ip> 26379手动添加节点,再执行SENTINEL SENTINELS mymaster查看是否能列出。若手动添加成功,说明网络连通正常,需重点排查自动发现的消息解析或配置加载问题。
内容的提问来源于stack exchange,提问作者Navin Kumar

