我的节点上运行了Docker Swarm 12.1。我有一个4任务服务来运行我的Drupal站点和数据库的单个任务:
drupalapp mastermindg/rpi-apache2php7
drupaldb mysql:latest
我现在可以在运行容器的任何节点上访问我的网站。
问题是我只能在路由器上为端口转发设置单个IP地址,如果单个节点发生故障,则该IP地址将不再可访问。
是否可以通过覆盖网络设置虚拟IP地址以实现负载平衡?
答案 0 :(得分:4)
Docker Swarm使用网状网络,因此对单个主机的任何请求都将路由到正在运行的主机上。这里最困难的部分是您的服务没有在入口上运行,因此它无法供世界使用。为了使其可用,请使用HAProxy:
docker network create --driver overlay proxy
docker network create --driver overlay drupal
docker service create --name proxy \
-p 80:80 \
-p 443:443 \
-p 8080:8080 \
--network proxy \
-e MODE=swarm \
vfarcic/docker-flow-proxy
docker service create --name drupalapp \
--network proxy \
--network drupal \
mastermindg/rpi-apache2php7
docker service create --name drupaldb \
--network drupal \
mysql:latest
所以在这里你需要创建两个网络:1用于drupaldb和drupalapp之间的内部使用(称为drupal),另一个用于haproxy用于暴露你的端口。您的drupalapp服务需要包含在代理覆盖网络和drupal网络中。
注册您的HAProxy服务:
curl "$masterip:8080/v1/docker-flow-proxy/reconfigure?serviceName=drupalapp&servicePath=/&port=80"
现在可以通过以下方式在您的群体中的任何节点上访问您的Drupal站点:
http://nodeX/index.php
现在的优点是您可以移植到任何节点,并且它可以正确解析。