haproxy和保持在亚马逊EC2

新的亚马逊Opsworks服务使用haproxy,而不是亚马逊自己非常有限的弹性负载平衡器,所以我开始调查haproxy作为负载平衡我们的Web应用程序服务器,提供会话故障转移等更好的select。我得到haproxy工作顺利与一个haproxy服务器和几个Web应用服务器,但我想避免SPOF。

我的问题是,我是否需要在每个haproxy服务器上设置第二个NIC,可能具有相同的内部IP地址10.0.0.x? 由于分配一个外部地址(弹性IP)和转发stream量到内部IP是由亚马逊完成我不知道如何configuration这个。

我想我已经知道了,现在我正在testing – 在主服务器上使用主服务器的内部IP。

我们也使用haproxy来进行负载均衡,因为在devise时,Amazon的Elastic Load Balancing(ELB)不支持VPC内的服务器。 他们现在有这个function(我相信,自从haproxy为我们工作以来,还没有使用它)。

我们根本没有尝试keepalived,原因有两个:

  1. 我们怀疑我们可以在不通过AWS(控制台或API)的情况下更改服务器上的私有IP。 此外,AWS不允许同一个VPC内的两台服务器具有相同的内部IP地址。
  2. 我们需要一个多可用区设置来实现高可用性。 VPC中的服务器内部IP基于VPC子网,每个子网只能属于1个VPC。 因此,我们不能让两个不同AZ上的两台主机位于同一个子网内。

因此,我们实施的解决scheme是:

  • 在两台服务器上安装haproxy(每个AZ上一个)
  • 还要将我们的后端(例如networking)服务器划分为两个或更多的AZ
  • 将Elastic IP设置为haproxy服务器之一(在我们select的“主要”AZ中)。 这是Web客户端将访问的VIP。
  • 从外部来源(在AWS地区之外)监控VIP。 如果发生故障(实例或整个AZ),请将弹性IP重新映射到辅助haproxy服务器(假设testing正在该主机上传递)。
    • EIP参考: http : //aws.amazon.com/articles/1346
    • 注意:我们现在正在手动执行此操作(很less需要 – AZ停机一年一次或两次),但是可以使用AWS API轻松编写脚本,并让监控服务器在出现故障时触发切换。
    • 另外请注意,EIP重映射(每月100次免费重映射每次0.10美元)需要花费。 由于AZ中断比较less见,我不认为这是一个问题。

一个潜在的风险是,在主要的AWS中断的时候,我们有时会注意到AWS控制台和API将开始失败(完全或比正常情况更频繁)。 这可能会影响尝试重新映射弹性IP。