在部署通过 Unicorn 运行 Rails 应用程序的多个 EC2 实例的过程中。我目前有一个运行 nginx 的“前端”服务器,其中有多个“Unicorn”上游提供商。
晚上,我想关闭一些独角兽服务器,然后在早上再次启动它们(我已经运行良好)。
我是否还应该删除/注释掉 nginx 配置中的上游提供程序,然后执行 nginx 配置加载?(以阻止 nginx 尝试将客户端发送到我已关闭的 ec2 实例)。
有没有更好的方法来处理这个问题?(也许是 HAproxy?)
答案1
我认为实现这一点最简单的方法之一是使用 LVS。使用 LVS,您可以创建一个虚拟服务器作为 Nginx 的后端,可能位于每个 Nginx 本身的本地主机上。然后,您只需将 Nginx 上游指向 LVS 虚拟服务器。Unicorn 是 LVS 的后端,定义为服务器地址。
这样,通过某些 cronjob 从虚拟服务器添加/删除后端应该非常容易,因为您可以通过简单的ipvsadm
命令执行这些操作。
当然,也可以通过一些脚本从 Nginx 上游定义中添加/删除服务器,但我认为 LVS 解决方案更容易编写脚本,并且不太可能失败。