我已经使用 Kubernetes 部署了 Redis 集群。我现在正在尝试使用 HAProxy 来进行负载平衡。如果您有静态 IP,HAProxy 非常适合对 Redis 集群进行负载平衡。然而,我们在使用kubernetes时却没有这个。在测试故障转移时,Redis 和 Kubernetes 分别处理新主节点的选举和部署新 Pod。但是,kubernetes 会为新 pod 选择一个新 IP。我们如何将这个新 IP 注入(inject)到 HAProxy 健康检查中并删除旧的主 IP?
我有以下设置。
+----+ +----+ +----+ +----+
| W1 | | W2 | | W3 | | W4 | Web application servers
+----+ +----+ +----+ +----+
\ | | /
\ | | /
\ | | /
+---------+
| HAProxy |
+---------+
/ \ \
+----+ +----+ +----+
| P1 | | P2 | | P3 | K8S pods = Redis + Sentinel
+----+ +----+ +----+
这与 haproxy blog 中描述的设置非常相似.
最佳答案
根据https://github.com/GoogleCloudPlatform/kubernetes/tree/master/examples/redis它使用哨兵来管理故障转移。这将问题简化为基于“正常”哨兵的解决方案。
在这种情况下,我建议在与 Senrinels 相同的容器中运行 HAProxy,并使用简单的哨兵脚本来更新 HAProxy 配置并发出重新加载。一个简单的 HAProxy 配置(只与 master 对话)可以很容易地成为一个简单的搜索、替换、重新加载脚本。
哦,不要使用该博客文章中的 HAProxy 检查。它不能解释或检测裂脑情况。您可以进行简单的端口可用性检查,也可以编写一个自定义检查来查询每个哨兵,并且只与至少有两个哨兵将其报告为主哨的那个哨兵进行通信。
关于redis - 如何动态设置 HAProxy IP 配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29155357/