-
PXC集群安装介绍
Docker的镜像仓库中包含了PXC数据库的镜像,下载即可
https://hub.docker.com/r/percona/percona-xtradb-cluster
-
安装PXC镜像
1.从docker官方仓库中拉下PXC镜像
docker pull percona/percona-xtradb-cluster
或者本地安装
docker load < /home/soft/pxc.tar.gz
2.修改镜像名称,删除原来镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/percona/percona-xtradb-cluster latest 70b3670450ef 3 months ago 408 MB
docker.io/java latest d23bdf5b1b1b 2 years ago 643 MB
[root@localhost ~]# ^C
[root@localhost ~]# docker tag docker.io/percona/percona-xtradb-cluster pxc
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/percona/percona-xtradb-cluster latest 70b3670450ef 3 months ago 408 MB
pxc latest 70b3670450ef 3 months ago 408 MB
docker.io/java latest d23bdf5b1b1b 2 years ago 643 MB
[root@localhost ~]# docker rmi docker.io/percona/percona-xtradb-cluster
Untagged: docker.io/percona/percona-xtradb-cluster:latest
Untagged: docker.io/percona/percona-xtradb-cluster@sha256:17c64dacbb9b62bd0904b4ff80dd5973b2d2d931ede2474170cbd642601383bd
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
pxc latest 70b3670450ef 3 months ago 408 MB
docker.io/java latest d23bdf5b1b1b 2 years ago 643 MB
-
创建内部网络
出于安全考虑,需要给PXC集群实例创建Docker内部网络
docker network create net1
docker network inspect net1
docker network rm net1
[root@localhost ~]# docker network create --subnet=172.18.0.0/24 net1
9b5d44bff3eec1d5e17345447e97c5b713144123a2f9211eb7bb6cc83cf876d8
[root@localhost ~]# docker inspect net1
[
{
"Name": "net1",
"Id": "9b5d44bff3eec1d5e17345447e97c5b713144123a2f9211eb7bb6cc83cf876d8",
"Created": "2019-06-22T20:35:31.303994112+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@localhost ~]# docker network rm net1
-
创建Docker卷
使用Docker时,业务数据应保存在宿主机中,采用目录映射,这样可以使数据与容器独立。但是容器中的PXC无法直接使用映射目录,解决办法是采用Docker卷来映射
docker volume create --name v1
#删除数据卷
docker volume rm v1
[root@localhost ~]# docker volume create v1
v1
[root@localhost ~]# docker inspect v1
[
{
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/v1/_data",
"Name": "v1",
"Options": {},
"Scope": "local"
}
]
[root@localhost ~]# docker volume rm v1
1.创建5个数据卷
# 创建5个数据卷
docker volume create --name v1
docker volume create --name v2
docker volume create --name v3
docker volume create --name v4
docker volume create --name v5
2.创建5个PXC容器
注意,每个MySQL容器创建之后,因为要执行PXC的初始化和加入集群等工作,耐心等待1分钟左右再用客户端连接MySQL。另外,必须第1个MySQL节点启动成功,用MySQL客户端能连接上之后,再去创建其他MySQL节点。
#创建第1个MySQL节点
docker run -d --restart=always -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -v v1:/var/lib/mysql -v backup:/data --privileged --name=node1 --net=net1 --ip 172.18.0.2 pxc
#创建第2个MySQL节点
docker run -d --restart=always -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=node1 -v v2:/var/lib/mysql -v backup:/data --privileged --name=node2 --net=net1 --ip 172.18.0.3 pxc
#创建第3个MySQL节点
docker run -d --restart=always -p 3308: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
#创建第4个MySQL节点
docker run -d --restart=always -p 3309: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
#创建第5个MySQL节点
docker run -d --restart=always -p 3310:3306 -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=node1 -v v5:/var/lib/mysql -v backup:/data --privileged --name=node5 --net=net1 --ip 172.18.0.6 pxc