Redis Sentinel无法连接其他Sentinel节点问题排查求助
Redis Sentinel 无法互相发现的排查与解决
针对你的Redis Sentinel集群无法互相发现的问题,以下是具体的排查步骤和解决方案:
1. 修复认证凭据不一致问题
你的配置中存在明显的认证密码不匹配:
- 配置项
sentinel sentinel-pass asdf2指定了Sentinel之间通信的密码 - 但用户
sentinel-user的实际密码是#asdf3(Redis配置中#是哈希密码的标识,实际密码为asdf3)
这会导致其他Sentinel尝试连接时认证失败,无法加入集群。解决方式:
统一两处密码,比如将 sentinel sentinel-pass asdf2 修改为 sentinel sentinel-pass asdf3,确保与user sentinel-user的密码一致。
2. 修正节点IP配置错误
检查所有Sentinel的bind和announce-ip配置:
- 你提供的配置中
announce-ip "xx.xx.1.51",如果这是其中一个节点的IP,那么另外两个Sentinel节点的bind和announce-ip必须设置为各自节点的实际IP(比如xx.xx.1.52、xx.xx.1.53) - 若所有Sentinel都上报同一个IP,会导致地址冲突,集群无法识别不同的Sentinel实例
解决方式:
每个节点的Sentinel配置中,bind和announce-ip都改为自身节点的真实IP,确保每个Sentinel对外暴露的地址唯一且正确。
3. 验证Sentinel端口的网络连通性
虽然使用了net=host模式,但仍需确认26379端口在节点间可访问:
在每个节点上执行以下命令,测试与其他节点Sentinel端口的连通性:
nc -zv xx.xx.1.xx 26379
如果连接失败,检查:
- 主机防火墙(firewalld/iptables)是否放行26379端口
- 云环境下的安全组规则是否允许节点间26379端口的通信
4. 清理Sentinel状态文件
Sentinel会在dir目录下生成自动保存的状态文件(sentinel.conf、dump.rdb),这些文件可能残留旧配置,导致集群状态异常:
- 停止所有Sentinel实例
- 删除每个节点
/opt/redis目录下的sentinel.conf和dump.rdb文件 - 使用修正后的配置重新启动所有Sentinel
5. 查看Debug日志定位问题
由于你设置了loglevel debug,可以直接查看Sentinel日志,搜索以下关键词定位错误:
Authentication error:认证失败相关问题Could not connect to sentinel:网络连通问题Invalid sentinel address:地址配置错误
验证修复结果
完成上述操作后,执行以下命令验证:
redis-cli.sh -h xx.xx.1.51 -p 26379 --user sentinel-user --pass asdf3 sentinel masters
查看输出中的num-other-sentinels是否变为2;再执行:
redis-cli.sh -h xx.xx.1.51 -p 26379 --user sentinel-user --pass asdf3 sentinel ckquorum redis1
正常情况下会返回OK 3 usable Sentinels. Quorum 2 is satisfied.
内容的提问来源于stack exchange,提问作者Scot Kreienkamp
相关产品推荐
相关产品推荐

