Haproxy负载均衡

Haproxy负载均衡

参考资料

  • https://www.haproxy.com/blog/how-to-run-haproxy-with-docker (复现成功,但使用的是Haproxy-alpine镜像)
  • https://hub.docker.com/_/haproxy/ (Haproxy官方镜像)
  • https://blog.csdn.net/xiaojin21cen/article/details/103873423 (Haproxy参数介绍) ## 踩坑
  • 在docker run构建容器时, 若后面加上bash参数, 容器不会退出, 但是容器内的Haproxy服务会自动退出
  • 对docker网络理解不深, 多个容器使用默认网络时不会提供DNS解析服务 ## 容器构建步骤(方式一) ### 自定义Docker网络
    1
    docker network create --driver=bridge mynetwork
    ### 构建Web服务
    1
    2
    3
    docker run -d --name web1 --net mynetwork nginx
    docker run -d --name web2 --net mynetwork nginx
    docker run -d --name web3 --net mynetwork nginx
    注意: 由于多个容器已经指明了自定义网络, 这里的容器名可以根据Docker的DNS解析服务解析到对应的容器IP ### 构建Haproxy配置文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    global
    daemon
    maxconn 256

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

    frontend ft_web
    bind *:8000
    default_backend bk_web

    backend bk_web
    balance roundrobin
    server server1 web1:80 check
    server server2 web2:80 check
    server server3 web3:80 check
    ### 构建Dockerfile
    1
    2
    FROM haproxy:latest
    COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg
    ### 构建自定义的Haproxy镜像和容器
    1
    2
    docker build -t my-haproxy-image .
    docker run -d --name my-haproxy-container -p 8000:8000 --net mynetwork my-haproxy-image
    ### 最终效果

容器构建步骤(方式二)

构建docker-compose.yml文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
version: '3'
services:
haproxy:
image: haproxy:latest
ports:
- "8000:8000"
volumes:
- ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro

web_server1:
image: nginx:latest
volumes:
- ./page1.html:/usr/share/nginx/html/index.html

web_server2:
image: nginx:latest
volumes:
- ./page2.html:/usr/share/nginx/html/index.html

web_server3:
image: nginx:latest
volumes:
- ./page3.html:/usr/share/nginx/html/index.html

构建haproxy.cfg文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
global
log /dev/log local0
log /dev/log local1 notice

defaults
log global
mode tcp
option tcplog
option dontlognull
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms

frontend my_frontend
bind 0.0.0.0:8000
mode tcp
default_backend my_backend_servers

backend my_backend_servers
mode tcp
balance roundrobin
server server1 web_server1:80 check
server server2 web_server2:80 check
server server3 web_server3:80 check

运行容器群

1
docker-compose up -d

最终效果


Haproxy负载均衡
https://d4wnnn.github.io/2023/07/21/Others/Haproxy负载均衡/
作者
D4wn
发布于
2023年7月21日
许可协议