我想在一台机器上使用多个Docker容器创build高可用的Web应用程序。
我在Docker容器中启动了几个Web服务器。 说,三个服务器rest1 , rest2和rest3 。
我使用Docker与HAProxy平衡器绑定到127.0.0.1:80并将查询路由到rest服务器。 这使我可以确定,当一个或两个rest服务器失败时,我将能够查询到127.0.0.1:80并收到正确的结果。
坏事是:当HAProxyclosures时,Web应用程序closures。
我想在每个容器中使用几个带有Keepalived服务的HAProxy Docker容器。 问题是:我需要几个Docker容器来侦听一个IP和一个端口。 例如,我将有haproxy1和haproxy2 ,它们将通过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命令强制重新加载该文件。