2017-04-20 77 views
1

当后端服务器IP改变时,可以重新加载haproxy吗?如果,如何?Haproxy重新加载不同的后端服务器IP

码头堆栈是必不可少的。在每次部署时,具有不同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 

[编辑] 我正在使用码头群模式。我曾尝试将发布服务的端口发送给主机;然而,群内部负载平衡器的性能不好,我尽量避免。

回答

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 
+0

感谢您的答复。对于码头堆栈,我使用码头群模式。端口转发并不是真正的选择。我曾尝试向主机发布端口;然而,群内部负载平衡器的性能非常糟糕。是静态IP的解决方案吗? – benjah1

+0

@ benjah1我对docker swarm没有太多经验,但[此页面似乎完全描述您的情况](https://docs.docker.com/engine/swarm/ingress/#configure-an-external-load-平衡器)?看起来你不应该在swarm模式下发布容器的端口;相反[你会发布服务的端口](https://docs.docker.com/engine/swarm/ingress/#publish-a-port-for-a-service)。 –

相关问题