我在Linode堆栈上部署了一个mean.io express / node js web应用程序。
我的2台应用服务器运行Ubuntu 14.04,可以在Ubuntu 14.04上再次运行2台 Haproxy 负载平衡器后访问。
我们打电话给应用服务器1 => APP1 和应用服务器2 =>的 APP2
目前,我通过
手动部署从两个负载均衡器的haproxy.cfg中删除 APP1 条目并重新启动。
更新 APP1
从两个负载均衡器的haproxy.cfg中删除 APP2 条目并将 APP1 条目放回
重新启动 APP1
更新 APP2
将 APP2 条目放回haproxy.cfg并重新启动
重新启动 APP2
我遵循这个过程,以便在任何时候我们的Web应用程序的用户即使在部署期间也能获得一致的数据,即app服务器的实例都没有运行不同的代码副本。
我正在转向自动部署系统,我已经考虑部署的两个选项是 Capistrano 和 Shipit JS 。
它们都提供了在配置中提及多个服务器的方法,例如 capistrano
role :app, "APP1", "APP2"
和 Shipit JS
shipit.config.servers = ['APP1', 'APP2']
所以,我的问题是这些库如何确保两台服务器在重新启动之前并行更新?有没有办法在更新期间锁定对这些服务器的传入请求?
这些部署系统是仅适用于简单的客户端 - 应用服务器架构还是可以在有负载均衡器的系统中使用?
任何解释都是非常宝贵的。我已尽力解释这里的情况。如果您需要更多意见,请在评论中提及。