zoukankan      html  css  js  c++  java
  • 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集群

  • 相关阅读:
    MySQL学习笔记(三)
    MySQL学习笔记(二)
    MySQL学习笔记(一)
    JavaScript学习笔记(三)
    JavaScript学习笔记(二)
    20180205文本`边框`背景`超链接(css伪类)`列表样式,div标签
    20180203选择器和文体样式
    20180202个人简历,表单
    20180201 超链接与表格
    20180131 HTML内容回顾
  • 原文地址:https://www.cnblogs.com/EikiXu/p/10109205.html
Copyright © 2011-2022 走看看