
本文來給大家介紹下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.
實作步驟:
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中直接部署要友善很多哦。快動手試試吧!