PXC集群安装
安装方式1-最新版本有可能有问题
- Docker的镜像仓库中包含了PXC数据库的镜像,下载即可
- https://hub.docker.com/r/percona/percona-xtradb-cluster/
输入网址,复制指令:
# 第一种方式:网络安装
docker pull percona/percona-xtradb-cluster
# 第二种方式:本地安装
docker load < /home/soft/pxc.tar.gz
安装方式2-
docker pull 下载镜像
docker save 将指定镜像保存成 tar 归档文件
docker rmi 删除镜像
docker load 导入镜像到本地
docker images 列出本地镜像
# 下载镜像
docker pull percona/percona-xtradb-cluster:5.7.21
# 重命名
docker tag percona/percona-xtradb-cluster:5.7.21 pxc
# 删除镜像
docker rmi percona/percona-xtradb-cluster:5.7.21
创建内部网络
- 出于安全考虑,需要给PXC集群实例创建Docker内部网络
创建内部网段的指令如下:
# 创建的网段的名称为:net1,那这个网段的IP是什么:docker虚拟机自带的网段IP是:
docker network create net1
# 查看网段的相关信息
docker network inspect net1
# 删除网段
docker network rm net1
docker network create net1
# 创建的网段的名称为:net1,那这个网段的IP是什么:docker虚拟机自带的网段IP是:172.17.0……,这是他内置的一个网段示例
# 创建网段IP为:172.18.0.0/24
docker network create --subnet=172.19.0.0/24 net1
如果报错的话,就换一个网段,报错如下
Error response from daemon: Pool overlaps with other one on this address space创建Docker卷
docker使用原则:
如果创建docker容器,尽量不要在docker容器中保存业务数据,要把业务数据保存到宿主机里面,使用的技术就是目录映射,将容器中的目录映射到宿主机里。
PXC这种技术,无法直接使用映射目录这种技术,如果直接使用映射目录这种技术,PXC会闪退,所以我们使用创建Docker卷这种技术容器中的PXC节点映射数据目录的解决方法
# 创建Docker卷,v1是卷的名字
docker volume create --name v1
# 查看docker卷所在位置
docker inspect v1
# 删除数据卷
docker volume rm v1
在docker创建的v1卷,在宿主机上是可以看到的
创建pxcDir数据卷
创建PXC容器
只需要向PXC镜像传入运行参数就能创建出PXC
docker run -d -p 3306:3306
-v pxcDir:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=abc123456
-e CLUSTER_NAME=PXC
-e XTRABACKUP_PASSWORD=abc1223456
--privileged --name=node1 --net=net1 --ip 172.19.0.02
pxc
参数说明:
-d : 创建的容器在后台运行
-p: 端口映射, 后面的端口是容器的端口,前面的是宿主机的端口
-v: 路径的映射,前面是数据卷,后面是容器的 目录
-e MYSQL_ROOT_PASSWORD=abc123456 :创建的数据库密码
-e CLUSTER_NAME=PXC :创建的PXC集群的名称,可以随便写
-e XTRABACKUP_PASSWORD=abc1223456 : 数据库节点之间同步的密码
—privileged : 给最高权限
—name=node1 : 给创建出来的容器起一个名字
—net=net1 :使用的内部网段(之前创建过)
—ip 172.19.0.02 :使用的内部网段ip
pxc: 镜像的名称创建5个pxc容器,命令如下:
docker volume create pxcDir1
docker volume create pxcDir2
docker volume create pxcDir3
docker volume create pxcDir4
docker volume create pxcDir5
# 执行这里切记:每次执行一个,都需要用navigate连一下数据库,如果能连上,就再次创建下一个,否则不要创建
# 如果直接创建,容易出现闪退
docker run -d -p 3306:3306 -v pxcDir1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc1223456 --privileged --name=node1 --net=net1 --ip 172.19.0.02 pxc:5.7.21
docker run -d -p 3307:3306 -e CLUSTER_JOIN=node1 -v pxcDir2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc1223456 --privileged --name=node2 --net=net1 --ip 172.19.0.03 pxc:5.7.21
docker run -d -p 3308:3306 -e CLUSTER_JOIN=node1 -v pxcDir3:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc1223456 --privileged --name=node3 --net=net1 --ip 172.19.0.04 pxc:5.7.21
docker run -d -p 3309:3306 -e CLUSTER_JOIN=node1 -v pxcDir4:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc1223456 --privileged --name=node4 --net=net1 --ip 172.19.0.05 pxc:5.7.21
docker run -d -p 3310:3306 -e CLUSTER_JOIN=node1 -v pxcDir5:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc1223456 --privileged --name=node5 --net=net1 --ip 172.19.0.06 pxc:5.7.21
docker run -d -p 3306:3306 -v pxcDir1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc1223456 —privileged —name=node1 —net=net1 —ip 172.19.0.02 pxc:5.7.21
-e CLUSTER_JOIN=node1 : 意思是和哪个节点进行同步
# 进入容器
docker exec -it gxbgHt bash