如何使用Docker与HAProxy + Keepalived?

我想在一台机器上使用多个Docker容器创build高可用的Web应用程序。

我在Docker容器中启动了几个Web服务器。 说,三个服务器rest1rest2rest3

我使用Docker与HAProxy平衡器绑定到127.0.0.1:80并将查询路由到rest服务器。 这使我可以确定,当一个或两个rest服务器失败时,我将能够查询到127.0.0.1:80并收到正确的结果。

坏事是:当HAProxyclosures时,Web应用程序closures。

我想在每个容器中使用几个带有Keepalived服务的HAProxy Docker容器。 问题是:我需要几个Docker容器来侦听一个IP和一个端口。 例如,我将有haproxy1haproxy2 ,它们将通过Keepalived绑定到localhost

当我在HAProxyconfiguration文件(不是当前Docker容器的IP)中设置IP时,它显示我一个错误,HAProxy不能监听这个IP和PORT。

是否可以使用HAProxy和Keepalivedconfiguration多个Docker容器来侦听一个IP和PORT?

HAProxy的configuration:

 defaults timeout connect 5000ms timeout client 50000ms timeout server 50000ms frontend http-in mode http bind 172.17.0.10:80 default_backend BACKEND backend BACKEND option httpchk server rest1 rest1:8080 maxconn 32 check server rest2 rest2:8080 maxconn 32 check server rest3 rest3:8080 maxconn 32 check 

失败,错误

 Starting frontend http-in: cannot bind socket [172.17.0.10:80] 

172.17.0.10是Docker子网的成员,并且不在我的机器上保留。

您可能需要在Docker主机上启用非本地绑定。

net.ipv4.ip_nonlocal_bind=1添加到/etc/sysctl.conf文件的末尾,并使用sudo sysctl -p命令强制重新加载该文件。