如何在 Aws 自动缩放中使用 Haproxy 而不是 ELB?

How to use Haproxy in Aws auto scaling instead of ELB?

如何在Aws auto scaling中使用Haproxy代替ELB 以及如何将现有的 aws 实例设置集成到自动缩放中。

您可以向您的 Auto Scaling 组添加通知。每次发生自动缩放操作时,都会向 SNS 主题添加一条消息。您可以为 SQS 队列订阅该主题,并使用脚本来调整您的 HAProxy 配置以响应每个事件。

另一种选择是在用户数据脚本中将实例添加到负载平衡器,但是您需要确保平衡器可以在它们消失时从容地删除它们。

我推荐 haproxy v 1.6 或更高版本,因为每次您使用以下配置向 HAProxy 添加或注销实例时,此版本都会保存服务器状态:

global
stats socket /tmp/socket
server-state-file /tmp/server_state

backend bk
load-server-state-from-file global
server s1 10.0.0.3:4444 check weight 11
server s2 10.0.0.4:4444 check weight 12

在重新加载 HAProxy 之前,我们使用以下命令保存服务器状态:

socat /tmp/socket - <<< "show servers state" > /tmp/server_state

您可以节省:

  • 运行状态
  • 管理状态(维护)
  • 权重(包括慢启动相对权重)

更多信息What's new in HAProxy 1.6

你应该有一个脚本来调整你的 HAProxy 配置以响应@Julio 所说的每个自动缩放事件。

此致

Here 是我写的一篇文章,描述了如何使用负载均衡器的一个自动缩放组和生命周期挂钩来触发 lambda 函数以在 ASG 更改时更新 route53。以下是 3 个主要步骤:

1.克隆 aws-load-balancer 存储库

大部分魔法都由 ansible 处理,所以让我们获取代码:

git clone https://github.com/filipenf/aws-load-balancer.git

2。编辑my-lb配置文件

在 aws-load-balancer 目录中,有一个 vars/my-lb.yml 文件定义了一些变量。您需要编辑该文件并更改其中的一些内容。即:

  • domain_name - 将使用的顶级域名(即: example.com)
  • auto_register_domain - 将根据 ASG 的生命周期挂钩更新的 FQDN(实例来自组 created/deleted)
  • 子网 - 负载均衡器所在的子网
  • lb_mappings - 你的域名和后端实例之间的映射

3。执行启动剧本

现在您已准备好执行启动剧本,这将为我们的负载均衡器创建必要的 AWS 资源。

ansible-playbook -i localhost, launch-lb.yml \
    -e server_config=mylb \
    -e aws_account_id=<your_aws_account_id> \
    -e key_name=<some_key>

如果一切顺利,您应该有一个只有一个实例的新 ASG。该实例已经为 lb_mappings 变量中指定的域正确配置了 haproxy。

此剧本还将创建运行所需的 lambda 函数、SNS 主题、生命周期挂钩和 IAM 角色。

haproxy 配置设置为使用粘性会话并将粘性-table 与其他 ASG 成员同步。除此之外,还有一个名为 "update-peers" 的脚本,它将检测对自动缩放组的更改并相应地更新对等配置。