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

devtools/2024/11/13 9:47:19/

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

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

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

准备工作

主机名IP
docker.exam.com172.25.254.100

软件需要准备docker,haproxy和nginx

实验过程

利用docker compose来配置yml文件

[root@docker-node1 test]# vim haproxy.yml 
services:web1:image: nginx:latestrestart: alwayscontainer_name: webserver1networks:- mynet1expose:- 80volumes:- data_web1:/usr/share/nginx/htmlweb2:image: nginx:latestrestart: alwayscontainer_name: webserver2networks:- mynet1expose:- 80volumes:- data_web2:/usr/share/nginx/htmlhaproxy:image: haproxy:2.3restart: alwayscontainer_name: haproxynetworks:- mynet1- mynet2volumes:- /var/lib/docker/volumes/conf/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfgports:- "80:80"networks:mynet1:driver: bridgemynet2:driver: bridgevolumes:data_web1:name: data_web1data_web2:name: data_web2

设置haproxy

 

配置haproxy文件

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

[root@docker-node1 ~]# cd /var/lib/docker/volumes/conf/
[root@docker-node1 conf]# vim haproxy.cfg
listen webclusterbind *:80balance roundrobinserver web1 webserver1:80 check inter 3 fall 3 rise 5server 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


http://www.ppmy.cn/devtools/108990.html

相关文章

利士策分享,如何规划多彩的大学生活?

利士策分享,学习规划多彩的大学生活 踏入大学,如同开启一场充满未知与可能的旅程。 为了让这段旅程不仅充满学术的熏陶,还洋溢着生活的多彩与人际的和谐,我们需要精心规划,积极行动。 一、多彩规划:点亮大学…

基于51单片机的倒计时定时器proteus仿真

地址: https://pan.baidu.com/s/1_Ig_S0KKrba9VAjovDW71g 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C52/AT89C51是一款经典的8位单片机,是意法半导体(STMicroelectr…

【JavaScript】LeetCode:21-25

文章目录 21 最大子数组和22 合并区间23 轮转数组24 除自身以外数组的乘积25 缺失的第一个正数 21 最大子数组和 贪心 / 动态规划贪心&#xff1a;连续和&#xff08;count&#xff09;< 0时&#xff0c;放弃当前起点的连续和&#xff0c;将下一个数作为新起点&#xff0c;这…

CSS实现DIV水平展示

CSS实现DIV水平展示 css代码 .container {display: flex; /* 使用 Flexbox */justify-content: space-between; /* 在主轴上均匀排列 */width: 100%; /* 设置容器宽度 */ } .box {flex:1; height:100px; }HTML代码 <div class"container"><div class&quo…

vue多环境配置和打包

件名的后缀来指定它们仅在特定模式下被加载。 .env&#xff1a;所有环境下都会加载的通用配置。 .env.local&#xff1a;本地覆盖配置&#xff0c;不加入版本控制。 .env.[mode]&#xff1a;仅为指定的模式加载的配置文件&#xff0c;例如.env.development、.env.production、…

XSS和sql注入部分场景测试用例样例

目录 1. SQL 注入测试用例设计 基本 SQL 注入 复杂 SQL 注入 盲注测试 2. XSS 攻击测试用例设计 基本 XSS 攻击 复杂 XSS 攻击 DOM-based XSS 1. SQL 注入测试用例设计 SQL 注入攻击通常通过在输入字段中插入恶意 SQL 代码&#xff0c;试图操纵数据库查询。设计这些测试…

基于TCP的web端服务器数据库查询商品

背景描述 该系统为创建网络并发服务器&#xff0c;搭建HTML网络页面框架&#xff0c;通过HTTP超文本网络传输与用户建立连接&#xff08;TCP建立连接&#xff09;&#xff0c;从自己建立的数据库中查询用户所需信息&#xff0c;使用户能在网页中直接查询相关内容。本系统包括…

算法基础-快速排序

快速排序 i、j不相邻时&#xff0c;指向同一个下标 i、j相邻时&#xff0c;j 比 i 小 不管是否相邻&#xff0c;最后一次循环的if条件一定是 i>j 来退出循环&#xff0c;即最后一次的 if(i<j) 不执行 按照 j 来划分,x a[l r >> 1]&#xff0c;分为 [ l&#xff0…