新的 Amazon Opsworks 服务使用 haproxy,而不是 Amazon 自己非常有限的弹性负载均衡器,因此我开始研究 haproxy,将其作为负载平衡我们的 Web 应用服务器、提供会话故障转移等的更好选择。我让 haproxy 通过一台 haproxy 服务器和几台 Web 应用服务器顺利运行,但我想避免 SPOF。
我的问题是,我是否需要在每个 haproxy 服务器上设置第二个 NIC,可能使用相同的内部 IP 地址 10.0.0.x?由于分配外部地址(弹性 IP)并将流量转发到内部 IP 是由 Amazon 完成的,因此我不确定如何配置它。
我想我已经明白了,现在正在测试——你在两台服务器上都使用主服务器的内部 IP 进行 keepalived。
答案1
我也使用 haproxy 进行负载平衡,因为在设计时,Amazon 的 Elastic Load Balancing (ELB) 不支持 VPC 内的服务器。他们现在有这个功能(我相信,由于 haproxy 对我们来说效果很好,所以没有用过它)。
我们根本没有尝试keepalived,原因有二:
- 我们怀疑如果不通过 AWS(控制台或 API),我们是否可以更改服务器上的私有 IP。此外,AWS 不允许同一 VPC 内的两台服务器具有相同的内部 IP 地址。
- 我们需要多可用区设置以实现高可用性。VPC 内的服务器内部 IP 基于 VPC 子网,每个子网只能属于 1 个 VPC。因此,我们不能让两个不同可用区上的两个主机位于同一子网内。
因此,我们实施的解决方案是:
- 在两台服务器上设置 haproxy(每个 AZ 上一个)
- 还将我们的后端(例如 Web)服务器划分到两个或更多可用区
- 将弹性 IP 设置为其中一个 haproxy 服务器(在我们选择的“主要”AZ 中)。这是 Web 客户端将访问的 VIP。
- 从外部源(AWS 区域之外)监控 VIP。如果发生故障(实例或整个 AZ),请将 Elastic IP 重新映射到辅助 haproxy 服务器(假设测试在该主机上通过)。
- EIP 编号: http://aws.amazon.com/articles/1346
- 注意:我们目前正在手动执行此操作(很少需要 - 每年一次或两次可用区中断),但这可以使用 AWS API 轻松编写脚本,并让监控服务器在发生故障时触发切换。
- 另请注意,EIP 重新映射需要付费(每月 100 次免费重新映射,每次重新映射收费 0.10 美元)。由于 AZ 中断相对罕见,我认为这不会成为问题。
一个潜在的风险是,在 AWS 发生重大中断时,我们有时会注意到 AWS 控制台和 API 会开始出现故障(完全故障或比正常情况更频繁)。这可能会影响重新映射弹性 IP 的尝试。