docker部署project-exam-system项目(haproxy代理nginx)

news2024/9/20 1:12:38

1、概述:

即nmt服务,涉及到的服务有:nginx、mysql、tomcat

2、具体配置:(前提:先停掉然后之前运行的容器)

1)先创建三个nginx容器

# 端⼝不能映射80

[root@docker ~]# docker run -itd -v /root/pes/web/src/dist/:/usr/share/nginx/htm l/ nginx:latest

# 现在在远程是⽆法访问nginx服务,⽽且现在也不希望外部 直接访问nginx,希望创建nginx服务的集群,这个集群被 haproxy代理,创建三个nginx容器,创建⼀个haproxy服 务,⽽且nginx容器还需要指定名称,web0 web1 web2因为 如果没有名称,那么容器就⽆法被haproxy --link

[root@docker ~]# docker run -itd --name=web0 -v /root/project_exam_system/web/dist/:/usr/share/nginx/html nginx:latest 
83f463c242e492dbf2298fc04d1555b2d2eead5288c31a87737138f3beb48e30
[root@docker ~]# docker run -itd --name=web1 -v /root/project_exam_system/web/dist/:/usr/share/nginx/html nginx:latest 
2f40af73a44c6b251a5be480a49c8c2b09af1f7bc67346b44f5a733dd6485a6d
[root@docker ~]# docker run -itd --name=web2 -v /root/project_exam_system/web/dist/:/usr/share/nginx/html nginx:latest 
457b47245dfff34dbf6dee787152e144087fbf18437eddfabc5fdc22735004ac

2) 启动haproxy容器 hap0

官方网址为:A step-by-step tutorial to set up HAProxy Enterprise using Docker for the first time | HAProxy EnterpriseGet started with HAProxy Enterprise using Docker.icon-default.png?t=N7T8https://www.haproxy.com/documentation/haproxy-enterprise/getting-started/tutorials/docker-tutorial/#sidebar

[root@docker ~]# docker pull haproxy    //拉取haproxy镜像

docker images 

REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
java         v0        46529fd5a4b2   2 days ago     774MB
nginx        latest    5ef79149e0ec   2 weeks ago    188MB
haproxy      latest    4e5bebb0fd91   7 weeks ago    103MB
mysql        5.7.44    5107333e08a8   8 months ago   501MB
centos       latest    5d0da3dc9764   2 years ago    23MB
[root@docker ~]#yum -y install haproxy 

[root@docker ~]#docker run -itd -p5000:5000 haproxy:latest /bin/bash   //创建haproxy容器

[root@docker ~]#vim /etc/haproxy/haproxy.cfg               //编辑配置文件

global
        daemon
        # nbproc 1
        # pidfile /var/run/haproxy.pid
        # 工作目录
       # chroot /usr/local/etc/haproxy

defaults
        log 127.0.0.1 local0 err #[err warning info debug]
        mode http                #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
        retries 2                #两次连接失败就认为是服务器不可用,也可以通过后面设置
        option redispatch        #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
        option abortonclose      #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
        option dontlognull       #日志中不记录负载均衡的心跳检测记录
        maxconn 4096             #默认的最大连接数
        timeout connect 5000ms   #连接超时
        timeout client 30000ms   #客户端超时
        timeout server 30000ms   #服务器超时
        #timeout check 2000      #心跳检测超时

######## 监控界面配置 #################
listen admin_status
        # 监控界面访问信息
        bind 0.0.0.0:8888
        mode http
        # URI相对地址
        stats uri /dbs
        # 统计报告格式
        stats realm Global\ statistics
        # 登录账户信息
        stats auth admin:123456
########frontend配置##############

######## mysql负载均衡配置 ###############
listen proxy-mysql
        bind 0.0.0.0:3306
        mode tcp
        # 负载均衡算法
        # static-rr 权重, leastconn 最少连接, source 请求IP, 轮询 roundrobin
        balance roundrobin
        # 日志格式
        option tcplog
        # 在 mysql 创建一个没有权限的haproxy用户,密码为空。 haproxy用户
        # create user 'haproxy'@'%' identified by ''; FLUSH PRIVILEGES;
        option mysql-check user haproxy
         # 这里是容器中的IP地址,由于配置的是轮询roundrobin,weight 权重其实没有生效
        server MYSQL_1 192.168.130.100:3306 check weight 1 maxconn 2000
        server MYSQL_2 192.168.130.101:3306 check weight 1 maxconn 2000
        #server MYSQL_3 192.168.130.102:3306 check weight 1 maxconn 2000
        # 使用keepalive检测死链
        # option tcpka
#########################################

######## mysql负载均衡配置 ###############
listen proxy-web
        bind 0.0.0.0:5000
        mode http
        # 负载均衡算法
        # static-rr 权重, leastconn 最少连接, source 请求IP, 轮询 roundrobin
        balance roundrobin
        # 日志格式
        option tcplog
        # 在 mysql 创建一个没有权限的haproxy用户,密码为空。 haproxy用户
        # create user 'haproxy'@'%' identified by ''; FLUSH PRIVILEGES;
        #option mysql-check user haproxy
         # 这里是容器中的IP地址,由于配置的是轮询roundrobin,weight 权重其实没有生效
        server web0 172.17.0.5:80 check weight 1 maxconn 2000
        server web1 172.17.0.7:80 check weight 1 maxconn 2000
        server web2 172.17.0.6:80 check weight 1 maxconn 2000
        #server MYSQL_3 192.168.130.102:3306 check weight 1 maxconn 2000
        # 使用keepalive检测死链
        # option tcpka
#########################################
[root@docker ~]# docker cp /etc/haproxy/haproxy.cfg b6:/usr/local/etc/haproxy/          //将该文件传给haproxy容器
Successfully copied 5.12kB to b6:/usr/local/etc/haproxy/
[root@docker ~]# docker attach b6                           //进入容器
haproxy@b6afb365f151:~$ haproxy -f /usr/local/etc/haproxy/haproxy.cfg      

//启动服务,因为没有写入守护进程,
浏览器访问:192.168.71.10:5000

 3)在宿主机上安装了haproxy,配置代理三个的 nginx容器中的web服务,也是直接添加容器的ip地址

[root@docker ~]#systemctl start haproxy

# 创建⼀个haproxy,将配置⽂件导⼊到容器,在容器 中启动haproxy,也是可以的

[root@docker ~]#docker cp /root/pes/haproxy/haproxy.cfg 容器名 称|id:/usr/local/etc/haproxy/haproxy. cfg # 启动 haproxy -f /usr/local/etc/haproxy/haproxy.cfg

# 实际的使⽤haproxy容器,只需要将配置⽂件挂载到 指定的⽬录就可以

docker run -itd #交互 终端 后台 --link=web0 锚定web0 --link=web1 --link=web2 -p5000:5000 -v #/root/pes/haproxy/haproxy.cfg:/usr/l ocal/etc/haproxy/haproxy.cfg # 将配置⽂件挂载到容器中 haproxy:latest  #镜像

[root@docker ~]#docker stop b6

[root@docker ~]#docker rm b6

[root@docker ~]#vim /etc/haproxy/haproxy.cfg 

[root@docker ~]#docker run -itd --link=web0 --link=web1 --link=web2 -p5000:5000 -v /etc/haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg haproxy:latest       //挂载本机的haproxy配置文件
f614ab4d4b7e10bf2ccb88ad8d0acece4189a629923351a68a431d82dd747f16

4)添加统计页面 

[root@docker  ~]# docker stop f6
f6
[root@docker ~]# docker rm f6
f6
[root@docker ~]# docker run -itd --link=web0 --link=web1 --link=web2 -p5000:5000 -p8888:8888 -v /etc/haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg haproxy:latest    

浏览器访问:192.168.71.100:8888/dbs         用户名:admin     密码:123456      

5)重启服务,进行测试

[root@docker ~]# systemctl restart docker 

[root@docker ~]# docker start upbeat_lamarr vigilant_cray web0 web1 web2 eloquent_newton       //haproxy这个容器必须在web0,web1,web2之后启动(被link的容器要先启动)
upbeat_lamarr
vigilant_cray
web0
web1
web2
eloquent_newton

浏览器测试:1921.68.71.10:8888/dbs

拓展:haproxy代理java

[root@docker ~]# docker stop a4                     //停掉原来的java容器,然后创建三个java容器
a4
[root@docker ~]# docker run -itd --name=java0 java:v0 /usr/local/jdk/bin/java -jar Project_ExamSystem-V1.0.0.war
fb37b57acebd452fb44d95142888b3ce52ff347a387cae6b2499cf75030c9715
[root@docker ~]# docker run -itd --name=java1 java:v0 /usr/local/jdk/bin/java -jar Project_ExamSystem-V1.0.0.war
a0a9ddf1b47db327eeb2ef8a2ff3915b8d274cc7f27e802b87f71fa068bb3a8e
[root@docker ~]# docker run -itd --name=java2 java:v0 /usr/local/jdk/bin/java -jar Project_ExamSystem-V1.0.0.war
0f6c041fd2dafa98c67f24bb266c468d458f03bf73785c2e6f40c5f2ec2a4592
[root@docker ~]# vim /etc/haproxy/haproxy.cfg             //把java的加进去
global
        daemon
        # nbproc 1
        # pidfile /var/run/haproxy.pid
        # 工作目录
       # chroot /usr/local/etc/haproxy

defaults
        log 127.0.0.1 local0 err #[err warning info debug]
        mode http                #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
        retries 2                #两次连接失败就认为是服务器不可用,也可以通过后面设置
        option redispatch        #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
        option abortonclose      #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
        option dontlognull       #日志中不记录负载均衡的心跳检测记录
        maxconn 4096             #默认的最大连接数
        timeout connect 5000ms   #连接超时
        timeout client 30000ms   #客户端超时
        timeout server 30000ms   #服务器超时
        #timeout check 2000      #=心跳检测超时

######## 监控界面配置 #################
listen admin_status
        # 监控界面访问信息
        bind 0.0.0.0:8888
        mode http
        # URI相对地址
        stats uri /dbs
        # 统计报告格式
        stats realm Global\ statistics
        # 登录账户信息
        stats auth admin:123456
########frontend配置##############

######## mysql负载均衡配置 ###############
listen proxy-mysql
        bind 0.0.0.0:3306
        mode tcp
        # 负载均衡算法
        # static-rr 权重, leastconn 最少连接, source 请求IP, 轮询 roundrobin
        balance roundrobin
        # 日志格式
        option tcplog
        # 在 mysql 创建一个没有权限的haproxy用户,密码为空。 haproxy用户
        # create user 'haproxy'@'%' identified by ''; FLUSH PRIVILEGES;
        option mysql-check user haproxy
         # 这里是容器中的IP地址,由于配置的是轮询roundrobin,weight 权重其实没有生效
        server MYSQL_1 192.168.130.100:3306 check weight 1 maxconn 2000
        server MYSQL_2 192.168.130.101:3306 check weight 1 maxconn 2000
        #server MYSQL_3 192.168.130.102:3306 check weight 1 maxconn 2000
        # 使用keepalive检测死链
        # option tcpka
#########################################

######## mysql负载均衡配置 ###############
listen proxy-web
        bind 0.0.0.0:5000
        mode http
        # 负载均衡算法
        # static-rr 权重, leastconn 最少连接, source 请求IP, 轮询 roundrobin
        balance roundrobin
        # 日志格式
        option tcplog
        # 在 mysql 创建一个没有权限的haproxy用户,密码为空。 haproxy用户
        # create user 'haproxy'@'%' identified by ''; FLUSH PRIVILEGES;
        #option mysql-check user haproxy
         # 这里是容器中的IP地址,由于配置的是轮询roundrobin,weight 权重其实没有生效
        server web0 web0:80 check weight 1 maxconn 2000
        server web1 web1:80 check weight 1 maxconn 2000
        server web2 web2:80 check weight 1 maxconn 2000
        #server MYSQL_3 192.168.130.102:3306 check weight 1 maxconn 2000
        # 使用keepalive检测死链
        # option tcpka
#########################################
######## java负载均衡配置 ###############
listen proxy-java
        bind 0.0.0.0:8080
        mode tcp
        # 负载均衡算法
        # static-rr 权重, leastconn 最少连接, source 请求IP, 轮询 roundrobin
        balance roundrobin
        # 日志格式
        option tcplog
        # 在 mysql 创建一个没有权限的haproxy用户,密码为空。 haproxy用户
        # create user 'haproxy'@'%' identified by ''; FLUSH PRIVILEGES;
        #option mysql-check user haproxy
         # 这里是容器中的IP地址,由于配置的是轮询roundrobin,weight 权重其实没有生效
        server java0 java0:8080 check weight 1 maxconn 2000
        server java1 java1:8080 check weight 1 maxconn 2000
        server java2 java2:8080 check weight 1 maxconn 2000
        #server MYSQL_3 192.168.130.102:3306 check weight 1 maxconn 2000
        # 使用keepalive检测死链
        # option tcpka
#########################################
[root@docker ~]# docker stop 91                    
91
[root@docker ~]# docker run -itd --link=web0 --link=web1 --link=web2 --link=java0 --link=java1 --link=java2 -p8080:8080 -p5000:5000 -p8888:8888 -v /etc/haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg haproxy:latest      //把java容器也link了,端口映射出去
04e061227170e8bc9b3a2c94b3fafcfba02084ccdffde8ac176d6ce70622330c
[root@docker ~]# systemctl restart docker             //重启docker
[root@docker ~]# docker start java0 java1 java2 web0 web1 web2 vigilant_cray vibrant_noether   
java0
java1
java2
web0
web1
web2
vigilant_cray                             //mysql容器
vibrant_noether                      //haproxy容器

 浏览器测试

ab压力测试:
[root@docker ~]# yum provides */bin/ab                   //查找哪个包下有ab这个命令
httpd-tools-2.4.6-99.el7.centos.1.x86_64 : Tools for use with the Apache HTTP Server
源    :@updates
匹配来源:
文件名    :/usr/bin/ab

[root@docker ~]# yum -y install httpd-tools.x86_64             

[root@docker ~]# ab -n 100 -c 10 http://localhost:5000/         //测试,-n指定总共要发送的请求数,-c指定并发请求的数量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2098718.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Echarts中国地图省市区县三级联动

NodeV14.20.0安装 # 历史版本Node下载地址 https://nodejs.org/en/download/prebuilt-installer# NodeV14.20.0配置与部署 https://nodejs.org/dist/v14.20.0/node-v14.20.0-x64.msi构建默认Vue3工程目录 npm install -g vue/cli --registryhttps://registry.npm.taobao.org …

剪映剪辑影视视频字幕声音批量自动对齐教程

一款智能软件,用它结合剪映或CapCut 你就可以快速将一个视频翻译为另一种语言,非常适合做TikTok中视频的用户,无论是英语区法语区还是日语区,这款名为谷哥剪映助手的软件都能成倍提升你的剪辑效率。 让我来给大家介绍它的使用方法…

结合Wireshark抓包分析,沉浸式体验HTTP请求的一次完整交互过程

HTTP(HyperText Transfer Protocol,超文本传输协议)是用于传输超文本信息的协议,它是互联网上应用最为广泛的一种网络协议。了解完整的HTTP请求过程有助于我们更深层次的去分析问题(尤其是网络安全问题)&am…

【动态规划】通过例题 理解 完全背包问题(完全背包、零钱兑换、完全平方数、C++)

文章目录 前言问题描述动态规划解法 算法题1.【模板】完全背包2.零钱兑换3.零钱兑换II4.完全平方数 前言 完全背包问题 是一种经典的动态规划问题,通常用于求解优化问题。在这个问题中,我们有一个背包和一组物品,每种物品有一个特定的重量和…

Java注解基础入门

一、基本概念 1.1 认识注解 Java代码中的特殊标记,用于告诉其它程序该段代码该如何执行(Test、Override等) 注解的使用范围包括类、方法、构造器、成员变量等等 注解本质上是接口,继承了Annotation接口 使用(...)注解实际上是一个…

WPF——自定义RadioButton

需求 需要做一组单选按钮,只要单选按钮的显示内容与需要匹配的内容一样,则该单选按钮就为选中状态,否则则为不选中状态;且需要将当前选中状态保存,后续再进入此页面时,匹配内容为此次的保存状态。 如下所…

界面风格选择

风格一 卡通计算机元素加侧边框 风格二 电子科幻元素 风格三 自然景观元素 这个图片有一束从山顶照耀下来的光,很有特色。 登陆注册框样式 上面这个图的光泽感很新颖

大数据新视界--大数据大厂之大数据时代的璀璨导航星:Eureka 原理与实践深度探秘

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

虚幻引擎VR游戏开发 | VR设备和术语

四款Unreal Engine默认配套按键映射的VR设备 IMC按键映射 Oculus Touch (R) Grip Axis: 代表Oculus Rift或Quest设备的右手控制器的抓握轴输入。Valve Index (R) Grip Axis: 代表Valve Index设备的右手控制器的抓握轴输入。Vive (R) Grip: 代表HTC Vive设备的右手控制器的抓握按…

【ESP32】mqtt 发送和接收

一、首先下载MQTT-X软件 二、下载后建立mqtt&#xff0c;设置这些参数 点击连接&#xff0c;然后创建topic主题 三、程序 注释已经写的很清楚了 #include <WiFi.h> // 包含WiFi库&#xff0c;用于连接WiFi网络 #include <PubSubClient.h> // 包含MQTT库&#xf…

【C++八股题整理】内存布局、堆和栈、内存泄露、函数调用栈

C八股题整理 内存布局C中的内存分配情况堆和栈的内存有什么区别&#xff1f; 堆堆内存分配慢如何优化&#xff1f;内存池内存溢出和内存泄漏是什么&#xff1f;如何避免&#xff1f;内存碎片是什么&#xff1f;怎么解决&#xff1f; 栈为什么栈的访问效率比堆高&#xff1f;函数…

奉加微PHY6233进入DTM模式;TX单音信号;

TX单音信号 参考文档"PH62XX射频测试仪器操作说明文档.pdf"进行DTM配置和操作,这里的目的是为了测试频偏: 这里先把原厂给的DTM的ihex固件下载到芯片里面去: 设置好参数后点击start按钮即可打出单音信号: 这时候频谱的信号如下: 接下来调成其他参数可以看到如下频…

一文彻底搞懂Spring, Spring MVC, Spring Boot 和 Spring Cloud 区别

1.定义说明 Spring, Spring MVC, Spring Boot 和 Spring Cloud 是Spring家族中的四个不同的项目&#xff0c;它们有各自的功能&#xff0c;并且可以在Spring应用程序中一起使用。 1&#xff09;Spring Spring是一个开源容器框架&#xff0c;它集成各类型的工具&#xff0c;通…

Android ROM和Linux内核源码在线阅读网站

1&#xff0c; Android在线代码阅读 http://www.aospxref.com/ 支持最新android源码 http://androidxref.com/ 支持到Android9 2&#xff0c; Linux内核在线阅读网站 https://lxr.missinglinkelectronics.com/ 支持在线阅读linux内核&#xff0c;uboot&#xff0c;qemu &am…

JavaScript方法链

前言 在JavaScript中&#xff0c;方法链&#xff08;Chaining Methods&#xff09;是一种编程技术&#xff0c;允许你在一个表达式中连续调用多个方法。这通常通过让每个方法返回对象自身&#xff08;this&#xff09;来实现&#xff0c;从而可以在同一行上依次调用多个方法。…

文件加密软件怎么选呢?五款人气超高的文件加密软件推荐给你

文件加密软件怎么选呢&#xff1f;以下是五款人气超高的文件加密软件&#xff0c;包括安企神在内&#xff0c;它们各自具有独特的功能和优势&#xff1a; 安企神 功能特点&#xff1a;安企神是一款功能强大的企业级文件加密软件&#xff0c;提供全方位的数据安全保护。它采用先…

TPAMI 2024|如何在动态世界中捕捉每一个细节?智能视觉识别的突破,开放长尾识别技术详解!

题目&#xff1a;Open Long-Tailed Recognition in a Dynamic World 动态世界中的开放长尾识别 作者&#xff1a;Ziwei Liu; Zhongqi Miao; Xiaohang Zhan; Jiayun Wang; Boqing Gong; Stella X. Yu 源码链接&#xff1a; https://liuziwei7.github.io/projects/LongTail.ht…

Java项目: 基于SpringBoot+mysql网上订餐系统分前后台(含源码+数据库+开题报告+PPT+毕业论文)

一、项目简介 本项目是一套基于SpringBootmysql网上订餐系统分前后台 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单…

Ollydbg提示:xxxxxx可能不是一个 32 位 PE 文件,无论如何都尝试载入吗?

原标题&#xff1a;OD提示C:\Users\XuanRan\Desktop\xxxx.exe’可能不是一个个 32 位 PE 文件,无论如何都尝试载入吗? 它的意思就是告诉你&#xff0c;OD现在只能用于32位软件。 如果要调试64位程序&#xff0c;去使用x64dbg x64dbg下载链接&#xff1a; https://github.com…

代码随想录算法训练营第32天|509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

目录 509. 斐波那契数1、题目描述2、思路3、code4、复杂度分析 70. 爬楼梯1、题目描述2、思路3、code 746. 使用最小花费爬楼梯1、题目描述2、思路3、code4、复杂度分析 509. 斐波那契数 题目链接&#xff1a;link 1、题目描述 斐波那契数 &#xff08;通常用 F(n) 表示&…