redis - 如何动态设置 HAProxy IP 配置?

标签 redis cluster-computing haproxy sentinel kubernetes

我已经使用 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/

相关文章:

node.js - 为什么要使用 SQL/NoSQL 数据库而不是编写自己的服务器端存储?

node.js - nodejs 集群 - socket.io-emitter 将数据发送到特定客户端

计算机集群中的Python库

ssl - Kubernetes Haproxy Ingress + Nginx 作为后端 Https

database - 如何在 Redis 中对哈希值进行排序?

google-app-engine - Google App Engine 和键值存储

node.js - 如何为 Redis/RethinkDB 指定备用公开端口(使用 Docker Compose)?

elasticsearch - 关于Elasticsearch集群

proxy - 使用 HAProxy 对 Tornado 应用程序的 WebSocket 连接进行负载平衡?

spring-boot - Haproxy 与 3 个 Spring Boot 应用程序