如何防止 Google Cloud Load balancer 在没有准备好的情况下将流量转发到新创建的自动缩放实例?
How to prevent Google Cloud Load balancer to forward the traffic to newly created auto scaled Instance without being ready?
我需要在 Google Cloud Compute Engine 上托管一个 PHP Laravel 应用程序,具有自动缩放和负载平衡功能。我尝试设置和配置以下内容:
我创建了实例模板,我在其中添加了用于安装 apache2 的启动脚本,PHP,克隆了我项目的 git 存储库,配置云 SQL 代理,并配置 运行 这个 Laravel 项目所需的所有设置。
已创建实例组,我在其中配置了一条规则,当 CPU 达到一定百分比时,它会开始创建其他实例以进行自动缩放。
已创建云 SQL 个实例。
已创建存储桶,在我的应用程序中,所有 public 内容(如图像)都将上传到存储桶中,并从那里提供服务。
已创建负载均衡器并将 Public IP 分配给负载均衡器,为负载均衡器正确配置前端和后端。
根据我上面的配置,一切正常,当一个实例达到定义的 CPU 百分比时,Auto Scaling 开始创建另一个实例并且负载均衡器开始将流量路由到新实例。
我遇到的问题是,配置和设置我的环境(实例模板的启动脚本)大约需要 20-30 分钟来配置并开始准备好为新创建的实例提供内容。但是,当负载均衡器检测到新创建的机器是否已启动并 运行ning 时,它会开始将流量路由到尚未准备好提供内容的新 VM 实例。
因此,当负载均衡器将流量路由到未就绪的机器时,它显然会向我发送 404 错误和一些其他错误。
如何防止发生这种情况,有没有什么方法可以让通过自动缩放服务创建的实例在这台机器准备好提供内容后向负载均衡器发送一些信息,然后只有负载均衡器将流量路由到新创建的实例?
How to prevent Google Cloud Load balancer to forward the traffic to
newly created auto scaled Instance without being ready?
Google 负载均衡器使用参数 Cool Down
来确定等待新实例联机并 100% 可用的时间。但是,这意味着如果您的实例当时不可用,将返回错误。
以上回答了你的问题。但是,新实例上线需要 20 或 30 分钟,这会破坏自动缩放的许多好处。您希望实例立即上线。
最佳做法意味着您应该创建一个实例。使用所有必需的软件应用程序等配置实例。然后创建该实例的映像。然后在您的模板中将此图像指定为您的基线图像。现在您的实例将不必等待软件下载和安装、配置等。您需要做的就是 运行 执行最终配置的脚本(如果需要)以使实例联机。您的目标应该是从启动到上线 30 - 180 秒,并且 运行 正在等待一个新实例。重新思考/重新设计任何需要超过 180 秒的东西。这也可以为您省钱。
John Hanley 回答得很好,我刚刚完成了一点。
你应该看看 packer 来创建你的预配置 google 图像,这将在你需要添加新配置或进行更新时帮助你。
冷却是一个很好的方法,但在你的情况下,你不能真正确定你的安装有时不会因为更新而花费更多的时间,因为你应该做一个 apt-get update && apt-在实例启动时升级到最新版本只会花费越来越多的时间...
负载均衡器通常应该配置健康检查并且不应路由流量,除非实例被检测为健康。在您安装了 apache2 的情况下,我想您在端口 80 或 443 上有一个 HC,具体取决于您在 /healthz 路径上的配置。
正确使用健康检查的一种方法是为健康检查创建一个特定的虚拟主机,然后在 HC 中添加一个假域,比方说 health.test,这将使虚拟主机侦听 health.test 并在 /healthz 路径上返回 200 响应。
这样,如果您不更改您的 conf,只需最后激活健康虚拟主机,这样负载均衡器就不会在服务器真正启动之前开始路由流量...
我需要在 Google Cloud Compute Engine 上托管一个 PHP Laravel 应用程序,具有自动缩放和负载平衡功能。我尝试设置和配置以下内容:
我创建了实例模板,我在其中添加了用于安装 apache2 的启动脚本,PHP,克隆了我项目的 git 存储库,配置云 SQL 代理,并配置 运行 这个 Laravel 项目所需的所有设置。
已创建实例组,我在其中配置了一条规则,当 CPU 达到一定百分比时,它会开始创建其他实例以进行自动缩放。
已创建云 SQL 个实例。
已创建存储桶,在我的应用程序中,所有 public 内容(如图像)都将上传到存储桶中,并从那里提供服务。
已创建负载均衡器并将 Public IP 分配给负载均衡器,为负载均衡器正确配置前端和后端。
根据我上面的配置,一切正常,当一个实例达到定义的 CPU 百分比时,Auto Scaling 开始创建另一个实例并且负载均衡器开始将流量路由到新实例。
我遇到的问题是,配置和设置我的环境(实例模板的启动脚本)大约需要 20-30 分钟来配置并开始准备好为新创建的实例提供内容。但是,当负载均衡器检测到新创建的机器是否已启动并 运行ning 时,它会开始将流量路由到尚未准备好提供内容的新 VM 实例。
因此,当负载均衡器将流量路由到未就绪的机器时,它显然会向我发送 404 错误和一些其他错误。
如何防止发生这种情况,有没有什么方法可以让通过自动缩放服务创建的实例在这台机器准备好提供内容后向负载均衡器发送一些信息,然后只有负载均衡器将流量路由到新创建的实例?
How to prevent Google Cloud Load balancer to forward the traffic to newly created auto scaled Instance without being ready?
Google 负载均衡器使用参数 Cool Down
来确定等待新实例联机并 100% 可用的时间。但是,这意味着如果您的实例当时不可用,将返回错误。
以上回答了你的问题。但是,新实例上线需要 20 或 30 分钟,这会破坏自动缩放的许多好处。您希望实例立即上线。
最佳做法意味着您应该创建一个实例。使用所有必需的软件应用程序等配置实例。然后创建该实例的映像。然后在您的模板中将此图像指定为您的基线图像。现在您的实例将不必等待软件下载和安装、配置等。您需要做的就是 运行 执行最终配置的脚本(如果需要)以使实例联机。您的目标应该是从启动到上线 30 - 180 秒,并且 运行 正在等待一个新实例。重新思考/重新设计任何需要超过 180 秒的东西。这也可以为您省钱。
John Hanley 回答得很好,我刚刚完成了一点。
你应该看看 packer 来创建你的预配置 google 图像,这将在你需要添加新配置或进行更新时帮助你。
冷却是一个很好的方法,但在你的情况下,你不能真正确定你的安装有时不会因为更新而花费更多的时间,因为你应该做一个 apt-get update && apt-在实例启动时升级到最新版本只会花费越来越多的时间...
负载均衡器通常应该配置健康检查并且不应路由流量,除非实例被检测为健康。在您安装了 apache2 的情况下,我想您在端口 80 或 443 上有一个 HC,具体取决于您在 /healthz 路径上的配置。
正确使用健康检查的一种方法是为健康检查创建一个特定的虚拟主机,然后在 HC 中添加一个假域,比方说 health.test,这将使虚拟主机侦听 health.test 并在 /healthz 路径上返回 200 响应。 这样,如果您不更改您的 conf,只需最后激活健康虚拟主机,这样负载均衡器就不会在服务器真正启动之前开始路由流量...