针对 Webbservers 的 Google Cloud 托管实例组滚动更新

针对 Webbservers 的 Google Cloud 托管实例组滚动更新

我正在寻找解决我的问题的正确方法。

问题是这样的:对实例组中的所有 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 镜像完美地完成,尽管我找不到有关此主题的任何资源。

编辑:通过编辑实例组、更改实例模板和执行滚动替换操作来进行滚动更新,从而实现零停机时间,我发现滚动更新功能无法实现这一点很奇怪。

非常感谢您的意见。

答案1

滚动更新是逐步更新实例的过程。争取零停机时间应该是可以实现的,但由于滚动更新的工作方式,将会看到提供不同的内容。为了使您的服务器响应更快、中断更少,请查看以下两种策略:

最大浪涌。这将创建大于目标大小的实例,以加快更新过程。

机会性更新. “仅当托管实例组创建新实例时才会应用机会性更新”

相关内容