HAProxy API - 重新加载配置

HAProxy API - 重新加载配置

我注意到 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"

相关内容