【问题标题】:Load balancing by HAProxy on coreos cluster通过 HAProxy 在 coreos 集群上进行负载平衡
【发布时间】:2015-09-21 18:38:14
【问题描述】:
尝试在 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)我们是否有其他解决方案,或者我没有做对
【问题讨论】:
标签:
load
containers
haproxy
coreos
【解决方案1】:
您需要的基本事件是容器生成或终止。此信息位于 coreos 使用的 etcd 数据库中。有一种称为“watch”的机制,它可以让你根据 etcd 中的信息变化来做一些事情。下面是两个例子。
您可以结合使用etcd、skydns 和registrator 来为容器提供dns。基本概念是,随着容器的诞生和消亡,数据库(etcd)由注册器更新,包括 IP 地址和服务类型。 etcd中的信息被skydns用来服务dns。
haproxy 有一个不同的问题,但是...您必须在静态配置文件中配置带有服务器的 haproxy.cfg 文件。因此,当容器更改时,haproxy.cfg 文件会更新并重新加载。关于如何做到这一点有一篇很好的文章Between reality and cyberspace。
当然,如果您想为入口点冗余启动多个 haproxy 并为服务冗余启动多个容器,则需要将这两种技术结合起来。
-g