Docker搭建PXC集群

如何创建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

查看网段

[root@hongshaorou ~]# docker network inspect net1
[
    {
        "Name": "net1",
        "Id": "ad5c096baebe656f530576344ecde9a3674b907134aced66df27a8d72feefc63",
        "Created": "2018-06-06T10:06:28.55654238+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.18.0.0/24"
                }
            ]
        },
        "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卷是在宿主机上可以看到的具体映射真实目录

[root@hongshaorou ~]# docker inspect v1
[
    {
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/v1/_data",
        "Name": "v1",
        "Options": {},
        "Scope": "local"
    }
]
我们看到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集群

你可能感兴趣的:(数据库)