Docker搭建PXC集群


如何創建MySQL的PXC集群

下載PXC集群鏡像文件

下載

docker pull percona/percona-xtradb-cluster

重命名

[root@hongshaorou ~]# docker tag docker.io/percona/percona-xtradb-cluster pxc

創建內部網絡

處於安全考慮,需要給PXC集群實例創建Docker內部網絡

創建網段:

  1.  
    [root@hongshaorou ~] # docker network create --subnet=172.18.0.0/24 net1
  2.  
    ad5c096baebe656f530576344ecde9a3674b907134aced66df27a8d72feefc63

查看網段

  1.  
    [ root@hongshaorou ~]# docker network inspect net1
  2.  
    [
  3.  
    {
  4.  
    "Name": "net1",
  5.  
    "Id": "ad5c096baebe656f530576344ecde9a3674b907134aced66df27a8d72feefc63",
  6.  
    "Created": "2018-06-06T10:06:28.55654238+08:00",
  7.  
    "Scope": "local",
  8.  
    "Driver": "bridge",
  9.  
    "EnableIPv6": false,
  10.  
    "IPAM": {
  11.  
    "Driver": "default",
  12.  
    "Options": {},
  13.  
    "Config": [
  14.  
    {
  15.  
    "Subnet": "172.18.0.0/24"
  16.  
    }
  17.  
    ]
  18.  
    },
  19.  
    "Internal": false,
  20.  
    "Attachable": false,
  21.  
    "Containers": {},
  22.  
    "Options": {},
  23.  
    "Labels": {}
  24.  
    }
  25.  
    ]

刪除網段

[root@hongshaorou ~]# docker network rm net1

創建Docker卷

Docker容器使用原則:一旦創建出容器,盡量不要在容器中保存數據。一般通過目錄映射將數據保存在宿主機里面(我們把宿主機的一個目錄映射到容器內,然后容器的數據都保存到映射目錄,這樣就保存到了宿主機,即使容器損壞,宿主機也有數據保存)。但是,PXC技術在使用Docker的時候無法直接使用映射目錄,需要另外一種映射技術—Docker卷。

容器中的PXC節點映射數據目錄的解決辦法

  1.  
    創建Docker卷:[root@hongshaorou ~]# docker volume create -- name v1
  2.  
    -- name:設置卷名 可以不寫

我們創建的Docker卷是在宿主機上可以看到的具體映射真實目錄

  1.  
    [ root@hongshaorou ~]# docker inspect v1
  2.  
    [
  3.  
    {
  4.  
    "Driver": "local",
  5.  
    "Labels": {},
  6.  
    "Mountpoint": "/var/lib/docker/volumes/v1/_data",
  7.  
    "Name": "v1",
  8.  
    "Options": {},
  9.  
    "Scope": "local"
  10.  
    }
  11.  
    ]
  12.  
    我們看到Docker卷v1映射到了/ var/lib/docker/volumes/v1/_data

刪除Docker卷

[root@hongshaorou ~]# docker volume rm v1

創建PXC容器

只需要向PXC鏡像傳入運行參數就能創建出PXC容器

  1.  
    [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
  2.  
    1da51c2b8817f414ad825ba48f69a46c176f0b5ba7539e3b31e9ac54de056877
  3.  
     
  4.  
    參數解釋:
  5.  
    -d:表示后台運行
  6.  
    -v:映射Docker卷到容器的mysql數據目錄
  7.  
    MYSQL_ROOT_PASSWORD:表示創建的數據庫密碼
  8.  
    CLUSTER_NAME: 表示創建出的集群名字
  9.  
    XTRABACKUP_PASSWORD:表示集群通信密碼
  10.  
    --privileged:表示分配最高權限
  11.  
    --net:指定網段
  12.  
    --ip:指定IP
  13.  
     
  14.  
    [root@hongshaorou ~] # docker ps -a
  15.  
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  16.  
    1da51c2b8817 pxc "/entrypoint.sh " 7 seconds ago Up 5 seconds 4567-4568/tcp, 0.0.0.0:3307->3306/tcp node1

這樣我們就創建了第一個PXC節點

下面依次創建剩余四個節點

創建Docker卷

  1.  
    [root@hongshaorou ~] # docker volume create --name v2
  2.  
    v2
  3.  
    [root@hongshaorou ~] # docker volume create --name v3
  4.  
    v3
  5.  
    [root@hongshaorou ~] # docker volume create --name v4
  6.  
    v4
  7.  
    [root@hongshaorou ~] # docker volume create --name v5
  8.  
    v5

創建容器

  1.  
    創建node2:
  2.  
    [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
  3.  
     
  4.  
    創建node3:
  5.  
    [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
  6.  
     
  7.  
    創建node4:
  8.  
    [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
  9.  
     
  10.  
    創建node5:
  11.  
    [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
  12.  
     
  13.  
    查看當前有哪些運行容器:
  14.  
    [root@hongshaorou ~] # docker ps -a
  15.  
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  16.  
    f7638daaa09b pxc "/entrypoint.sh " 7 seconds ago Up 4 seconds 4567-4568/tcp, 0.0.0.0:3311->3306/tcp node5
  17.  
    909261673fac pxc "/entrypoint.sh " 25 seconds ago Up 24 seconds 4567-4568/tcp, 0.0.0.0:3310->3306/tcp node4
  18.  
    763dca13edcd pxc "/entrypoint.sh " 43 seconds ago Up 42 seconds 4567-4568/tcp, 0.0.0.0:3309->3306/tcp node3
  19.  
    9a3f92074ad0 pxc "/entrypoint.sh " About a minute ago Up About a minute 4567-4568/tcp, 0.0.0.0:3308->3306/tcp node2
  20.  
    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集群


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM