天天看點

雲原生時代必須具備的核心技能之Docker進階篇(Docker實戰之MySQL高可用叢集搭建)MySQL高可用叢集搭建

雲原生時代必須具備的核心技能之Docker進階篇(Docker實戰之MySQL高可用叢集搭建)MySQL高可用叢集搭建

  本文來給大家介紹下MySQL在Docker中的叢集搭建。

MySQL高可用叢集搭建

  MySQL叢集搭建在實際項目中還是非常必須的,我們通過PXC【Percona XtraDB Cluster】來實作強一緻性資料庫叢集搭建。

1.MySQL叢集搭建

1> 拉去鏡像

docker pull percona/percona-xtradb-cluster:5.7.21      

2> 複制pxc鏡像【重命名】

docker tag percona/percona-xtradb-cluster:5.7.21 pxc      

3>删除原來的鏡像

docker rmi percona/percona-xtradb-cluster:5.7.21      

4>建立單獨的網段,給MySQL資料庫叢集使用

docker network create --subnet=172.20.0.0/24 pxc-net
docker network inpsect pxc-net # 檢視詳情
docker network rm pxc-net # 删除網段      

5> 建立和删除volume

docker volume create --name v1 # 建立 volume
docker volume rm v1 # 删除volume
docker volume inspect v1 # 檢視詳情      

6> 搭建pxc叢集

準備三個資料卷

docker volume create --name v1 
docker volume create --name v2 
docker volume create --name v3      

運作3個PXC容器

[CLUSTER_NAME PXC叢集名字]

[XTRABACKUP_PASSWORD資料庫同步需要用到的密碼]

建立第一個節點

docker run -d -p 3301:3306 -v v1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e EXTRABACKUP_PASSWROD=123456 --privileged --name=node1 --net=pxc-net --ip 172.22.0.2 pxc      

建立第二個和第三個節點: 注意

-e CLUSTER_JOIN=node1

docker run -d -p 3302:3306 -v v2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e EXTRABACKUP_PASSWROD=123456 -e CLUSTER_JOIN=node1 --privileged --name=node2 --net=pxc-net --ip 172.22.0.3 pxc      
docker run -d -p 3303:3306 -v v3:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e EXTRABACKUP_PASSWROD=123456 -e CLUSTER_JOIN=node1 --privileged --name=node3 --net=pxc-net --ip 172.22.0.4 pxc
      

2.負載均衡服務搭建

  當然在mysql叢集搭建好之後我們還得搭建個負載均衡的服務來處理請求。這兒我們選擇HaProxy.

雲原生時代必須具備的核心技能之Docker進階篇(Docker實戰之MySQL高可用叢集搭建)MySQL高可用叢集搭建

實作步驟:

1>拉去鏡像

docker pull haproxy      

2>建立haproxy的配置檔案。

touch /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 172.22.0.2:3306 check weight 1 maxconn 2000  
    server  MySQL_2 172.22.0.3:3306 check weight 1 maxconn 2000  
    server  MySQL_3 172.22.0.4:3306 check weight 1 maxconn 2000 
    #使用keepalive檢測死鍊
    option  tcpka      

3>建立haproxy容器

docker run  -d -p 8888:8888 -p 3306:3306 -v /tmp/haproxy:/usr/local/etc/haproxy --name haproxy01 --privileged --net=pxc-net haproxy      

4>在MySQL資料庫上建立使用者,用于心跳檢測

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

5>win浏覽器通路

http://centos_ip:8888/dbs_monitor
使用者名密碼都是:admin      

6>用戶端連接配接工具連接配接

ip:centos_ip
port:3306
user:root
password:123456      

至此搞定~!大家會發現在Docker中部署要遠比我們在window或者Linux中直接部署要友善很多哦。快動手試試吧!

雲原生時代必須具備的核心技能之Docker進階篇(Docker實戰之MySQL高可用叢集搭建)MySQL高可用叢集搭建