Haproxy使用不同的后端服务器ip重新加载

时间:2017-04-20 21:34:47

标签: docker load-balancing haproxy

在后端服务器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内部负载均衡器的性能很差,我尽量避免。

1 个答案:

答案 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
相关问题