HaProxy 具有 spring 启动应用程序的负载平衡器

HaProxy has the Loadbalancer for spring boot application

我已经将 haproxy 配置为两个容器化 spring 启动应用程序的负载平衡器

下面是示例 docker 撰写文件配置

version: '3.3'

services:
  wechat-1:
    image: xxxxxx/wechat-social-connector:2.0.0
    container_name: wechat-1
    ports:
     - 81:8000
    networks:
     - web 
    #depends_on:
     #- wechat-2

  wechat-2:
    image: xxxxxxxxx/wechat-social-connector:2.0.0
    container_name: wechat-2
    ports:
     - 82:8000
    networks:
     - web

  haproxy:
    build: ./haproxy
    container_name: haproxy
    ports:
     - 80:80
    networks:
     - web
    #depends_on:
     #- wechat-1


networks:
 web:


Docker 文件

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

高可用性配置文件

global
    debug
    daemon
    maxconn 2000

defaults
    mode http
    timeout connect 5000ms
    timeout client  50000ms
    timeout server  50000ms

frontend http-in
    bind *:80
    default_backend servers

backend servers
    mode http
    option httpchk
    balance roundrobin
    server wechat-1 wechat-1:81 check
    server wechat-2 wechat-2:82 check

当我尝试使用端口号 80 访问我的端点时,我总是无法获得服务。

从 haproxy 日志调试后注意到以下错误

Creating haproxy  ... done
Creating wechat-2 ... done
Creating wechat-1 ... done
Attaching to wechat-2, wechat-1, haproxy
haproxy     | Available polling systems :
haproxy     |       epoll : pref=300,  test result OK
haproxy     |        poll : pref=200,  test result OK
haproxy     |      select : pref=150,  test result FAILED
haproxy     | Total: 3 (2 usable), will use epoll.
haproxy     | 
haproxy     | Available filters :
haproxy     |   [SPOE] spoe
haproxy     |   [CACHE] cache
haproxy     |   [FCGI] fcgi-app
haproxy     |   [TRACE] trace
haproxy     |   [COMP] compression
haproxy     | Using epoll() as the polling mechanism.
haproxy     | [NOTICE] 144/185524 (1) : New worker #1 (8) forked
haproxy     | [WARNING] 144/185524 (8) : Server servers/wechat-1 is DOWN, reason: Layer4 connection problem, info: "Connection refused", check duration: 0ms. 1 active and 0 backup servers left. 0 sessions active, 0 requeued, 0 remaining in queue.
haproxy     | [WARNING] 144/185525 (8) : Server servers/wechat-2 is DOWN, reason: Layer4 connection problem, info: "Connection refused", check duration: 0ms. 0 active and 0 backup servers left. 0 sessions active, 0 requeued, 0 remaining in queue.
haproxy     | [ALERT] 144/185525 (8) : backend 'servers' has no server available!

从日志中我了解到,当 haproxy 无法连接其他两个 运行 完美的容器时,没有任何问题。 我厌倦了使用 depends_on 属性(暂时评论)仍然是同样的问题。

有人可以帮我解决这个问题吗?

请尝试以下配置。 haproxy.cfg

中的一些变化

docker-compose.yaml

version: '3.3'

services:
  wechat-1:
    image: nginx
    container_name: wechat-1
    ports:
     - 81:80
    networks:
     - web
    depends_on:
     - wechat-2

  wechat-2:
    image: nginx
    container_name: wechat-2
    ports:
     - 82:80
    networks:
     - web

  haproxy:
    build: ./haproxy
    container_name: haproxy
    ports:
     - 80:80
    networks:
     - web
    depends_on:
     - wechat-1

networks:
 web:

Dockerfile

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

haproxy.cfg

global
    debug
    daemon
    maxconn 2000

defaults
    mode http
    timeout connect 5000ms
    timeout client  50000ms
    timeout server  50000ms

frontend http-in
    bind *:80
    default_backend servers

backend servers
    mode http
    option forwardfor
    balance roundrobin
    server wechat-1 wechat-1:80 check
    server wechat-2 wechat-2:80 check

HAPROXY 日志

Attaching to wechat-2, wechat-1, haproxy
haproxy     | Using epoll() as the polling mechanism.
haproxy     | Available polling systems :
haproxy     |       epoll : pref=300,  test result OK
haproxy     |        poll : pref=200,  test result OK
haproxy     |      select : pref=150,  test result FAILED
haproxy     | Total: 3 (2 usable), will use epoll.
haproxy     | 
haproxy     | Available filters :
haproxy     |   [SPOE] spoe
haproxy     |   [CACHE] cache
haproxy     |   [FCGI] fcgi-app
haproxy     |   [TRACE] trace
haproxy     |   [COMP] compression
haproxy     | [NOTICE] 144/204217 (1) : New worker #1 (6) forked