如何使EC2实例自动加入HAProxy的最佳实践是什么?

10

我们正在扩展我们的EC2架构,使其能够处理更多的负载。目前,我们有一系列配置在HAProxy上的机器来做基本的负载均衡,但我们正在寻求最佳实践方式,让新实例在线并自动(或几乎自动)加入HAProxy。

理想情况下,我们会监控系统负载或依赖于几年的分析数据,以制定粗略的时间表,当我们达到一个阈值或计划的时间时,启动一个进程创建一个新实例,让新节点连接到我们的HAProxy机器上的一个系统,将其主机名写入配置文件并重新加载HAProxy,使其成为池的一部分。

我们正在考虑使用Amazon的ELB,一旦我们扩大到需要覆盖多个区域,但在那之前,我们需要一个简单的设置,可以添加/删除HAProxy上的机器。

我知道有一些服务可以支付来管理这些东西,但Scalr似乎限制了我们只能使用特定的实例类型,而Rightscale太昂贵了,所以像其他许多人一样,我们正在寻求自己的解决方案。

不幸的是,那些自己搞解决方案的人似乎对他们的过程有点保密。


1
你在使用Scalr时遇到了什么问题?只要安装了Scalr客户端,就可以使用自定义实例类型。我们正在使用他们的nginx负载均衡器,目前效果非常好。 - aporat
啊,我不知道Scalr会允许自定义构建。我浏览了一下它们的产品,看起来像是必须使用预配置的实例才能正常工作。 - iandouglas
1个回答

11

你不需要过度思考这个解决方案 ;)

你可以在HAProxy配置文件中简单地“预配置”服务器。它们将显示为“离线”,并且在你实际上将它们上线之前,它们永远不会收到请求。

以下是一个示例,假设你只有5台机器在线,并希望在未来2年内拥有10台机器:

listen web *:80
    balance source
    server  web1 192.168.0.101:80 check inter 2000 fall 3
    server  web2 192.168.0.102:80 check inter 2000 fall 3
    server  web3 192.168.0.103:80 check inter 2000 fall 3
    server  web4 192.168.0.104:80 check inter 2000 fall 3
    server  web5 192.168.0.105:80 check inter 2000 fall 3
    server  web6 192.168.0.106:80 check inter 2000 fall 3
    server  web7 192.168.0.107:80 check inter 2000 fall 3
    server  web8 192.168.0.108:80 check inter 2000 fall 3
    server  web9 192.168.0.109:80 check inter 2000 fall 3
    server  web10 192.168.0.110:80 check inter 2000 fall 3

有了这个配置,您将不需要重新启动HAProxy或进行任何丑陋的黑客攻击,至少一年内都不需要(除非您需要超过10个服务器,然后只需添加100个即可)。

如果您要向池中添加100个服务器,则还可以编写一个快速的shell脚本来自动生成此配置,实际上,如果您要向池中添加100个服务器,则应该编写一个脚本。


1
对上面的建议进行微调,这是我过去几个小时一直在努力解决的问题...不要直接指向内部IP,因为在Amazon上你没有静态的内部IP,即使你可以使用静态外部IP,但未分配它们会产生费用,并且你可能会遇到防火墙/流量更改的问题,我的建议是使用DynDNS服务(如dyndns.org)或提供API的DNS提供商(如Zerigo),并在机器上设置一些主机。如果你创建了10个主机,并将内部Amazon IP分配给它们,那么它应该可以工作。 - TiernanO
1
由于我在上面的评论中已经没有空间了,我需要指出:您可能需要定期清理DNS,因为如果您扩展到6个实例,然后缩减回只有4个实例,其他2个仍然具有IP地址,这些IP地址现在可能属于新实例。也许可以在启动和关闭时使用Amazon的实例数据编写脚本来命名机器...这是我解决问题的方法。 - TiernanO
1
更新:自从我上次发布这个问题以来,在我的新工作中,我遇到了同样的问题,但是规模更大,在使用RackSpace的数百台机器上,这将需要一种方式让这些机器对haproxy机器上的守护程序进行ping操作以便添加到配置中。 - iandouglas
2
这很聪明。但是回复TiemanO的评论,你可以在亚马逊上轻松地启动一个VPC(免费),以便您可以在自己的CIDR块上拥有内部地址的固定IP。 VPC的唯一费用是隧道费用。 - Neal Magee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接