Docker续9:使用docker-compose部署nmt项目,在haproxy中代理mysql负载均衡

为之前的docker-compose添加mysql负载均衡

root@localhost pes# rm -rf mysql/data/auto.cnf //先删除这个文件,这个文件保证了mysql的唯一,因为待会要做一个从mysql,所以必须删除

root@localhost pes# cp -r mysql/data mysql/data0 //为从mysql复制一个data文件出来,用来挂载

root@localhost pes# vim docker-compose.yml

version: "3"

services:

web0:

container_name: web0

image: nginx:latest

volumes:

  • /root/pes/web/src/dist:/usr/share/nginx/html

hostname: web01.yuanyu.zhangmin

expose:

  • 80

web1:

container_name: web1

image: nginx:latest

volumes:

  • /root/pes/web/src/dist:/usr/share/nginx/html

hostname: web01.yuanyu.zhangmin

expose:

  • 80

web2:

container_name: web2

image: nginx:latest

volumes:

  • /root/pes/web/src/dist:/usr/share/nginx/html

hostname: web01.yuanyu.zhangmin

expose:

  • 80

java0:

container_name: java0

build: ./java

volumes:

  • /root/pes/java/src/:/java/src/

hostname: java01.yuanyu.zhangmin

java1:

container_name: java1

image: pes_java0:latest

volumes:

  • /root/pes/java/src/:/java/src/

hostname: java01.yuanyu.zhangmin

depends_on:

  • java0

java2:

container_name: java2

image: pes_java0:latest

volumes:

  • /root/pes/java/src/:/java/src/

hostname: java01.yuanyu.zhangmin

depends_on:

  • java0

mysql:

container_name: mysql01

image: mysql:5.7.44

expose:

  • 3306

volumes:

  • /root/pes/mysql/data:/var/lib/mysql/

mysqla:

container_name: mysql02

image: mysql:5.7.44

expose:

  • 3306

volumes:

  • /root/pes/mysql/data0:/var/lib/mysql/

haproxy:

container_name: haproxy01

image: haproxy:latest

volumes:

  • ./haproxy/:/haproxy-override

  • ./haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg

ports:

  • "5000:5000"

  • "8888:8888"

  • "8080:8080"

expose:

  • 5000

  • 8888

  • 8080

  • 3306

root@localhost pes# vim 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 mysql01:3306 check weight 1 maxconn 2000

server MYSQL_2 mysql02:3306 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

#########################################

######## web负载均衡配置 ###############

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

#########################################

root@localhost pes# vim java/src/application.properties

spring.application.name=Project_ExamSystem

优化部分 -----------------start---------------

Tomcat

server.port=8080

server.tomcat.uri-encoding=utf-8

#最小线程数

server.tomcat.threads.min-spare=500

#最大链接数

server.tomcat.max-connections=6500

#最大等待队列长度

server.tomcat.accept-count=500

#最大线程数

server.tomcat.threads.max=2500

#请求头最大长度kb

server.max-http-request-header-size=1048576

#请请求体最大长度kb

server.tomcat.max-http-form-post-size=2MB

Hikari 连接池配置 ------ 详细配置请访问:https://github.com/brettwooldridge/HikariCP

最小空闲连接数量

spring.datasource.hikari.minimum-idle=30

空闲连接存活最大时间,默认600000(10分钟)

spring.datasource.hikari.idle-timeout=180000

连接池最大连接数,默认是10

spring.datasource.hikari.maximum-pool-size=100

此属性控制从池返回的连接的默认自动提交行为,默认值:true

spring.datasource.hikari.auto-commit=true

连接池母子

spring.datasource.hikari.pool-name=PES_HikariCP

此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟

spring.datasource.hikari.max-lifetime=1800000

数据库连接超时时间,默认30秒,即30000

spring.datasource.hikari.connection-timeout=30000

spring.datasource.hikari.connection-test-query=SELECT now()

优化部分 -----------------stop---------------

spring.datasource.url=jdbc:mysql://haproxy01:3306/project_exam_system

spring.datasource.username=zhangmin

spring.datasource.password=zhangmin

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

#日志设置 显示MyBatis SQL语句

logging.level.root=INFO

logging.level.com.dn.es.mapper=DEBUG

配置静态资源路径

spring.mvc.static-path-pattern=/static/**

spring.web.resources.static-locations=classpath:/static/

#spring.web.resources.static-locations=classpath:/static/,file:E:/static/

#Redis 配置

#spring.data.redis.host=127.0.0.1

#spring.data.redis.database=0

#spring.data.redis.password=

#spring.data.redis.port=6379

#spring.data.redis.timeout=10s

Redis 连接池

#spring.data.redis.lettuce.pool.enabled=true

最大空闲连接

#spring.data.redis.lettuce.pool.max-idle=10

最小空闲连接

#spring.data.redis.lettuce.pool.min-idle=0

阻塞等待时间

#spring.data.redis.jedis.pool.max-wait=-1ms

最大连接数

#spring.data.redis.jedis.pool.max-active=200

@Autowrid

private RedisTemplate<String,Object> redisTmplate;

注意:

最新版的docker-compose已经不再推荐使用 links 来连接容器。现在,Docker Compose 默认会为同一网络中的所有服务创建一个 DNS 解析,这样服务之间可以通过服务名称直接相互访问。

root@localhost pes# docker-compose up -d

root@localhost pes# docker exec -it mysql01 mysql -proot //为haproxy创建一个没有密码,没有任何权限的用户

mysql>create user 'haproxy'@'%' identified by '';

root@localhost pes# docker exec -it mysql02 mysql -proot

mysql>create user 'haproxy'@'%' identified by '';

主从读写分离可以看前面的文章配置

浏览器访问

相关推荐
晚风叙码6 小时前
MySQL 表的操作:从建表到删表,一篇讲清楚
android·mysql·oracle
paopaokaka_luck7 小时前
非遗文物数字化小程序(AI非遗问答、ONNX图像识别、协同过滤推荐、ECharts数据分析、非遗知识浏览与互动、文创商城订单闭环、文化活动报名签到、社区交流)
javascript·spring boot·mysql·数据分析·echarts·mybatis
江湖有缘7 小时前
3款开源绘图工具整理合集,可Docker一键部署!
docker·容器·开源
TTATTC7 小时前
告别协议选型内耗:深入拆解微服务“内部 gRPC + 边界 REST”混合通信架构与 Envoy 转码实战
docker·开源
Dxy12393102168 小时前
MySQL 条件注释 vs 普通注释
数据库·mysql
做运维的阿瑞8 小时前
自连接、交叉连接与复杂 JOIN:一条问题链讲透
前端·数据库·mysql
小马同学-8 小时前
MySQL5.x源码安装
mysql
IT毕设梦工厂9 小时前
计算机毕业设计选题推荐:基于大数据的巧克力销售数据分析与可视化|毕业设计选题|计算机毕设|选题推荐|毕设指导|项目定制|源码|高质量项目
大数据·hadoop·mysql·数据挖掘·数据分析·spark·课程设计
Thomas.Sir10 小时前
第13课:Spring Cloud LoadBalancer 新版负载均衡核心原理
spring cloud·负载均衡
FYKJ_201010 小时前
springboot家政服务平台66766-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·mysql·spark·课程设计