Redis哨兵故障转移时认证失效问题咨询
Redis Sentinel故障转移后新主节点无需认证的问题解答
这确实是预期行为,Redis Sentinel 默认不会自动帮新晋升的主节点添加 requirepass 配置,背后的原因和解决办法我给你梳理明白:
为什么会出现这个情况?
Sentinel 的核心工作是做故障检测、自动故障转移、通知客户端新主地址,它并不会主动修改 Redis 节点的配置文件。你原来的从节点只配置了 masterauth mypassword——这个参数是用来让从节点连接主节点时做身份认证的,而不是要求客户端连接它自己时输入密码。所以当它被 Sentinel 晋升为主节点后,因为没有 requirepass 配置,自然就不需要客户端验证密码了。
怎么解决这个问题?
有两种常用方案,你可以根据自己的场景选择:
方案一:提前给所有从节点同时配置requirepass和masterauth
直接给所有从节点的 redis.conf 里同时加上两行配置:
requirepass mypassword masterauth mypassword
这样不管节点是作为从节点运行,还是未来被晋升为主节点,都会要求客户端连接时输入密码,同时也能正常用masterauth的密码去连接主节点(当它是从节点时)。
注意:修改配置后记得重启从节点让配置永久生效;如果不想重启,也可以用
redis-cli执行config set requirepass mypassword临时生效,但重启后会丢失,所以还是建议修改配置文件。
方案二:用Sentinel的钩子脚本自动配置新主节点
如果不想提前给从节点加requirepass,可以借助 Sentinel 的 client-reconfig-script 钩子,在故障转移完成后自动给新主节点设置密码:
- 写一个简单的 shell 脚本,比如
set_new_master_pass.sh,内容大致如下:
#!/bin/bash NEW_MASTER_IP="$1" NEW_MASTER_PORT="$2" redis-cli -h "$NEW_MASTER_IP" -p "$NEW_MASTER_PORT" config set requirepass mypassword redis-cli -h "$NEW_MASTER_IP" -p "$NEW_MASTER_PORT" config rewrite
- 在所有 Sentinel 的配置文件里添加一行:
client-reconfig-script mymaster /path/to/set_new_master_pass.sh
(mymaster替换成你实际的主节点名称,路径换成脚本的真实路径)
3. 给脚本添加执行权限:chmod +x /path/to/set_new_master_pass.sh
额外注意事项
- 不管用哪种方案,一定要给所有 Sentinel 节点的配置文件加上
auth-pass mypassword,这样 Sentinel 才能正常连接所有 Redis 节点(包括新晋升的主节点),不然 Sentinel 会因为认证失败无法监控节点。 - 方案一的话,从节点平时作为从节点时,客户端连接它也需要输入密码,如果你不需要从节点也做认证,那方案二更适合你。
内容的提问来源于stack exchange,提问作者Tamar




