有没有办法在不重新启动 haproxy 的情况下向 haproxy 添加更多后端服务器?

有没有办法在不重新启动 haproxy 的情况下向 haproxy 添加更多后端服务器?

我们希望能够根据需要添加更多后端服务器。目前,我还没有找到在不重启 haproxy 的情况下向配置文件添加更多后端服务器的方法。

答案1

我还没有测试过这个特定的用例,但是 haproxy 确实支持“热重载”:

2.4.1) Hot reconfiguration
--------------------------
The '-st' and '-sf' command line options are used to inform previously running
processes that a configuration is being reloaded. They will receive the SIGTTOU
signal to ask them to temporarily stop listening to the ports so that the new
process can grab them. If anything wrong happens, the new process will send
them a SIGTTIN to tell them to re-listen to the ports and continue their normal
work. Otherwise, it will either ask them to finish (-sf) their work then softly
exit, or immediately terminate (-st), breaking existing sessions. A typical use
of this allows a configuration reload without service interruption :

 # haproxy -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid)

如果你有一个启动和停止 haproxy 的初始化脚本,它可能会支持reload类似以下函数的参数:

haproxy_reload()
{
    $HAPROXY -f "$CONFIG" -p $PIDFILE -D $EXTRAOPTS -sf $(cat $PIDFILE) \
        || return 2
    return 0
}

答案2

来自手册:

>1.6)帮助流程管理

Haproxy 现在支持 pidfile 的概念。如果 '-p' 命令行参数或 'pidfile' 全局选项后面跟着文件名,则将删除此文件,然后填充所有子进程的 pid,每行一个(仅在守护进程模式下)。此文件不在 chroot 内,允许使用只读 chroot。它将由启动该进程的用户拥有,并具有权限 0644。

例子 :

global
    daemon
    quiet
    nbproc  2
    pidfile /var/run/haproxy-private.pid

# to stop only those processes among others :
# kill $(</var/run/haproxy-private.pid)

# to reload a new configuration with minimal service impact and without
# breaking existing sessions :
# haproxy -f haproxy.cfg -p /var/run/haproxy-private.pid -sf $(</var/run/haproxy-private.pid)

答案3

此外,根据您的 HA-proxy 版本,您可能需要考虑 haproxy.com 在此页面中描述的 HA-Proxy 动态 API: https://www.haproxy.com/blog/dynamic-scaling-for-microservices-with-runtime-api/

HA-Proxy 动态 API 随企业版提供。

如果您想要按照惯例动态添加/删除服务器,或者您的项目涉及这样的用例,那么您应该考虑使用 HA-Proxy 动态 API。

相关内容