首页 文章

Capistrano - 在部署到ALB目标组期间将实例标记为挂起

提问于
浏览
0

我正在使用部署文件中的自定义任务将Rails应用程序部署到自动调整的环境(基本上我使用Ruby aws sdk通过匹配我的 生产环境 环境并部署到这些实例的标签来选择实例)

这些实例实际上是在目标组下注册的,我的应用程序将流量分配给来自应用程序负载均衡器(ELBv2)的TG

在我的capistrano部署期间, deploy:restart 任务要求重新启动服务器(我正在使用Phusion Passenger)来使用新应用程序 . 由于重新启动可能会很长(最多1分钟),因此我添加了一个60秒的自定义重启 wait 选项,以确保我的服务器逐个重新启动,以确保我的服务的持续使用 .

然而,唯一缺少的并且使上述延迟无用的是,在此期间我的ALB不断向这些实例发送请求,因为它们在我的目标组中没有被标记为“不 Health ”或“未决” .

我见过一些像https://github.com/thattommyhall/capistrano-elb这样的库,很遗憾它们已经过时了,不能用于ALB和TGs

最后一条信息:我的capistrano部署任务实际部署到几台匹配不同角色的机器上:

  • API服务器(正面,ALB TG后面,如上所述)

  • Worker 和调度员(不在任何ALB后面的人员必须采取特殊预防措施)

So my (sub-)question(s) is(are)

  • 是否可以手动将TG背后的实例标记为"pending"?如果没有,那么 deregister 会立即 register 实现同样的事情吗?

  • 我怎样才能从Capistrano任务中将上述内容添加到 :api 角色的实例中,假设实例都在AWS Cloud 中,具有IAM角色,在一个目标组下(实际上如果我能得到它将会很有用)为同一个实例支持几个TG的一些技巧)

1 回答

  • 0

    我目前正在使用lifeCycle钩子设置自动缩放,可能会在稍后进行,但是否则可能的解决方案(我尚未验证)将是

    • 取消注册目标(CLI) .

    • (可选)等待目标取消注册(CLI) .

    • 恢复乘客:重启命令

    • (可选)再次注册目标(CLI) .

    • 等待目标服务(CLI) .

    • 在下一个实例上继续使用相同的挂钩

    执行速度取决于服务器重启时间/ Health 检查效率 . 也许更好的解决方案,如果 生产环境 中有足够的服务器,将跳过等待时间并确保您始终拥有x服务器在线的“窗口”

    即 . 假设您有5台服务器,需要30秒才能重新启动,您可以每15秒注销一次 - 重新启动 - 注册服务器,以确保随时都有2台服务器(假设运行状况检查频繁,将实例标记为15秒内 Health )

相关问题