You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Redis哨兵故障转移时认证失效问题咨询

Redis Sentinel故障转移后新主节点无需认证的问题解答

这确实是预期行为,Redis Sentinel 默认不会自动帮新晋升的主节点添加 requirepass 配置,背后的原因和解决办法我给你梳理明白:

为什么会出现这个情况?

Sentinel 的核心工作是做故障检测、自动故障转移、通知客户端新主地址,它并不会主动修改 Redis 节点的配置文件。你原来的从节点只配置了 masterauth mypassword——这个参数是用来让从节点连接主节点时做身份认证的,而不是要求客户端连接它自己时输入密码。所以当它被 Sentinel 晋升为主节点后,因为没有 requirepass 配置,自然就不需要客户端验证密码了。

怎么解决这个问题?

有两种常用方案,你可以根据自己的场景选择:

方案一:提前给所有从节点同时配置requirepassmasterauth

直接给所有从节点的 redis.conf 里同时加上两行配置:

requirepass mypassword
masterauth mypassword

这样不管节点是作为从节点运行,还是未来被晋升为主节点,都会要求客户端连接时输入密码,同时也能正常用masterauth的密码去连接主节点(当它是从节点时)。

注意:修改配置后记得重启从节点让配置永久生效;如果不想重启,也可以用redis-cli执行config set requirepass mypassword临时生效,但重启后会丢失,所以还是建议修改配置文件。

方案二:用Sentinel的钩子脚本自动配置新主节点

如果不想提前给从节点加requirepass,可以借助 Sentinel 的 client-reconfig-script 钩子,在故障转移完成后自动给新主节点设置密码:

  1. 写一个简单的 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
  1. 在所有 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

火山引擎 最新活动