Docker-MySQL集群搭建与SpringBoot项目部署

在实际开发中MySQL集群搭建利用percona-xtradb-cluster,有了docker后会方便很多,SpringBoot项目部署则只需要JDK环境即可,打包运行jar,就可以启动服务了

一、MySQL集群

percona-xtradb-cluster是为了mysql集群而推出的解决方案,实现mysql集群的强一致性

1.PXC容器创建

1.1 拉取镜像

使用docker拉取镜像:

-bash-4.2# docker pull  percona/percona-xtradb-cluster:5.7.21
1.2 创建容器

mysql需要数据卷,先创建一个数据卷,当然也可以指定绝对路径:

-bash-4.2# docker volume create --name mysql
mysql

创建并启动容器,这边指定集群名为PXC,网络使用host模式:

-bash-4.2# docker run -d -v mysql:/var/lib/mysql 
-e CLUSTER_NAME=PXC 
-e MYSQL_ROOT_PASSWORD=123456 -e EXTRABACKUP_PASSWROD=123456 
--privileged --name=node1 --net=host percona/percona-xtradb-cluster:5.7.21
1.3 创建集群其他节点容器

集群名相同,并使用CLUSTER_JOIN指定加入上面创建的集群节点的IP:

-bash-4.2# docker volume create --name mysql

-bash-4.2# docker run -d -v mysql:/var/lib/mysql 
-e CLUSTER_NAME=PXC -e CLUSTER_JOIN=192.168.42.4 
-e MYSQL_ROOT_PASSWORD=123456 -e EXTRABACKUP_PASSWROD=123456 
--privileged --name=node2 --net=hos percona/percona-xtradb-cluster:5.7.21
-bash-4.2# docker volume create --name mysql

-bash-4.2# docker run -d -v mysql:/var/lib/mysql 
-e CLUSTER_NAME=PXC -e CLUSTER_JOIN=192.168.42.4 
-e MYSQL_ROOT_PASSWORD=123456 -e EXTRABACKUP_PASSWROD=123456 
--privileged --name=node3 --net=host percona/percona-xtradb-cluster:5.7.21

完成后就可以自己使用数据库测试下了

尝试创建一个数据库,刷新后发现其他的节点都同步了:

二、MySQL集群负载均衡

上面只是搭建了MySQL集群,想要对外提供统一的访问,则需要负载均衡的中间件:haprox

1.haprox镜像拉取

-bash-4.2# docker pull haproxy

2.配置文件

-bash-4.2# mkdir /tmp/haproxy
-bash-4.2# vi /tmp/haproxy/haproxy.cfg

内容为:

global
    #工作目录,这边要和创建容器指定的目录对应
    # chroot /usr/local/etc/haproxy
    #日志文件
    log 127.0.0.1 local5 info
    #守护进程运行
    daemon
defaults
    log global
    mode http
    #日志格式
    option httplog
    #日志中不记录负载均衡的心跳检测记录
    option dontlognull
    #连接超时(毫秒)
    timeout connect 5000
    #客户端超时(毫秒)
    timeout client 50000
    #服务器超时(毫秒)
    timeout server 50000
    #监控界面
    listen admin_stats
    #监控界面的访问的IP和端口
    bind 0.0.0.0:8888
    #访问协议
    mode http
    #URI相对地址
    stats uri /dbs_monitor
    #统计报告格式
    stats realm Global statistics
    #登陆帐户信息
    stats auth admin:admin
    #数据库负载均衡
    listen proxy-mysql
    #访问的IP和端口,haproxy开发的端口为3306
    #假如有人访问haproxy的3306端口,则将请求转发给下面的数据库实例
    bind 0.0.0.0:3306
    #网络协议
    mode tcp
    #负载均衡算法(轮询算法)
    #轮询算法:roundrobin
    #权重算法:static-rr
    #最少连接算法:leastconn
    #请求源IP算法:source
    balance roundrobin
    #日志格式
    option tcplog
    #在MySQL中创建一个没有权限的haproxy用户,密码为空。
    #Haproxy使用这个账户对MySQL数据库心跳检测
    option mysql-check user haproxy
    server MySQL_1 192.168.42.4:3306 check weight 1 maxconn 2000
    server MySQL_2 192.168.42.230:3306 check weight 1 maxconn 2000
    server MySQL_3 192.168.42.249:3306 check weight 1 maxconn 2000
    #使用keepalive检测死链
    option tcpka

3.创建容器

-bash-4.2# docker run -d -p 8888:8888 -p 3307:3306 -v /tmp/haproxy:/usr/local/etc/haproxy 
--name haproxy01 --privileged haproxy

4.MySQL新建账号

mysql中执行下面的sql,该账号用于心跳检测:

CREATE USER 'haproxy'@'%' IDENTIFIED BY '';

5.访问仪表盘

访问:http://IP:8888/dbs_monitor 账号密码均为:admin

根据容器创建参数配置,我们对外使用3307端口,其他服务想要访问数据库,就可以直接使用该端口,并带有负载均衡效果:

三、SpringBoot项目部署

MySQL上创建数据库表如下:

新建一个SpringBoot项目,使用MyBatis针对该表进行新增操作

1.yml配置

yml配置为:

server:
  port: 8001

spring:
  datasource:
    url: jdbc:mysql://192.168.42.4:3307/haproxy_test?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource

mybatis:
  mapper-locations: classpath:mybatis/*.xml #指定映射文件路径
  type-aliases-package: com.aruba.bean

2.打包传入服务器

打包后,将jar传入服务器:

3.基于JDK镜像制作镜像

创建Dockerfile:

-bash-4.2# vi Dockerfile

内容为:

FROM openjdk:8
LABEL name="springboot-mybatis" version="1.0" author="aruba"
COPY DockerHaproxy-0.0.1-SNAPSHOT.jar springboot-mybatis.jar
CMD ["java","-jar","springboot-mybatis.jar"]

构建镜像:

-bash-4.2# docker build -t sbm-image .

创建并启动容器:

-bash-4.2# docker run -d -p 8081:8001 sbm-image
cc8755dac172f3ca351df1f628cd008124734b7f1b5296e47e4f6c4328e203da

浏览器访问接口:

数据也成功加入数据库中了:

阅读全文
下载说明:
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.shuli.cc/?p=12547,转载请注明出处。
0

评论0

显示验证码
没有账号?注册  忘记密码?