如何創建MySQL的PXC集群
下載PXC集群鏡像文件
下載
docker pull percona/percona-xtradb-cluster
重命名
[root@hongshaorou ~]# docker tag docker.io/percona/percona-xtradb-cluster pxc
創建內部網絡
處於安全考慮,需要給PXC集群實例創建Docker內部網絡
創建網段:
-
[root@hongshaorou ~] # docker network create --subnet=172.18.0.0/24 net1
-
ad5c096baebe656f530576344ecde9a3674b907134aced66df27a8d72feefc63
查看網段
-
[
-
[
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
},
-
"Internal": false,
-
"Attachable": false,
-
"Containers": {},
-
"Options": {},
-
"Labels": {}
-
}
-
]
刪除網段
[root@hongshaorou ~]# docker network rm net1
創建Docker卷
Docker容器使用原則:一旦創建出容器,盡量不要在容器中保存數據。一般通過目錄映射將數據保存在宿主機里面(我們把宿主機的一個目錄映射到容器內,然后容器的數據都保存到映射目錄,這樣就保存到了宿主機,即使容器損壞,宿主機也有數據保存)。但是,PXC技術在使用Docker的時候無法直接使用映射目錄,需要另外一種映射技術—Docker卷。
容器中的PXC節點映射數據目錄的解決辦法
-
創建Docker卷:[root@hongshaorou ~]# docker volume create -- name v1
-
-- name:設置卷名 可以不寫
我們創建的Docker卷是在宿主機上可以看到的具體映射真實目錄
-
[
-
[
-
{
-
-
-
-
-
-
-
}
-
]
-
我們看到Docker卷v1映射到了/ var/lib/docker/volumes/v1/_data
刪除Docker卷
[root@hongshaorou ~]# docker volume rm v1
創建PXC容器
只需要向PXC鏡像傳入運行參數就能創建出PXC容器
-
[root@hongshaorou ~] # docker run -d -p 3307:3306 -v v1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 --privileged --name=node1 --net=net1 --ip 172.18.0.2 pxc
-
1da51c2b8817f414ad825ba48f69a46c176f0b5ba7539e3b31e9ac54de056877
-
-
參數解釋:
-
-d:表示后台運行
-
-v:映射Docker卷到容器的mysql數據目錄
-
MYSQL_ROOT_PASSWORD:表示創建的數據庫密碼
-
CLUSTER_NAME: 表示創建出的集群名字
-
XTRABACKUP_PASSWORD:表示集群通信密碼
-
--privileged:表示分配最高權限
-
--net:指定網段
-
--ip:指定IP
-
-
[root@hongshaorou ~] # docker ps -a
-
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
-
1da51c2b8817 pxc "/entrypoint.sh " 7 seconds ago Up 5 seconds 4567-4568/tcp, 0.0.0.0:3307->3306/tcp node1
這樣我們就創建了第一個PXC節點
下面依次創建剩余四個節點
創建Docker卷
-
[root@hongshaorou ~] # docker volume create --name v2
-
v2
-
[root@hongshaorou ~] # docker volume create --name v3
-
v3
-
[root@hongshaorou ~] # docker volume create --name v4
-
v4
-
[root@hongshaorou ~] # docker volume create --name v5
-
v5
創建容器
-
創建node2:
-
[root@hongshaorou ~] # docker run -d -p 3308:3306 -v v2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 --privileged --name=node2 --net=net1 --ip 172.18.0.3 pxc
-
-
創建node3:
-
[root@hongshaorou ~] # docker run -d -p 3309:3306 -v v3:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 --privileged --name=node3 --net=net1 --ip 172.18.0.4 pxc
-
-
創建node4:
-
[root@hongshaorou ~] # docker run -d -p 3310:3306 -v v4:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 --privileged --name=node4 --net=net1 --ip 172.18.0.5 pxc
-
-
創建node5:
-
[root@hongshaorou ~] # docker run -d -p 3311:3306 -v v5:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 --privileged --name=node5 --net=net1 --ip 172.18.0.6 pxc
-
-
查看當前有哪些運行容器:
-
[root@hongshaorou ~] # docker ps -a
-
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
-
f7638daaa09b pxc "/entrypoint.sh " 7 seconds ago Up 4 seconds 4567-4568/tcp, 0.0.0.0:3311->3306/tcp node5
-
909261673fac pxc "/entrypoint.sh " 25 seconds ago Up 24 seconds 4567-4568/tcp, 0.0.0.0:3310->3306/tcp node4
-
763dca13edcd pxc "/entrypoint.sh " 43 seconds ago Up 42 seconds 4567-4568/tcp, 0.0.0.0:3309->3306/tcp node3
-
9a3f92074ad0 pxc "/entrypoint.sh " About a minute ago Up About a minute 4567-4568/tcp, 0.0.0.0:3308->3306/tcp node2
-
1da51c2b8817 pxc "/entrypoint.sh " 15 minutes ago Up 15 minutes 4567-4568/tcp, 0.0.0.0:3307->3306/tcp node1
在創建剩余容器的時候需要注意的是網絡和端口的映射不同,以及多了-e CLUSTER_JOIN=node1
表示加入node1節點。
注意:第一個節點創建時間較長,必須等待兩分鍾左右再創建剩余節點。
創建好之后我們就可以使用客戶端連接數據庫
轉自:https://zhaobugs.com/2018/06/06/Docker搭建PXC集群