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

浏览器访问接口:

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值