我注意到 HaProxy 有两个 API。DataPlane 和 Runtime。
我没有看到任何明显的内容只是告诉系统重新加载并解析 .cfg 文件。
看起来这是件不用想的事情。我有一个在 docker 中运行的 lets encrypt 容器,我只想通过 https 或某种机制告诉 HaProxy 重新加载 ssl 证书或通常加载更改的 .cfg 文件。
我知道单独的 SSL 重新加载命令,如果没有其他好的解决方案,这些命令将会实现。当然,我还可以扩展 haproxy 容器以添加某种自定义 api 来启动它。
附言:我的流量不足以保证零数据包丢失 yelp 解决方案 ;-)
答案1
有一种所谓的主 CLI 套接字允许启动重新加载。
echo "reload" | socat /var/run/haproxy-master.sock
该套接字可配置为侦听 TCP 端口
haproxy -W -S 127.0.0.1:1234
它有非商业版本。
答案2
数据平面API也适用于开源 HAProxy。它需要为管理套接字设置适当的权限,如下所示haproxy.cfg
:
global
master-worker # in order to run dataplane api
stats socket /run/haproxy/admin.sock level admin mode 660
program api
command dataplaneapi -f /etc/haproxy/dataplaneapi.yml
dataplaneapi
是一个 golang API 服务器,通过 Unix 套接字与 HAProxy 通信。通过 API 提交事务将触发重新haproxy
加载。请参阅更多详细信息的文档。
虽然您可以使用dataplaneapi
执行安全的 HAProxy 重新加载(它将通过管理员 Unix 套接字执行重新加载),但您仍然可以使用“oldschool”方法:
service haproxy reload
# or
systemctl reload haproxy
这将验证配置文件:
haproxy -f /etc/haproxy/haproxy.cfg -c
然后haproxy
使用重新加载进程SIGUSR2
kill -USR2 $MAINPID
或者您可以haproxy
使用重新加载服务haproxy-master.sock
,例如:
socat /run/haproxy-master.sock - <<< "reload"