【问题标题】:Only one redis node is handling all the load只有一个 redis 节点在处理所有负载
【发布时间】:2021-09-23 13:03:14
【问题描述】:

我有一个 golang 服务(2 个 pod)并使用部署在 kubernetes 中的 redis 集群(每个 master 有 3 个 master 和 1 个 slave),所有 redis 节点都隐藏在 kubernetes 中的集群 ip 后面。在对我的 golang 服务进行负载测试时,我发现所有 redis 请求都只会发送到一个节点(不知道为什么会发生这种情况,根据文档,副本也将用于从 redis 读取数据,因为我们有 2 个 pod 在服务一直在运行,我们应该能够从 2 个副本中读取数据)。

golang 服务的上下文

Golang 服务在应用程序启动时仅打开一个连接,并使用该连接从 redis 获取数据。

【问题讨论】:

    标签: kubernetes redis load-balancing redis-cluster


    【解决方案1】:

    Golang 服务在应用程序启动时仅打开一个连接,并使用该连接从 redis 获取数据。

    这就是原因。当您的应用程序打开一个连接时,它当然会被路由到其中一个副本。在您保持连接打开之前,您将对所有请求使用相同的副本。 这与 Kubernetes 服务的工作方式无关。

    一个简单的解决方案是在每次需要 redis 客户端时打开一个新连接,但这当然会带来性能损失。

    另一种选择是在客户端打开一个连接池并使用所有这些连接。每个连接都应该以不同的副本结束,这样您应该可以更好地分散负载。

    【讨论】:

    • 感谢您的快速回答。我想知道同样的问题,但我的问题是,由于 go lang 服务的两个 pod 正在运行,因此这两个 pod 的 redis 连接最终应该在两个单独的副本中,对吧?
    • 是的,它们最终应该连接到不同的副本
    • 由于两个 pod 正在运行 volant 服务,因此它们应该从两个不同的副本中读取。知道为什么只有一个副本在处理所有负载吗?
    • 与您目前分享的信息无关。你能分享你的Service 和你连接到redis 的go sn-p 吗?
    猜你喜欢
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    • 2017-05-22
    • 1970-01-01
    • 2015-02-20
    相关资源
    最近更新 更多