如何在Aws自动缩放中使用Haproxy而不是ELB,以及如何将现有的aws实例设置集成到自动缩放中。
您可以向自动缩放组添加通知。每次发生自动缩放操作时,这将向SNS主题添加消息。您可以为主题订阅SQS队列,并使用脚本来调整HAProxy配置以响应每个事件。
另一种选择是在用户数据脚本中向负载均衡器添加实例,但是如果它们消失,您需要确保平衡器可以正常地删除它们。
Here是我写的一篇文章,描述了如何使用一个自动扩展组为loadbalancer和生命周期钩子来触发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文件。您需要编辑该文件并更改其中一些文件。即:
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配置设置为使用粘性会话并将粘性表与其他ASG成员同步。除此之外,还有一个名为“update-peers”的脚本,它将检测对自动调节组的更改并相应地更新对等配置。
我建议使用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
你可以保存:
您应该有一个脚本来调整您的HAProxy配置,以响应每个自动缩放事件,如@Julio。
问候