HAProxy二进制文件是否可实现无停机原地升级?
HAProxy无中断升级能力说明
HAProxy 原生支持和NGINX一致的零停机原地升级能力,升级全程不会丢失已建立的客户端连接,也不会中断正在处理的请求,这个特性已经稳定迭代了很多个大版本,生产环境可用性非常高。
很多人检索不到明确说明,是因为HAProxy没有把这个能力单独归类为「二进制升级」专属功能,它本质上是零中断重载能力的一个应用场景,和重载配置文件的无缝切换逻辑完全共用一套实现。
核心实现逻辑
它的运行逻辑和NGINX的热升级流程几乎一致:
- 向运行中的旧版本HAProxy主进程发送
SIGUSR2信号后,旧主进程会拉起新版本的HAProxy进程,同时把自身持有的所有监听套接字的控制权完整转交给新进程 - 新进程启动完成后立刻开始承接所有新入的客户端请求,旧进程不再接收新连接,只会继续处理完自身已持有连接上的所有存量请求
- 等所有存量请求处理完成、连接正常关闭后,旧进程会自动退出,整个过程对客户端完全透明,不会出现连接重置、请求中断的问题
实际操作步骤
执行原地升级的操作非常简单:
- 用编译/包管理器安装的新版本HAProxy二进制,替换掉系统路径下的旧版本二进制文件
- 执行命令向旧主进程发送触发信号:
kill -SIGUSR2 $(cat /var/run/haproxy.pid) - 等待存量连接自然排空即可,期间可以通过进程列表查看新旧进程的运行状态,确认新进程正常承接流量后不需要额外操作,旧进程会自行退出。
注意:如果你的业务存在大量超长连接(比如TCP长连接、WebSocket、长轮询场景),旧进程可能会存活较长时间等待连接主动断开。这种场景建议在业务低峰期执行升级,也可以配合配置旧进程的最长存活时间,到期后强制退出,避免新旧进程长时间同时占用系统资源。
内容的提问来源于stack exchange,提问作者Paul Z
相关产品推荐
相关产品推荐

