Docker-MySQL集群搭建與SpringBoot項(xiàng)目部署

在實(shí)際開發(fā)中MySQL集群搭建利用percona-xtradb-cluster,有了docker后會(huì)方便很多,SpringBoot項(xiàng)目部署則只需要JDK環(huán)境即可,打包運(yùn)行jar,就可以啟動(dòng)服務(wù)了

一、MySQL集群

percona-xtradb-cluster是為了mysql集群而推出的解決方案,實(shí)現(xiàn)mysql集群的強(qiáng)一致性

1.PXC容器創(chuàng)建

1.1 拉取鏡像

使用docker拉取鏡像:

-bash-4.2# docker pull  percona/percona-xtradb-cluster:5.7.21
1.2 創(chuàng)建容器

mysql需要數(shù)據(jù)卷,先創(chuàng)建一個(gè)數(shù)據(jù)卷,當(dāng)然也可以指定絕對(duì)路徑:

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

創(chuàng)建并啟動(dòng)容器,這邊指定集群名為PXC,網(wǎng)絡(luò)使用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 創(chuàng)建集群其他節(jié)點(diǎn)容器

集群名相同,并使用CLUSTER_JOIN指定加入上面創(chuàng)建的集群節(jié)點(diǎn)的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

完成后就可以自己使用數(shù)據(jù)庫(kù)測(cè)試下了

嘗試創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),刷新后發(fā)現(xiàn)其他的節(jié)點(diǎn)都同步了:

二、MySQL集群負(fù)載均衡

上面只是搭建了MySQL集群,想要對(duì)外提供統(tǒng)一的訪問,則需要負(fù)載均衡的中間件:haprox

1.haprox鏡像拉取

-bash-4.2# docker pull haproxy

2.配置文件

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

內(nèi)容為:

global
    #工作目錄,這邊要和創(chuàng)建容器指定的目錄對(duì)應(yīng)
    # chroot /usr/local/etc/haproxy
    #日志文件
    log 127.0.0.1 local5 info
    #守護(hù)進(jìn)程運(yùn)行
    daemon
defaults
    log global
    mode http
    #日志格式
    option httplog
    #日志中不記錄負(fù)載均衡的心跳檢測(cè)記錄
    option dontlognull
    #連接超時(shí)(毫秒)
    timeout connect 5000
    #客戶端超時(shí)(毫秒)
    timeout client 50000
    #服務(wù)器超時(shí)(毫秒)
    timeout server 50000
    #監(jiān)控界面
    listen admin_stats
    #監(jiān)控界面的訪問的IP和端口
    bind 0.0.0.0:8888
    #訪問協(xié)議
    mode http
    #URI相對(duì)地址
    stats uri /dbs_monitor
    #統(tǒng)計(jì)報(bào)告格式
    stats realm Global\ statistics
    #登陸帳戶信息
    stats auth admin:admin
    #數(shù)據(jù)庫(kù)負(fù)載均衡
    listen proxy-mysql
    #訪問的IP和端口,haproxy開發(fā)的端口為3306
    #假如有人訪問haproxy的3306端口,則將請(qǐng)求轉(zhuǎn)發(fā)給下面的數(shù)據(jù)庫(kù)實(shí)例
    bind 0.0.0.0:3306
    #網(wǎng)絡(luò)協(xié)議
    mode tcp
    #負(fù)載均衡算法(輪詢算法)
    #輪詢算法:roundrobin
    #權(quán)重算法:static-rr
    #最少連接算法:leastconn
    #請(qǐng)求源IP算法:source
    balance roundrobin
    #日志格式
    option tcplog
    #在MySQL中創(chuàng)建一個(gè)沒有權(quán)限的haproxy用戶,密碼為空。
    #Haproxy使用這個(gè)賬戶對(duì)MySQL數(shù)據(jù)庫(kù)心跳檢測(cè)
    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檢測(cè)死鏈
    option tcpka

3.創(chuàng)建容器

-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新建賬號(hào)

mysql中執(zhí)行下面的sql,該賬號(hào)用于心跳檢測(cè):

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

5.訪問儀表盤

訪問:http://IP:8888/dbs_monitor 賬號(hào)密碼均為:admin

根據(jù)容器創(chuàng)建參數(shù)配置,我們對(duì)外使用3307端口,其他服務(wù)想要訪問數(shù)據(jù)庫(kù),就可以直接使用該端口,并帶有負(fù)載均衡效果:

三、SpringBoot項(xiàng)目部署

MySQL上創(chuàng)建數(shù)據(jù)庫(kù)表如下:

新建一個(gè)SpringBoot項(xiàng)目,使用MyBatis針對(duì)該表進(jìn)行新增操作

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.打包傳入服務(wù)器

打包后,將jar傳入服務(wù)器:

3.基于JDK鏡像制作鏡像

創(chuàng)建Dockerfile:

-bash-4.2# vi Dockerfile

內(nèi)容為:

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"]

構(gòu)建鏡像:

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

創(chuàng)建并啟動(dòng)容器:

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

瀏覽器訪問接口:

數(shù)據(jù)也成功加入數(shù)據(jù)庫(kù)中了:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容