在后端服务器ip更改时是否可以重新加载haproxy?如果,怎么样?
对于docker堆栈至关重要。在每次部署时,具有不同ip的新容器将替换旧容器。
在我们的实现中,服务偶尔返回503,因为旧的haproxy进程没有终止并仍然接受请求,而后端服务器已经消失。 httplog显示有些请求转发了一个已经消失的后端。
# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 893 0.0 0.0 0 0 ? Zs 19:39 0:01 [haproxy] <defunct>
root 898 0.3 0.0 49416 9640 ? Ss 19:49 0:13 /usr/local/sbin/haproxy -D -f /app/haproxy.cfg -p /var/run/haproxy.pid
root 915 0.2 0.0 0 0 ? Zs 19:49 0:12 [haproxy] <defunct>
root 920 0.2 0.0 49308 10196 ? Ss 20:57 0:01 /usr/local/sbin/haproxy -D -f /app/haproxy.cfg -p /var/run/haproxy.pid
root 937 0.0 0.0 0 0 ? Zs 20:57 0:00 [haproxy] <defunct>
root 942 0.3 0.0 49296 9880 ? Ss 20:58 0:01 /usr/local/sbin/haproxy -D -f /app/haproxy.cfg -p /var/run/haproxy.pid
root 959 0.2 0.0 49296 9852 ? Ss 20:58 0:01 /usr/local/sbin/haproxy -D -f /app/haproxy.cfg -p /var/run/haproxy.pid
[编辑] 我正在使用docker swarm模式。我确实尝试过发布服务的端口到主机;但是,swarm内部负载均衡器的性能很差,我尽量避免。
答案 0 :(得分:1)
虽然应该可以将HAProxy配置更改为指向不同的后端服务器,但似乎更容易to bind the Docker containers' ports to predictable ports on the Docker host,因此HAProxy配置不需要更改。
例如:
docker run -d -p 127.0.0.1:80:9999 hello_world
您的HAProxy配置可能看起来像
backend something
# Assuming the Docker host's IP address is 192.0.2.123
server some-server 192.0.2.123:9999