企业级使用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
相关推荐
大飞哥~BigFei43 分钟前
RabbitMq消费延迟衰减重试实现思路
java·分布式·rabbitmq
有趣的野鸭1 小时前
JAVA课程十一次实验课程主要知识点示例
java·前端·数据库
q***07143 小时前
Spring Boot 多数据源解决方案:dynamic-datasource-spring-boot-starter 的奥秘(上)
java·spring boot·后端
q***49863 小时前
Spring Boot 3.4 正式发布,结构化日志!
java·spring boot·后端
IT古董5 小时前
Windows 11 专业版 安装与配置 Docker Desktop 保姆级手册(包成功永久免关注免VIP)
windows·docker·容器
沐浴露z5 小时前
【微服务】基本概念介绍
java·微服务
Z3r4y6 小时前
【代码审计】RuoYi-4.7.3&4.7.8 定时任务RCE 漏洞分析
java·web安全·ruoyi·代码审计
Kuo-Teng7 小时前
LeetCode 160: Intersection of Two Linked Lists
java·算法·leetcode·职场和发展
Jooou7 小时前
Spring事务实现原理深度解析:从源码到架构全面剖析
java·spring·架构·事务