我想在AWS中设置自动缩放。我不想使用Elastic Load Balancer。
Amazon的自动缩放功能可在需求高峰期间无缝创建EC2实例,以保持性能,并在需求停顿期间自动减少EC2实例,以最大程度地降低成本。
由于此EC2实例是自动创建的,因此NGINX不知道其主机名。
我知道并且已经在nginx到10个EC2实例中进行了上游设置。
当自动缩放添加/更新/删除EC2实例时,我希望能够将服务器名称自动添加/更新/删除到我的上游nginx配置中。
我想在AWS中设置自动缩放。我不想使用Elastic Load Balancer。
Amazon的自动缩放功能可在需求高峰期间无缝创建EC2实例,以保持性能,并在需求停顿期间自动减少EC2实例,以最大程度地降低成本。
由于此EC2实例是自动创建的,因此NGINX不知道其主机名。
我知道并且已经在nginx到10个EC2实例中进行了上游设置。
当自动缩放添加/更新/删除EC2实例时,我希望能够将服务器名称自动添加/更新/删除到我的上游nginx配置中。
Answers:
这可以通过使用SSD,EC2和Autoscaling服务来使用Amazon SDK(我几乎完成了,将其放在github上)来实现。
我已按照以下步骤实现了这一目标:
谢谢@talonx,我已经做过一些研究,Amazon Autoscale有一个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),最后重新创建上游包含文件。我可以感觉到“自动缩放”通知以启动执行这些任务的进程。
我仍然没有实现它,但是它是一个可行的方法。
也可以将Scaling与SNS一起使用http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/ASGettingNotifications.html
我还没有实现这个还没有我自己,但我正在寻找到使用的On-the-飞重构的Nginx的加。我认为AMI或设置Auto Scaling Group实例的配置管理(Puppet,Salt等)都可以访问NGiNX重新配置API(也许通过内部Route53域名,因此没有固定IP) (需要使用),并将其自身添加到逆向代理的上游群集中。之后,NGiNX的内置运行状况检查将接管该[添加的]实例,并在该实例不可用时将其丢弃。这似乎是最干净的解决方案,并且添加实例没有任何延迟,而且由于NGiNX Plus具有带外运行状况检查功能,因此删除实例几乎没有任何延迟。
这种方法避免了需要设置自动发现系统(Consul,Serf等)的麻烦,对于较小的设置,无论是在设置/管理还是所需的EC2实例方面,这通常看起来都是很多开销。例如,领事至少需要三个实例才能保持稳定。Serf也许可以在ASG实例本身上运行,但是维护它仍然会产生开销,并且如果ASG缩减到一两个实例,您将失去定额。
最后,这可以与Auto Scaling组更改的自动通知(可能在用于负载平衡的NGiNX服务器上)结合使用。然后,由此类通知触发的侦听器(这可能是Upendra所指的)然后可以通过即时修改API将新实例立即添加到NGiNX中。除了NGiNX Plus的成本外,这使人们感到奇怪,为什么有人会首先使用Elastic Load Balancer及其众多问题。
编辑2015-12-07:ngx_openresty的balancer-by-lua(请参阅此GitHub线程)提供了另一个可能的开源解决方案,用于从NGiNX上游组中热添加/删除服务器。我本人尚未对此进行试验,但是想在这里为任何绊倒这篇文章的人添加一个提及。