【问题标题】:How to configure Spring redis sentinel in kubernetes如何在 Kubernetes 中配置 Spring redis sentinel
【发布时间】:2020-05-06 09:05:37
【问题描述】:

我有一个 redis sentinel master slave 设置,有 1 个 master 和 3 个 slave,这是在 Kubernetes 环境中。在 spring lettuce 配置中,我必须使用端口号指定 sentinels URL。我应该如何为每个哨兵指定 URL? Spring doc 指定 IP 和端口。在本地可以,但是在k8s中,我应该如何配置?我使用bitnami redis chart 安装了设置。下面是它在本地是如何完成的。

@Bean
public RedisConnectionFactory lettuceConnectionFactory() {
    RedisSentinelConfiguration sentinelConfig = 
        new RedisSentinelConfiguration().master("mymaster")
                                        .sentinel("127.0.0.1", 26379)
                                        .sentinel("127.0.0.1", 26380);
    return new LettuceConnectionFactory(sentinelConfig);
}

谢谢

【问题讨论】:

    标签: kubernetes redis spring-data-redis lettuce redis-sentinel


    【解决方案1】:

    第一件事 -> 使用 bitnami helm 图表是做事的正确方法。

    虽然实现方式有所不同,但以下是我们如何实现相同的主从设置,并且还避免了上述问题,同时确保了我们所见过的最大可用性(主服务器的停机时间少于 2 秒)

    • 我们提供了两种服务——一种用于主服务器,另一种用于从服务器。

    • 在从属和主控之间共享的 PV PVC,只有主控可以写入,从属只能从 PV 读取

    • 通过这种方式,我们始终可以确保主节点始终运行 1 个 pod,从节点的无头服务后面有 N 个副本。

    在应用程序中,slave 和 master 的 URL 总是不同的,从而确保了清晰的“WRITE”和“READ”隔离,提高了系统的稳定性,几乎没有读取失败。

    【讨论】:

      【解决方案2】:

      安装 helm chart 并启用 sentinel

      helm install my-release bitnami/redis --set sentinel.enabled=true
      

      将创建一个名为 my-release-redis 的服务,并可以通过 my-release-redis.namespacename.svc.cluster.local:26379 从任何命名空间和同一命名空间访问它,使用 my-release-redis:26379 会更简单

      【讨论】:

      • 我知道 my-reelase-redis 服务已创建。但是我应该在我的 sentinel() 方法中提供什么作为参数。我应该为每个哨兵 pod 重复服务名称和端口还是只重复一个时间?
      • 您可以使用一次服务名称..在幕后它将连接到其中一个 pod
      • 感谢您的回复。但是,当我安装图表时,redis 会有两个服务。一个是redis,一个是redis-headless。我的理解是应该使用headless-svc作为url参数。对吧?
      • 因此,如果您查看 helm 安装输出,它会说明如何访问哨兵,我想我在那里看到了 redis 而不是无头
      猜你喜欢
      • 1970-01-01
      • 2017-12-10
      • 1970-01-01
      • 2014-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-08
      • 2018-04-12
      相关资源
      最近更新 更多