我正在使用由在 CentOS 主机上运行的 docker 容器组成的基础设施平台。
- 通过docker compose扩展多个容器。
- 用于服务发现的 Consul。
- 注册人用于服务注册
- HAProxy 作为负载均衡器
- 每次添加/删除容器时,Consul-template 都会生成 haproxy 配置。
每次我们更新构建时,都会生成新容器并删除旧容器。问题是容器会立即被删除,而不考虑容器正在处理的现有请求。理想情况下,我应该有一个信号来标记处于维护或耗尽模式的容器,以便可以处理现有连接,然后首先从 haproxy 中优雅地删除,然后物理删除。
有人曾经遇到过这个问题或者通过容器完成过类似的自动扩展工作流程吗?
答案1
据我理解,您可以控制此过程的所有步骤,并希望启动位于 HAProxy 后面的容器化应用程序的新版本,而不会中断客户端与旧应用程序的连接,但会阻止新的连接。
这似乎是一个很好的利用HAProxy 禁用服务器命令。
您应该能够禁用已弃用的服务器,并在 HAProxy 中将它们标记为已关闭以进行维护,这应该可以让客户端正常完成其业务,然后您的 consul/HAProxy magic 可以使新服务器上线。