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