【问题标题】:HaProxy has the Loadbalancer for spring boot applicationHaProxy 具有用于 Spring Boot 应用程序的负载平衡器
【发布时间】:2020-09-11 10:05:58
【问题描述】:

我已将 haproxy 配置为两个容器化 Spring Boot 应用程序的负载均衡器

以下是示例 docker compose 文件配置

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属性(暂时评论)仍然是相同的问题。

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

【问题讨论】:

    标签: spring-boot docker docker-compose haproxy


    【解决方案1】:

    请尝试以下配置。 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
    
    

    【讨论】:

    • 它现在可以工作了。我应该使用内部端口而不是外部端口吗?你能解释一下什么原因
    • HAProxy 就是这样工作的——服务名称:containerPort。由于外部端口是让您直接访问服务但在代理之后,请求来自同一个端口
    • 如果你想看教程,请看这里c-sharpcorner.com/article/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多