企业级使用docker实现负载均衡

利用Docker容器编排完成haproxy和nginx负载均衡架构实施

利用 Docker 编排实现 HAProxy 和 Nginx 负载均衡架构的介绍:

首先,使用 Docker Compose 进行容器编排。创建一个 haproxy.yml 文件,定义 HAProxy 和 Nginx 服务。HAProxy 容器作为前端负载均衡器,监听特定端口,如 80 端口。它配置了后端服务器组,将请求分发到多个 Nginx 容器。每个 Nginx 容器作为后端服务器,负责处理实际的请求。 通过配置 HAProxy,可以设置负载均衡算法,如轮询或最少连接数等。同时,可以配置健康检查,确保只有正常运行的 Nginx 实例接收请求。 启动容器编排后,请求首先到达 HAProxy,它根据配置的策略将请求转发给 Nginx 容器。这样可以实现高可用和高性能的负载均衡架构,提高系统的可靠性和扩展性。利用 Docker 编排简化了部署过程,方便管理和维护。

准备工作

|-----------------|----------------|
| 主机名 | IP |
| docker.exam.com | 172.25.254.100 |

软件需要准备docker,haproxy和nginx

实验过程

利用docker compose来配置yml文件

复制代码
[root@docker-node1 test]# vim haproxy.yml 
services:
  web1:
    image: nginx:latest
    restart: always
    container_name: webserver1
    networks:
      - mynet1
    expose:
      - 80
    volumes:
      - data_web1:/usr/share/nginx/html

  web2:
    image: nginx:latest
    restart: always
    container_name: webserver2
    networks:
      - mynet1
    expose:
      - 80
    volumes:
      - data_web2:/usr/share/nginx/html

  haproxy:
    image: haproxy:2.3
    restart: always
    container_name: haproxy
    networks:
      - mynet1
      - mynet2
    volumes:
      - /var/lib/docker/volumes/conf/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
    ports:
      - "80:80"

networks:
  mynet1:
    driver: bridge

  mynet2:
    driver: bridge

volumes:
  data_web1:
    name: data_web1

  data_web2:
    name: data_web2

设置haproxy

配置haproxy文件

这里设置负载均衡算法为轮询

复制代码
[root@docker-node1 ~]# cd /var/lib/docker/volumes/conf/
[root@docker-node1 conf]# vim haproxy.cfg
listen webcluster
  bind *:80
  balance roundrobin
  server web1 webserver1:80 check inter 3 fall 3 rise 5
  server web2 webserver2:80 check inter 3 fall 3 rise 5

写入网页内容,方便测试负载均衡时观测结果

复制代码
[root@docker-node1 test]# echo webserver1 > /var/lib/docker/volumes/data_web1/_data/index.html
[root@docker-node1 test]# echo webserver2 > /var/lib/docker/volumes/data_web2/_data/index.html

测试结果

复制代码
[root@docker-node1 test]# docker compose -f haproxy.yml up -d
[+] Running 5/5
 ✔ Network test_mynet1   Created                                                   0.1s 
 ✔ Network test_mynet2   Created                                                   0.1s 
 ✔ Container haproxy     Started                                                   1.0s 
 ✔ Container webserver1  Started                                                   0.9s 
 ✔ Container webserver2  Started                                                   0.8s 
 
 
 [root@docker-node1 test]# docker compose ps
NAME         IMAGE          COMMAND                  SERVICE   CREATED         STATUS         PORTS
haproxy      haproxy:2.3    "docker-entrypoint.s..."   haproxy   5 seconds ago   Up 4 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp
webserver1   nginx:latest   "/docker-entrypoint...."   web1      5 seconds ago   Up 5 seconds   80/tcp
webserver2   nginx:latest   "/docker-entrypoint...."   web2      5 seconds ago   Up 5 seconds   80/tcp
[root@docker-node1 test]# curl 172.25.254.100
webserver1
[root@docker-node1 test]# curl 172.25.254.100
webserver2
相关推荐
朦胧之8 小时前
AI 编程-老项目改造篇
java·前端·后端
程序猿大帅12 小时前
别再只当调包侠了:用 Spring AI 落地 Function Calling,我被大模型硬生生砸出了三个大坑
java
程序员晓琪13 小时前
约定大于配置:基于 Java 包名自动生成 API 版本路由的最佳实践
java·spring boot·后端
Flittly13 小时前
【AgentScope Java新手村系列】(11)中断与恢复
java·spring boot·spring
众少成多积小致巨14 小时前
JNI (Java Native Interface) 技术手册中文参考指南
android·java·c++
东坡白菜14 小时前
破局全栈:前端开发的Java入门实战记录—JPA(2)
java·后端
曲幽19 小时前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate
SimonKing20 小时前
艹,维护AI写的代码,我心态崩了......
java·后端·程序员
用户2986985301420 小时前
Java Word 文档样式进阶:段落与文本背景色设置完全指南
java·后端
小bo波1 天前
从"任意文件复制"深挖Java I/O:字符流与字节流的本质抉择
java·nio·io流·后端开发·文件复制