2

我已经使用 Kubernetes 部署了一个 Redis 集群。我现在正在尝试使用 HAProxy 进行负载平衡。如果您有静态 IP,HAProxy 非常适合对 redis 集群进行负载平衡。但是,我们在使用 kubernetes 时没有这个。在测试故障转移时,Redis 和 Kubernetes 分别处理新主节点的选举和部署新 pod。但是,kubernetes 会为新的 Pod 选择一个新的 IP。我们如何将这个新 IP 注入 HAProxy 健康检查并删除旧的主 IP?

我有以下设置。

  +----+ +----+ +----+ +----+
  | W1 | | W2 | | W3 | | W4 |   Web application servers
  +----+ +----+ +----+ +----+
   \     |   |     /
    \    |   |    /
     \   |   |   /
      +---------+
      | HAProxy |
      +---------+
       /   \      \
   +----+ +----+ +----+
   | P1 | | P2 | | P3 |          K8S pods = Redis + Sentinel
   +----+ +----+ +----+

这与haproxy 博客上描述的设置非常相似。

4

1 回答 1

2

根据https://github.com/GoogleCloudPlatform/kubernetes/tree/master/examples/redis它使用哨兵来管理故障转移。这将问题简化为“正常”的基于哨兵的解决方案。

在这种情况下,我建议在与 Senrinels 相同的容器中运行 HAProxy,并使用简单的哨兵脚本来更新 HAProxy 配置并发出重新加载。一个只与主服务器对话的简单 HAProxy 配置可以很容易地成为一个简单的搜索、替换、重新加载脚本。

哦,不要在该博客文章中使用 HAProxy 检查。它不考虑或检测裂脑情况。您可以使用简单的端口检查可用性,或者编写一个自定义检查来查询每个哨兵,并且只与至少有两个哨兵将其报告为主节点的那个对话。

于 2015-03-20T01:45:34.373 回答