哨兵架构部署与配置要点
在哨兵架构中,建议将哨兵集群节点与Redis服务集群节点独立部署,这在生产环境中尤为重要,不推荐复用节点以避免单点风险。
在SpringBoot项目中,标准的配置方式非常简洁,核心在于正确配置哨兵节点地址。以下是典型的 application.yml 配置示例:
spring:
redis:
sentinel:
master: mymaster # 必须与哨兵配置中的`sentinel monitor`指定的主节点名称一致
nodes: # 配置所有哨兵节点的地址
- 192.168.1.100:26379
- 192.168.1.101:26379
- 192.168.1.102:26379
password: your-redis-password # 如果Redis服务启用了密码,在此配置
database: 0
lettuce:
pool:
max-active: 8
max-idle: 8
min-idle: 0
客户端服务发现机制解析
细心的开发者可能会发现,在上面的配置中,我们并未直接指定任何Redis主节点或从节点的地址。这是因为Lettuce(或Jedis)客户端内置了一套高效的自动服务发现机制,其工作流程如下:
- 连接哨兵:应用启动时,客户端会根据配置连接到其中一个哨兵节点。
- 查询主节点:客户端向哨兵发送
SENTINEL get-master-addr-by-name 命令,传入配置的 master 名称(如 mymaster),从而获取当前主Redis节点的真实IP和端口。
- 建立连接:客户端使用获取到的主节点地址建立实际的Redis连接,开始进行数据操作。
- 订阅事件:同时,客户端会订阅哨兵节点上的特定发布/订阅频道。
- 故障转移响应:当哨兵集群完成故障转移,选举出新的主节点后,会通过频道发布
+switch-master 事件。客户端监听到此事件后,会自动断开旧连接,并使用新的主节点地址重新建立连接,整个过程对应用程序几乎透明。

核心注意事项
- 哨兵节点配置:
spring.redis.sentinel.nodes 应配置集群中所有哨兵节点的地址,客户端会从中选择可用的进行连接,而不仅仅是配置所谓的主哨兵。
- Master名称一致性:配置项
spring.redis.sentinel.master 的值必须与Redis哨兵配置文件中的 sentinel monitor <master-name> ... 指令所定义的名称完全一致。
- 密码配置:如果Redis服务实例设置了密码,在
spring.redis.password 中配置即可。若哨兵进程本身也配置了密码(较少见),则可能需要额外设置 spring.redis.sentinel.password。
- 客户端选择:Spring Boot 2.x 版本默认使用Lettuce客户端,其原生支持哨兵模式。如果项目中使用的是Jedis客户端,请确保其版本对哨兵模式有良好支持。
通过以上配置与机制解析,开发者可以清晰地理解SpringBoot如何与作为关键的数据库/中间件的Redis哨兵集群协作,实现高可用的数据缓存服务。
|