3

我正在尝试使用 Docker 和 haproxy 来对许多嵌入式 tomcat 进行负载平衡/循环请求。

我目前的配置如下:

从 docker-compose.yml

loadbalancer:
  image: haproxy
  links:
      - web
  ports:
      - "8080:8080"
web:
  build: ./web

从 ./web/Dockerfile

FROM java:8
ADD ./bignibou-server-1.0.jar /app/bignibou-server-1.0.jar
ADD ./spring-cloud.properties /app/spring-cloud.properties
ENV SPRING_CLOUD_PROPERTIESFILE=/app/spring-cloud.properties
ENV SPRING_PROFILES_ACTIVE=cloud
ENV SPRING_CLOUD_APP_NAME=bignibou
ENV CLEARDB_DATABASE_URL=mysql://root:root@192.168.1.12:3306/bignibou_dev
ENV REDISCLOUD_URL=redis://dummy:dummy@192.168.1.12:6379
ENV DYNO=dummy
EXPOSE 8080
ENTRYPOINT [ "java", "-jar", "/app/bignibou-server-1.0.jar" ]

当我执行 docker-compose scale web=2 然后执行 docker-compose up 时,我看到两个 tomcat 都在启动,但随后我无法通过浏览器访问它们...

谁能告诉我如何访问我的负载平衡应用程序?我努力了:

  • 172.17.42.1:8080
  • 172.17.42.1:80

无济于事(其中 172.17.42.1 是我的 docker ip)。

我需要进一步配置haproxy吗?

4

2 回答 2

2

您将需要配置 HAProxy,提供有关后端服务器和要使用的负载平衡算法的信息。仅使用 haproxy 映像启动容器是不够的。

您将需要一个 Dockerfile 来使用 haproxy 镜像并将您的特定 haproxy 配置文件复制到镜像中:您可以参考官方 haproxy 镜像页面中的说明: https ://registry.hub.docker.com/_/haproxy/

如何使用 HAProxy 设置负载平衡:https ://serversforhackers.com/load-balancing-with-haproxy

我写了一篇关于 Nginx、Node 和 Redis 的示例 docker worflow 的博客。它描述了如何使用 nginx 负载平衡节点服务器:http: //anandmanisankar.com/posts/docker-container-nginx-node-redis-example/

从概念上讲,它与 HAProxy 平衡 tomcat 服务器相同。但配置结构会有所不同。希望这很有用。

于 2015-04-03T06:15:36.243 回答
1

您是否需要修改端口 8080 的 iptable 规则。您可以检查几件事。网络统计-anp | grep 8080 查看您的应用程序是否实际上正在侦听该端口。您还可以在主机上和容器内运行 tcpdump 以查看是否正在获取数据包。

于 2015-04-02T14:55:22.077 回答