通过 HAProxy 在 coreos 集群上进行负载均衡

Load balancing by HAProxy on coreos cluster

尝试在 CoreOS(容错集群)上使用 HAProxy 进行简单的负载平衡。这是场景 1)两个CoreOs实例集群 2) 一个 CoreOS 实例(比如 41.100.51.011)有 1 个 HA 代理和 2 个 NodeJs 容器。所以总共有 3 Docker 个容器 3) 这是容错场景,因此如果一个实例出现故障,服务将在集群 CoreOs 实例 (41.100.51.001) 中启动 4) 现在在 DNS 服务器上,abc.com 应该映射到 41.100.51.011 或 41.100.51.001 的正确映射是什么 5) 假设 abc.com 映射到第一个,这将关闭并且服务在第二个实例上启动 运行,用户将如何访问该站点。由于 DNS 服务器仍将指向旧 IP 6) 如何将 DNS 服务器设置更改为第二个 CoreOS 实例,以防它关闭并且服务启动 运行 到另一个实例? 7) 我们是否有其他解决方案,或者我没有得到正确的解决方案

您需要的基本事件是容器生成或终止。此信息位于 coreos 使用的 etcd 数据库中。有一种叫做 'watch' 的机制可以让你根据 etcd 中的信息变化来做一些事情。下面是两个例子。

您可以使用 etcd, skydns and registrator 的组合来为容器提供 dns。基本概念是,随着容器的诞生和消亡,注册商会更新数据库 (etcd),包括 IP 地址和服务类型。 etcd中的信息被skydns用来服务dns。

haproxy 有一个不同的问题,但是...您必须使用静态配置文件中的服务器配置 haproxy.cfg 文件。因此,当容器更改时,haproxy.cfg 文件会更新并重新加载。关于如何做到这一点有一篇很好的文章 Between reality and cyberspace

当然,如果您想为入口点冗余启动多个 haproxies,为服务冗余启动多个容器,则需要结合使用这两种技术。

-g