Amazon EC2 上的 haproxy 和 keepalived

Mar*_*gus 5 domain-name-system haproxy amazon-ec2 amazon-elastic-ip keepalived

新的 Amazon Opsworks 服务使用 haproxy 而不是 Amazon 自己非常有限的弹性负载平衡器,所以我开始研究 haproxy 作为对我们的 Web 应用程序服务器进行负载平衡、提供会话故障转移等的更好选择。 我让 haproxy 顺利工作使用一台 haproxy 服务器和几台 Web 应用服务器,但我想避免 SPOF。

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

我想我想通了,我现在正在测试 - 您使用主服务器的内部 IP 在两台服务器上进行 keepalived。

小智 2

我也使用 haproxy 进行负载均衡,因为在设计时,Amazon 的 Elastic Load Balancing (ELB) 不支持 VPC 内的服务器。他们现在有这个功能(我相信,还没有使用过它,因为 haproxy 对我们来说效果很好)。

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

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

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

  • 在两台服务器上设置 haproxy(每个可用区一台)
  • 还将我们的后端(例如 Web)服务器划分为两个或多个可用区
  • 将弹性 IP 设置为 haproxy 服务器之一(在我们选择的“主”AZ 中)。这是 Web 客户端将访问的 VIP。
  • 从外部源(该 AWS 区域之外)监控 VIP。如果发生故障(实例或整个可用区),请将弹性 IP 重新映射到辅助 haproxy 服务器(假设测试正在该主机上通过)。
    • EIP 参考: http: //aws.amazon.com/articles/1346
    • 注意:我们目前正在手动执行此操作(很少需要 - 每年一次或两次可用区中断),但这可以使用 AWS API 轻松编写脚本,并让监控服务器在出现故障时触发切换。
    • 另请注意,EIP 重新映射需要付费(每月 100 次免费重新映射,每次重新映射 0.10 美元)。由于可用区中断相对罕见,因此我认为这不会成为问题。

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