使用Docker和haproxy为了向多个嵌入式tomcat实例请求负载平衡

问题描述:

我正在尝试使用Docker和haproxy为多个嵌入式tomcat负载均衡/ roundrobin请求。使用Docker和haproxy为了向多个嵌入式tomcat实例请求负载平衡

我现在的配置如下:

从搬运工,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:[email protected]:3306/bignibou_dev 
ENV REDISCLOUD_URL=redis://dummy:[email protected]:6379 
ENV DYNO=dummy 
EXPOSE 8080 
ENTRYPOINT [ "java", "-jar", "/app/bignibou-server-1.0.jar" ] 

当我做一个docker-compose scale web = 2后面跟着一个docker -compose up,我看到两个tomcat开始,但后来我是una通过浏览器访问它们...

任何人都可以请告知如何访问我的负载平衡应用程序?我曾尝试:

  • 172.17.42.1:8080
  • 172.17.42.1:80

无济于事(其中172.17.42.1是我的搬运工IP)。

我需要进一步配置haproxy吗?

你需要修改你的端口8080的iptable规则吗?你可以检查一些东西。 netstat -anp | grep 8080来查看你的应用程序是否正在监听该端口。你也可以在主机上和容器内运行tcpdump来查看你是否得到了数据包。

您将需要配置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服务器是一样的。但配置结构会有所不同。希望这是有用的。