You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes上使用ot-redis-operator部署主从Redis集群的Spring Boot配置问题

K8s环境下Redis Operator部署集群的Spring Boot正确配置方案

核心原理说明

Redis Cluster 采用客户端分片架构,客户端需要获取全量集群节点拓扑才能直接将请求路由到正确节点,仅通过 Service 访问会出现 MOVED 重定向问题,且 StatefulSet 部署的 Redis Pod 重建后 IP 会变化,必须开启客户端拓扑自动刷新能力。

之前配置的问题说明

  • 单节点配置spring.redis.host:默认启用单点连接模式,客户端不会处理 Redis 返回的 MOVED 重定向响应,直接抛出异常
  • 仅配置两个 Service 作为集群节点:若使用普通 ClusterIP Service,Lettuce 会将 Service IP 误识别为集群节点,无法正确拉取全量拓扑,NOAUTH 报错是因为新发现的节点未统一应用密码配置,节点感知不全存在路由错误隐患
  • 写死6个Pod IP:Pod 重建后 IP 会变化,配置无法复用,确实不合理

正确配置方案

第一步:选择稳定的种子节点

无需配置动态的 Pod IP,可选两种稳定的种子节点配置方式:

  1. 优先使用 StatefulSet 稳定域名:Redis 集群 leader 节点的 StatefulSet 域名固定,格式为<pod-name>.<headless-service-name>.<namespace>.svc.cluster.local:6379,配置3个leader域名作为种子节点即可。如果应用和Redis集群部署在同一个Namespace下,域名可简写为redis-cluster-leader-0.redis-cluster-leader:6379
  2. 若将redis-cluster-leader配置为 Headless Service(spec.clusterIP: None),可直接配置redis-cluster-leader:6379作为唯一种子节点,Headless Service 会自动解析出所有 leader 节点的 IP

第二步:开启Lettuce拓扑自动刷新

必须开启集群拓扑自动刷新,才能在 Pod 重建、主从切换时自动更新客户端节点列表,解决删Pod后无路由、超时问题。

第三步:完整配置示例

application.properties 格式:

# 集群种子节点配置
spring.redis.cluster.nodes=redis-cluster-leader-0.redis-cluster-leader:6379,redis-cluster-leader-1.redis-cluster-leader:6379,redis-cluster-leader-2.redis-cluster-leader:6379
# 全局密码配置,自动应用到所有新发现的节点,解决NOAUTH报错
spring.redis.password=替换为你的Redis密码
# 开启Lettuce集群拓扑刷新
spring.redis.lettuce.cluster.refresh.enabled=true
# 定时刷新周期,可根据业务调整
spring.redis.lettuce.cluster.refresh.period=10s
# 开启自适应刷新,遇到MOVED/ASK重定向、节点离线时自动触发刷新
spring.redis.lettuce.cluster.refresh.adaptive=true
# 可选:优先从从节点读取,分摊主节点压力
spring.redis.lettuce.cluster.read-from=REPLICA_PREFERRED
# 连接池配置(按需添加)
spring.redis.lettuce.pool.max-active=20
spring.redis.lettuce.pool.max-idle=8
spring.redis.lettuce.pool.min-idle=2

application.yml 格式:

spring:
  redis:
    cluster:
      nodes:
        - redis-cluster-leader-0.redis-cluster-leader:6379
        - redis-cluster-leader-1.redis-cluster-leader:6379
        - redis-cluster-leader-2.redis-cluster-leader:6379
    password: 替换为你的Redis密码
    lettuce:
      cluster:
        refresh:
          enabled: true
          period: 10s
          adaptive: true
        read-from: REPLICA_PREFERRED
      pool:
        max-active: 20
        max-idle: 8
        min-idle: 2

验证方式

启动应用后可通过日志或Actuator端点确认,客户端可识别到全部6个集群节点,随机删除Pod后等待拓扑刷新完成,业务无报错即可。

内容的提问来源于stack exchange,提问作者Shadov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 19:51:03