我需要在Google Cloud Compute Engine上托管PHP Laravel应用程序,并自动进行缩放和负载平衡。我尝试设置和配置以下内容:
根据我的上述配置,一切正常,当实例达到定义的CPU百分比时,自动缩放开始创建另一个实例,负载均衡器开始将流量路由到新实例。
我得到的问题是,配置和设置我的环境(实例模板的启动脚本)需要大约20-30分钟来配置并开始准备从新创建的实例提供内容。但是,当负载均衡器检测到新创建的计算机是否已启动并且正在运行时,它会开始将流量路由到尚未准备好从其提供内容的新VM实例。
因此,当负载均衡器将流量路由到未就绪的机器时,它显然会向我发送404错误以及其他一些错误。
如何防止发生它,有没有办法通过自动扩展服务创建的实例在本机准备好提供内容之后向负载均衡器发送一些信息,然后只有负载均衡器将流量路由到新创建的实例?
如何防止Google Cloud Load平衡器将流量转发到新创建的自动缩放实例而不做好准备?
Google负载均衡器使用参数Cool Down
来确定等待新实例联机并且100%可用的时间。但是,这意味着如果您的实例当时不可用,则会返回错误。
以上回答了你的问题。但是,花费20或30分钟让新实例上线会失去自动缩放的许多好处。您希望实例立即联机。
最佳实践意味着您应该创建一个实例。使用所有必需的软件应用程序等配置实例。然后创建此实例的映像。然后在模板中将此图像指定为基线图像。现在,您的实例不必等待软件下载和安装,配置等。您需要做的就是运行一个脚本,根据需要进行最终配置,以使实例联机。您的目标应该是从启动到在线并运行新实例30到180秒。重新思考/重新设计需要超过180秒的任何事情。这也可以为您省钱。
John Hanley的回答非常好,我只是完成了一点。
您应该查看打包程序以创建预配置的Google图像,这将在您需要添加新配置或执行更新时为您提供帮助。
冷却时间是一个很好的方式,但是在你的情况下你不能确定你的安装有时会因为更新而花费更多时间,因为你应该在实例启动时进行apt-get update && apt-get upgrade要更新它只需要花费越来越多的时间......
负载均衡器通常应配置运行状况检查,除非检测到实例正常,否则不应路由流量。在您安装apache2的情况下,我认为您在端口80或443上有一个HC,具体取决于您在/ healthz路径上的配置。
正确使用运行状况检查的一种方法是为运行状况检查创建一个特定的vhost,然后在HC中添加一个假域,比如说health.test,这会让vhost监听health.test并返回200响应on / healthz路径。这样一来,如果你不改变你的conf,只需最后激活健康虚拟主机,这样负载均衡器就不会在服务器真正启动之前开始路由流量......