運維學習(一)Docker搭建MySQL數據庫集羣

一,常見的兩種MySQL集羣方案

1. Replication

Replication的方案是弱一致性的方案,無法保證數據的實時同步,DB1會直接提交。
特點 :速度快,弱一致性,低價值。常見日誌、新聞、帖子。

2. PXC

PXC的方案是強一致性的方案,DB1向DBn同步數據完成並且DBn完成提交,DB1纔會提交。
特點 :速度慢,強一致性,高價值。常見訂單、賬戶、財務。

 

二,Docker安裝PXC 搭建mysql集羣

1.拉取pxc鏡像

最新的PXC鏡像可能有問題,採用測試穩定的5.7.21版本。
搜索pxc鏡像   docker search percona
拉取pxc鏡像   docker pull percona/percona-xtradb-cluster:5.7.21
鏡像名太長不方便,給鏡像重命名  docker tag docker.io/percona/percona-xtradb-cluster:5.7.21 pxc
查看鏡像        docker images
刪除舊鏡像    docker rmi docker.io/percona/percona-xtradb-cluster
再次查看鏡像,發現只保留了重命名之後的pxc鏡像。

2.爲docker劃分單獨的網段 

出於安全考慮,創建出來的pxc容器不要直接對接docker以外的網絡。
因此需要給pxc在docker內部單獨劃分網段,這個網段docker外無法直接訪問,向外部開放什麼端口則由docker端口映射技術實現。

創建一個名叫net1的網段  docker network create --subnet=172.18.0.0/24 net1
查看創建出來的網段的詳細信息   docker inspect net1

刪除命令是docker network rm net1

3.創建docker卷

我們儘量不要在docker容器內保存業務數據,要把業務數據保存到宿主機裏。

使用目錄映射可以把宿主機上的目錄映射到docker容器裏,在運行容器時,把業務數據存到映射目錄裏,也就存到了宿主機上。這樣如果容器出現故障,只要把故障容器刪除,重新啓動新的容器,把目錄映射給新的容器就可以了。

pxc技術運行在docker容器裏,無法直接使用映射目錄。

如果採用映射目錄給pxc容器,pxc容器啓動時會閃退,需要採用另一種映射技術,也就是docker卷。


創建docker卷1: docker volume create v1
查看: docker inspect v1
刪除命令是docker volume rm v1

創建docker卷2: docker volume create v2
創建docker卷3    docker volume create v3
創建docker卷4: docker volume create v4
創建docker卷5: docker volume create v5
 

4.啓動PXC容器實例

啓動pxc容器實例1
(pxc容器啓動很快,但內部的mysql初始化需要時間,最好使用navicat鏈接成功之後再去創建第二個pxc容器實例,

   若pxc容器1的mysql沒初始化完成就創建容器2,容器2會閃退

docker run -d -p 3307:3306 
-e MYSQL_ROOT_PASSWORD=123456 
-e CLUSTER_NAME=PXC 
-e XTRABACKUP_PASSWORD=123456 
-v v1:/var/lib/mysql 
--privileged --name=node1 --net=net1 --ip 172.18.0.2 pxc

參數說明:

docker run               運行容器的命令

-d                             指後臺運行容器;

-P 3307:3306           指端口映射,將容器內部的3306端口映射到主機的3307端口

-e MYSQL_ROOT_PASSWORD=123456      創建出的MySQL實例的密碼,可以自定義

-e CLUSTER_NAME=PXC                             創建出的pxc集羣的名字,可以自定義

-e XTRABACKUP_PASSWORD=123456       數據庫節點之間同步所使用到的名字,可以自定義

--privileged             給予容器最高的權限

--name=node1       給容器起名爲node1

--net=net1              使用內部網段net1

--ip 172.18.0.2        內部網段分配的ip爲172.18.0.2

pxc                          鏡像的名稱

 

運行如圖: 

 

啓動pxc容器實例2

docker run -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=node1 -v v2:/var/lib/mysql --privileged --name=node2 --net=net1 --ip 172.18.0.3 pxc

注意:啓動後幾個pxc容器和啓動第一個pxc容器時的命令有所不同,謹慎避坑:

1)-p  3308:3306     指將容器的3306端口映射到宿主機的3308端口,因宿主機的3307端口已被容器node1所映射被佔用,因此+1

2) -e CLUSTER_JOIN=node1    指此容器與容器node1進行同步

3)-v v2:/var/lib/mysql            當前pxc的第二個容器使用第二個docker卷,即v2

4)--name=node2                   給當前容器起名node2

5)--ip 172.18.0.3                     第一個容器node1分配的ip地址爲172.18.0.2,此處給node2分配一個不相同的ip地址

運行如圖:

 

啓動pxc容器實例3

docker run -d -p 3309:3306 -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=node1 -v v3:/var/lib/mysql --privileged --name=node3 --net=net1 --ip 172.18.0.4 pxc

 

啓動pxc容器實例4

docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=node1 -v v4:/var/lib/mysql --privileged --name=node4 --net=net1 --ip 172.18.0.5 pxc

 

啓動pxc容器實例5

docker run -d -p 3311:3306 -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=node1 -v v5:/var/lib/mysql --privileged --name=node5 --net=net1 --ip 172.18.0.6 pxc

 

測試pxc集羣搭建成功:

在DB1新建一個test數據庫,新建student表:

刷新DB5,可以看到DB5中也已經有了test數據庫以及表和內容:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章