Docker群集HAProxy无负载平衡瓦特/覆盖networking

我花了几天时间在Digtital海洋上创build一个docker群。 注意:我不想使用-link与其他应用程序/容器进行通信,因为它们在技术上被认为是弃用的,并且不适用于docker swarm(也就是说,我无法将更多的应用程序实例添加到负载平衡器,组成整个群)

根据本指南,我将一台服务器用作运行控制台的kv-store服务器。 因为我在数字海洋,我正在使用专用networking,所以机器可以互相沟通。

然后,我创build一个hive主控和从属,并启动所有机器上运行的覆盖networking。 这是我的docker-compose.yml

 proxy: image: tutum/haproxy ports: - "1936:1936" - "80:80" web: image: tutum/hello-world expose: - "80" 

所以当我这样做时,它创build了2个容器。 HAProxy正在运行,因为我可以通过http://<ip-address>:1936访问端口1936的统计信息,但是当我尝试访问端口80上的Web服务器/负载均衡器时,我拒绝了连接。 我似乎一切都连接,但我运行docker-compose ps

  Name Command State Ports -------------------------------------------------------------------------------------------------------------------------------- splashcloud_proxy_1 python /haproxy/main.py Up 104.236.109.58:1936->1936/tcp, 443/tcp, 104.236.109.58:80->80/tcp splashcloud_web_1 /bin/sh -c php-fpm -d vari ... Up 80/tcp 

我能想到的唯一的事情是它不链接到Web容器,但我不知道如何解决这个问题。

我会很感激这方面的帮助。

不幸的是你不能在这里使用tutum haproxy版本。 这张图片是专门为链接定制的。 你需要一些脚本的方式来传递Web服务器IP到haproxy,我担心。

但是这并不困难:)我build议你从这个例子开始:首先设置docker-compose.yml =>让我们使用两个节点,这样你就可以确定你正在做的事情是否合理,平衡一路:)

 proxy: build: ./haproxy/ ports: - "1936:1936" - "80:80" web1: container_name: web1 image: tutum/hello-world expose: - "80" web2: container_name: web2 image: tutum/hello-world expose: - "80" 

现在使用haproxy,您需要根据官方图像文档设置您自己的Dockerfile: https ://hub.docker.com/_/haproxy/

我使用build议的文件在haproxy子文件夹中执行此操作:

 FROM haproxy COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg 

然后为haproxyconfiguration文件haproxy.cfg我testing了这一点:

 global stats socket /var/run/haproxy.stat mode 660 level admin stats timeout 30s user root group root defaults mode http timeout connect 5000 timeout client 50000 timeout server 50000 frontend localnodes bind *:80 mode http default_backend nodes backend nodes mode http balance roundrobin option forwardfor http-request set-header X-Forwarded-Port %[dst_port] http-request add-header X-Forwarded-Proto https if { ssl_fc } option httpchk HEAD / HTTP/1.1\r\nHost:localhost server web01 172.17.0.2:80 server web02 172.17.0.3:80 listen stats bind *:1936 mode http stats enable stats uri / stats hide-version stats auth someuser:password 

显然这里的IP只能在默认设置下工作,我完全知道这个:)你需要对这两行做些什么:

 server web01 172.17.0.2:80 server web02 172.17.0.3:80 

我认为你在这里运气与数字海洋工作:)据我所知,你有私人的IP地址在您的处置与DO您打算运行群节点。 我build议简单地把这些节点IP而不是我的示例IP,并运行您的Web服务器上,你很好:)

将链接添加到您的docker-compose.yml

代理:
    图像:tutum / haproxy 
    端口:
         - “1936:1936”
         - “80:80”
    链接:
         - networking
网站:
    图像:tutum / hello-world
    暴露:
         - “80”