我们在 Rackspace 上有一个站点,有 2 台服务器和一个负载均衡器,使用 Capistrano(实际上是 Capifony)部署。我想:
- 在负载均衡器上禁用服务器 1
- 将服务器 1 升级到新代码
- 暂停,让我通过登录到它的 IP 地址来测试服务器 1
- 重新启用服务器 1;在负载均衡器上禁用服务器 2(用户现在将获得新版本的站点)
- 将服务器 2 升级到新代码
- 暂停,让我测试服务器 2
- 在负载平衡器上重新启用服务器 2。
该数据库托管在其他地方,不受此升级的影响。
Capistrano 似乎非常擅长一次部署到多台服务器(尽管我希望看到这个问题的答案),但不清楚如何执行上述操作。在非常常见的情况下,这似乎是一种安全的升级方式。
我想如果我添加规则来做负载均衡器,我也许可以使用这个答案来使部署连续运行,而不是一次全部运行。
一个不错的选择是 capistrano 可以完成所有部署,但不更改两台服务器上的当前符号链接。然后我可以手动进行负载平衡并自己更新符号链接。
这个问题类似,但给出的答案不适用于 PHP,因为不需要重新启动服务器 - 新代码将在您上传后立即开始执行。