gpt4 book ai didi

docker - 如何在默认 Dockerfile 上重新加载 haproxy.cfg?

转载 作者:行者123 更新时间:2023-12-02 18:25:08 25 4
gpt4 key购买 nike

我正在使用来自 https://github.com/dockerfile/haproxy 的默认 HAProxy Docker 镜像

不幸的是,我无法让它正确地重新加载我的配置。

如果我跑

$ sudo docker exec haprox haproxy -f /etc/haproxy/haproxy.cfg -p '$(</var/run/haproxy.pid)' -st '$(</var/run/haproxy.pid)'

它只是转储帮助文件。如果我跑
$ sudo docker exec haprox 'haproxy -f /etc/haproxy/haproxy.cfg -p $(</var/run/haproxy.pid) -st $(</var/run/haproxy.pid)'

我明白了
2014/12/30 00:03:23 docker-exec: failed to exec: exec: "haproxy -f /etc/haproxy/haproxy.cfg -p $(</var/run/haproxy.pid) -st $(</var/run/haproxy.pid)": stat haproxy -f /etc/haproxy/haproxy.cfg -p $(</var/run/haproxy.pid) -st $(</var/run/haproxy.pid): no such file or directory

嘘。这些都不是我想要的。我可以运行 docker exec haprox service haproxy reload - 但这最终会产生几个 haproxy 进程,所以当我通过 unix 套接字连接时,我会从 show stat 获得一组信息但我从 http stats 页面获得了一组完全不同的信息。

我正在尝试对其进行设置,以便我可以优雅地重新部署我们的旧软件,但它对 Tomcat session 做了非常非常糟糕的事情,所以我唯一的选择是让现有 session 保持事件状态并 ping 同一台服务器。
backend legacy
cookie SERVERID insert indirect preserve
server A 123.0.0.123:8080 cookie A check
server B 123.0.0.123:8080 cookie B check

成功了。我可以调用套接字并运行 set weight legacy/A 0它将耗尽服务器 A 的连接。

但是(还记得那个遗留的部分吗?)我必须把我的服务器 A/B 容器放在头上并提出新的容器。我已经完成了系统设置,可以很好地生成新配置,但是当我重新加载时……奇怪的事情发生了。

如前所述,它最终会产生几个 haproxy 进程。我从 stats page 和 unix socket 得到不同的信息。我在浏览器中与socat通信的进程的pid文件似乎也不同。

最糟糕的是,它会使用 503 停止 http 连接 - 并使用 ab 测试将报告一些断开的连接。这部分不行。

旧 session 必须继续运行,直到旧服务器关闭/cookie 被清除。似乎互联网的其余部分能够做我想做的事情......我在这里做错了什么?

最佳答案

您现在可以重新加载配置:

docker kill -s HUP haproxy_container_name
更多信息: https://hub.docker.com/_/haproxy
我知道这是一个老问题,6 年后无济于事! :) 但也许对某人有用!

关于docker - 如何在默认 Dockerfile 上重新加载 haproxy.cfg?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27697961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com