前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker-MySQL集群搭建与SpringBoot项目部署

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

作者头像
aruba
发布2022-09-28 13:00:13
9330
发布2022-09-28 13:00:13
举报
文章被收录于专栏:android技术android技术

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

一、MySQL集群

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

1.PXC容器创建
1.1 拉取镜像

使用docker拉取镜像:

代码语言:javascript
复制
-bash-4.2# docker pull  percona/percona-xtradb-cluster:5.7.21
1.2 创建容器

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

代码语言:javascript
复制
-bash-4.2# docker volume create --name mysql
mysql

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

代码语言:javascript
复制
-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:

代码语言:javascript
复制
-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
代码语言:javascript
复制
-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镜像拉取
代码语言:javascript
复制
-bash-4.2# docker pull haproxy
2.配置文件
代码语言:javascript
复制
-bash-4.2# mkdir /tmp/haproxy
-bash-4.2# vi /tmp/haproxy/haproxy.cfg

内容为:

代码语言:javascript
复制
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.创建容器
代码语言:javascript
复制
-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,该账号用于心跳检测:

代码语言:javascript
复制
CREATE USER 'haproxy'@'%' IDENTIFIED BY '';
5.访问仪表盘

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

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

三、SpringBoot项目部署

MySQL上创建数据库表如下:

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

1.yml配置

yml配置为:

代码语言:javascript
复制
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:

代码语言:javascript
复制
-bash-4.2# vi Dockerfile

内容为:

代码语言:javascript
复制
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"]

构建镜像:

代码语言:javascript
复制
-bash-4.2# docker build -t sbm-image .

创建并启动容器:

代码语言:javascript
复制
-bash-4.2# docker run -d -p 8081:8001 sbm-image
cc8755dac172f3ca351df1f628cd008124734b7f1b5296e47e4f6c4328e203da

浏览器访问接口:

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-09-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、MySQL集群
    • 1.PXC容器创建
      • 1.1 拉取镜像
      • 1.2 创建容器
      • 1.3 创建集群其他节点容器
  • 二、MySQL集群负载均衡
    • 1.haprox镜像拉取
      • 2.配置文件
        • 3.创建容器
          • 4.MySQL新建账号
            • 5.访问仪表盘
            • 三、SpringBoot项目部署
              • 1.yml配置
                • 2.打包传入服务器
                  • 3.基于JDK镜像制作镜像
                  相关产品与服务
                  云数据库 SQL Server
                  腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档