企业级使用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
相关推荐
武昌库里写JAVA21 分钟前
玩转springboot之springboot热部署
java·c语言·开发语言·数据结构·算法
blammmp22 分钟前
Java:抽象类和接口(1)
java·开发语言
customer0840 分钟前
【开源免费】基于SpringBoot+Vue.JS房产销售系统(JAVA毕业设计)
java·vue.js·spring boot·spring cloud·java-ee·eclipse·maven
雨凝12132842 分钟前
K8s 之控制器的定义及详细调用案例
docker·容器·kubernetes
码农探知2 小时前
黑马程序员Java笔记整理(day01)
java
Flying_Fish_roe2 小时前
Spring Boot-Swagger相关问题
java·spring boot·后端
hac13222 小时前
HashMap线程不安全|Hashtable|ConcurrentHashMap
java·开发语言·安全
weixin_439357202 小时前
分布式本地缓存 ehcache 缓存同步复制
java·spring boot·分布式·缓存
Shenqi Lotus2 小时前
??Nginx实现会话保持_Nginx会话保持与Redis的结合_Nginx实现四层负载均衡
运维·redis·nginx·负载均衡
烟雨国度2 小时前
Spring Boot 执行流程已经 负载均衡执行流程图
spring boot·负载均衡·流程图