导读:本期聚焦于广州网站建设创作的《如何为Redis Sentinel配置密码认证并避免高可用集群被未授权控制?》,敬请观看详情。Redis Sentinel承担着主从监控、故障转移和通知客户端的核心职责,但很多部署并没有给Sentinel本身设置访问密码。攻击者一旦连接上Sentinel端口,就可以强制主从切换、修改配置甚至让集群瘫痪。本文从安全加固视角出发,结合Redis Stack环境的特殊点,逐步演示如何为Sentinel节点配置requirepass与masterauth,如何让主从节点正确同步认证信息,以及客户端连接Sentinel时应该怎样传递密码。同时还会分析常见配置错误,比如只设置主节点密码而忽略Sentinel节点密码、密码不一致导致故障转移失败等,帮助读者构建一个带认证保护的高可用Redis架构。全部操作基于redis-cli和配置文件修改,适合正在使用或计划使用Redis Sentinel的工程师参考。

Redis Sentinel是官方提供的高可用解决方案,它通过独立进程监控Redis主从节点,并在主节点故障时自动完成故障转移。很多人只关注Redis数据节点本身的密码设置,却忽略了Sentinel节点同样暴露在网络上,任何一个知道Sentinel端口的人都可以通过命令强制触发主从切换,甚至让Sentinel误判节点状态。因此,为Sentinel配置密码认证并不是可选项,而是生产环境的基本要求。

如何为Redis Sentinel配置密码认证并避免高可用集群被未授权控制?

Sentinel密码认证的作用与配置前提

Sentinel节点之间需要通过命令互相通信,Sentinel也会向Redis主从节点发送INFO、PING等命令。如果主节点设置了requirepass,那么Sentinel必须知道这个密码才能正常监控,否则Sentinel会把主节点标记为主观下线,进而触发不必要的故障转移。同理,如果Sentinel节点本身没有设置密码,任何客户端都可以连接Sentinel执行SENTINEL failover之类的危险命令。

配置Sentinel密码时有两个关键参数:一个是Sentinel自身的requirepass,用于限制客户端对Sentinel的访问;另一个是masterauth,用于Sentinel连接Redis主从节点时使用的密码。很多配置文件里masterauth容易被遗漏,导致故障转移后Sentinel无法和新主节点建立认证连接,集群状态异常。

另外需要注意,Redis主节点、从节点和Sentinel节点三者的密码必须保持一致,否则会出现主从复制中断或者Sentinel无法同步信息的情况。在Redis Stack环境中,由于包含了模块和额外的配置管理界面,密码设置的位置基本不变,但通过Redis Stack的配置面板修改时需要确保配置被正确持久化到sentinel.conf文件。

配置Sentinel节点和主从节点密码的完整步骤

首先修改Redis主节点和从节点的配置文件,添加requirepassmasterauth。主节点需要设置requirepass,从节点除了requirepass外还要设置masterauth指向主节点密码。下面是一个主节点配置示例:

# redis-master.conf
port 6379
requirepass "Str0ngP@ssw0rd"
masterauth "Str0ngP@ssw0rd"

从节点配置文件类似,但masterauth必须与主节点密码一致,否则复制连接会被拒绝。接着为Sentinel节点创建独立的配置文件sentinel.conf,内容如下:

# sentinel.conf
port 26379
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel auth-pass mymaster Str0ngP@ssw0rd
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
requirepass "SentinelP@ssw0rd"

这里sentinel auth-pass就是Sentinel连接Redis数据节点时使用的密码,而requirepass是保护Sentinel自身端口的密码。两个密码可以不同,但主从节点自身的requirepassmasterauth必须保持一致。启动Sentinel时使用redis-sentinel /path/to/sentinel.conf命令,或者在Redis Stack安装包中执行redis-stack-sentinel并指定配置文件。

配置完成后,可以通过redis-cli连接Sentinel验证。连接时如果不带密码,执行任何命令都会返回NOAUTH Authentication required。正确连接方式为redis-cli -p 26379 -a SentinelP@ssw0rd,然后执行SENTINEL master mymaster查看主节点信息。如果返回的flags包含master,说明Sentinel认证和监控均正常。

Redis Stack环境下Sentinel密码同步的注意事项

Redis Stack集成了Redis、RedisJSON、RediSearch等模块,部署Sentinel时通常使用同一套二进制文件。在Redis Stack中,Sentinel的配置仍然通过sentinel.conf文件管理,但部分云平台或容器镜像可能提供了环境变量注入方式。无论哪种方式,核心参数不变:requirepass用于Sentinel自身认证,sentinel auth-pass用于连接数据节点。

一个常见误区是只通过CONFIG SET命令动态修改密码,而没有写入配置文件。虽然CONFIG SET requirepass会立即生效,但Sentinel重启后就会丢失。正确的做法是同时修改sentinel.conf文件,并执行SENTINEL SET mymaster auth-pass Str0ngP@ssw0rd让运行时配置与文件保持一致。在Redis Stack的Web管理界面中修改密码时,也要确认底层配置文件是否被正确更新,否则重启后会出现配置回退。

此外,如果使用Docker部署Redis Stack和Sentinel,需要把配置文件挂载到容器内,并且注意容器启动脚本中密码参数的位置。例如通过-e REDIS_PASSWORD=xxx设置的环境变量可能只影响Redis数据节点,而不影响Sentinel进程,此时Sentinel仍然没有密码保护。建议显式提供一份完整的sentinel.conf并挂载到/etc/redis/sentinel.conf路径。

客户端连接与故障转移验证

客户端连接Sentinel获取主节点地址时,Sentinel不会要求客户端提供数据节点的密码,但客户端在连接返回的主节点地址后,仍然需要提供requirepass对应的密码。一些高级客户端(如Lettuce、Jedis、redis-py)支持在Sentinel模式下同时配置Sentinel密码和节点密码,避免认证失败。

故障转移过程中,Sentinel会提升一个从节点为新主节点,原主节点恢复后自动降级为从节点。此时新主节点必须已经配置了requirepassmasterauth,否则Sentinel无法向新主节点发送SLAVEOF命令,也无法完成复制拓扑更新。如果新主节点密码缺失,Sentinel日志中会出现NOAUTH Authentication required错误,并且故障转移流程会卡住。

可以通过手动触发故障转移来验证密码配置是否完整。在Sentinel连接中执行SENTINEL failover mymaster,观察日志和节点角色变化。如果一切正常,说明Sentinel密码、主从节点密码以及复制认证都配置正确。这个过程还能暴露出密码不一致、特殊字符转义等问题,建议在生产变更前先在测试环境完整演练一遍。

常见错误与排查思路

第一种错误是主节点设置了密码,但Sentinel没有配置sentinel auth-pass。这会导致Sentinel无法执行INFO命令,从而把主节点标记为sdown状态。排查时可以使用redis-cli -p 26379 -a SentinelP@ssw0rd sentinel masters查看每个主节点的flags,如果出现s_down且主节点实际存活,基本就是认证问题。

第二种错误是从节点的masterauth与主节点的requirepass不一致。主从复制建立时,从节点会使用masterauth向主节点认证,密码错误会导致复制中断。在从节点日志中会看到Master does not understand REPLCONF listening-port: -NOAUTH Authentication required类似的提示。解决办法是统一所有节点的requirepassmasterauth值。

第三种错误是密码包含特殊字符导致配置文件解析异常。例如密码中含有#、空格或双引号时,如果没有正确加引号转义,可能只生效部分密码。建议使用强随机密码并放在引号内,避免使用$!等shell敏感字符。如果使用redis-cli -a连接时密码包含特殊字符,可以用--no-auth-warning参数并确保密码正确转义。

最后,如果Sentinel节点之间的通信也需要加密或认证,目前Redis官方没有提供Sentinel间的TLS认证,但可以借助网络层ACL或防火墙限制Sentinel端口只允许可信来源访问。生产环境建议将Sentinel端口绑定到内网IP,避免暴露到公网。

Redis Sentinel密码认证Redis Stack修改时间:2026-08-29 06:36:50

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。