我正在使用部署文件中的自定义任务将Rails应用程序部署到自动调整的环境中(基本上我使用Ruby aws sdk通过匹配我的生产环境并部署到这些实例的标签来选择实例)
这些实例实际上是在目标组下注册的,我的应用程序将流量分配给来自应用程序负载均衡器(ELBv2)的那些TG
在我的capistrano部署期间,deploy:restart
任务要求重新启动服务器(我正在使用Phusion Passenger)来使用新应用程序。由于重新启动可能会很长(最多1分钟),因此我添加了一个60秒的自定义重启wait
选项,以确保我的服务器逐个重新启动,以确保我的服务能够持续使用。
然而,唯一缺少的并且使上述延迟无用的是,在此期间我的ALB不断向这些实例发送请求,因为它们在我的目标组中没有被标记为“不健康”或“待定”。
我见过像https://github.com/thattommyhall/capistrano-elb这样的库很遗憾它们已经过时了,不能用于ALB和TG
最后一条信息:我的capistrano部署任务实际部署到几台匹配不同角色的机器上:
所以我的(子)问题是(是)
是否可以手动将TG后面的实例标记为“待定”?如果没有,那么deregister
后跟立即register
会达到同样的效果吗?
我如何从Capistrano任务中执行上述:api
角色的实例,假设实例都在AWS云中,具有IAM角色,位于一个目标组下(实际上,如果我可以获得一些技巧来支持同一个实例的几个TG,那将是有用的。
答案 0 :(得分:0)
我目前正在设置使用lifeCycle挂钩进行自动缩放,并且稍后可能会这样做,但是否则可能的解决方案(我还没有验证)将是
执行速度取决于服务器重启时间/健康检查效率。也许更好的解决方案,如果生产中有足够的服务器,那就是跳过等待时间并确保你总是有一个"窗口" x服务器在线
即。假设您有5台服务器,需要30秒才能重新启动,您可以每15秒注销一次 - 重新启动 - 注册服务器,以确保随时都有2台服务器(假设运行状况检查频繁,将实例标记为15秒内健康)