使用ioredis连接带密码的Redis Sentinel出现NOAUTH错误求助
问题分析与解决方案
从你的日志和配置细节来看,问题的核心非常清晰:你只配置了Sentinel服务的认证密码(sentinelPassword),但你的主Redis节点(192.168.0.23:6379)本身也开启了密码认证,而你没有在ioredis的配置中提供主节点的认证密码。
看日志里的关键片段就能确认这一点:
2020-02-07T18:06:10.106Z ioredis:redis write command[192.168.0.23:6379]: 0 -> info([]) Redis connected
...
Redis error in (/config/redis.js) ReplyError: NOAUTH Authentication required.
当ioredis通过Sentinel成功定位到主节点后,直接发送了info命令,但没有先执行auth操作——因为你没告诉它主节点的密码,所以主节点拒绝了未认证的请求,抛出了NOAUTH错误。
修复方案
在你的ioredis配置中添加password字段,填入主Redis节点的认证密码即可,完整配置示例如下:
new Redis({ sentinels: [ { host: "192.168.0.35", port: 26379 } ], name: "redismaster", sentinelPassword: "sentinelPassword", // 用于认证Sentinel服务的密码 password: "your-master-redis-password", // 主Redis节点的认证密码 sentinelRetryStrategy: function(times) { return Math.max(times * 100, 3000); } });
补充说明
sentinelPassword仅用于和Sentinel服务本身的认证,只有当你的Sentinel集群开启了密码验证时才需要配置;password是用于Redis主/从节点的认证,只要你的Redis节点配置了requirepass,就必须填写这个字段;- 如果你的主从节点密码不一致,还可以额外配置
slavePassword字段单独指定从节点的密码(不过实际场景中通常会保持主从密码一致)。
内容的提问来源于stack exchange,提问作者Yacine BENABDESSELAM
相关产品推荐
相关产品推荐

