我想在AWS中设置自动缩放。 我不想使用Elastic Load Balancer。
亚马逊的自动调节function可以在需求高峰期间无缝地创buildEC2实例以保持性能,并在需求停滞期间自动降低以最大限度地降低成本。
由于这个EC2实例是自动创build的,所以它们的主机名对于NGINX是未知的。
我知道,已经在nginx中有10个EC2实例的上游设置。
我希望能够在自动调节添加/更新/删除EC2实例时,自动添加/更新/删除服务器名称到我的上游nginxconfiguration。
这可以通过使用Amazon SDK(我几乎已经完成,将它放在github上),利用SNS,EC2和Autoscaling服务来实现。
我已经按照下面的步骤来实现这一点:
谢谢@talonx,我已经做了一些研究,Amazon Autoscale有一个查询当前autoscaling组状态的api,并枚举它的成员。 它返回实例ID( http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/api_requests.html#query-example ),然后你可以使用describe工具来获取服务器名称( http:// docs .aws.amazon.com / AWSEC2 / latest / CommandLineReference / ApiReference-cmd-DescribeInstances.html ),最后重新创build上游包含文件。 我可以感觉到Autoscaling通知启动一个执行这些任务的进程。
我仍然没有执行它,但它的路要走。
也可以使用SNS的Autocaling http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/ASGettingNotifications.html
我自己还没有实现,但我正在研究使用NGiNX Plus 的即时重新configuration 。 我在想AMI或configurationpipe理(Puppet,Salt等等)设置了一个Auto Scaling Group实例,可以到达NGiNX重新configurationAPI(也许,通过一个内部的Route53域名,所以没有固定的IP需要使用),并将其自身添加到逆向代理的上游群集。 之后,NGiNX的内置健康检查将接pipe该添加的实例,并放置它,以防万一不可用。 这似乎是最干净的解决scheme,添加实例没有任何延迟,而且由于NGiNX Plus具有带外健康检查function,所以几乎没有任何延迟。
这种方法避免了需要build立一个自动发现系统(Consul,Serf等),对于较小的设置来说,在设置/pipe理方面以及所需的EC2实例方面经常看起来要花费太多。 例如,领事要求至less有三个实例是稳定的。 Serf也许可以运行在ASG实例本身上,但是仍然有维护它的开销,如果ASG缩小到一两个实例,则会失去法定人数。
最后,这可以与Auto Scaling组更改的自动通知结合使用,也许在用于负载平衡的NGiNX服务器上。 通过这样的通知(这可能是Upendra也提到的)触发的监听器可以立即通过dynamic修改API将新实例添加到NGiNX。 除了NGiNX Plus的成本之外,这让人想知道为什么有人会首先使用Elastic Load Balancer来处理它的诸多问题。
编辑2015-12-07: ngx_openresty的balancer-by-lua ( 参见这个GitHub线程 )为NGiNX上游组的热添加/删除服务器提供了另一个可能的开源解决scheme。 我自己还没有尝试过这个,但是想要在这个post中磕磕绊绊的人添加一个提及。