我正在寻找解决我的问题的正确方法。
问题是这样的:对实例组中的所有 Web 服务器执行滚动更新,而不同时提供不同的内容并实现 0 停机时间。
我有一台部署机器,它作为测试场,在计划推出更新之前,所有新内容都会部署在这台机器上并进行测试(这台机器应该是最新的网络服务器),当内容经过验证并且更新没有问题时,将采取以下步骤。
- 创建部署机器的快照
- 创建快照图像
- 创建引用新镜像的实例模板
- 使用新实例模板对实例组执行滚动更新或滚动/重启替换操作
即使我已将“最大不可用时间”设置为零,我也无法实现 0 停机时间,而且在第一个计算实例上线时我也无法仅从新更新的机器提供内容,这导致同时提供两个不同的版本。
服务器 1-10 秒内无响应,我收到经典<h2>The server encountered a temporary error and could not complete your request.<p>Please try again in 30 seconds.</h2>
错误。
有没有更简单的方法可以解决这个问题,而不必回过头来配置我自己的 Haproxy 计算实例并执行以下步骤。
- 禁用负载均衡器中的 % 服务器
- 将内容 Rsync 到禁用的服务器
- 启用更新的服务器
- 禁用负载均衡器中剩余的 % 服务器
- 将内容 Rsync 到禁用的服务器
- 启用更新的服务器
这必须通过“常规”(例如 LAP)实例而不仅仅是 docker 镜像完美地完成,尽管我找不到有关此主题的任何资源。
编辑:通过编辑实例组、更改实例模板和执行滚动替换操作来进行滚动更新,从而实现零停机时间,我发现滚动更新功能无法实现这一点很奇怪。
非常感谢您的意见。