PXC集群安装

安装方式1-最新版本有可能有问题

输入网址,复制指令:
image.png

  1. # 第一种方式:网络安装
  2. docker pull percona/percona-xtradb-cluster
  3. # 第二种方式:本地安装
  4. docker load < /home/soft/pxc.tar.gz

image.png

安装方式2-

image.png
docker pull 下载镜像
docker save 将指定镜像保存成 tar 归档文件
docker rmi 删除镜像
docker load 导入镜像到本地
docker images 列出本地镜像

  1. # 下载镜像
  2. docker pull percona/percona-xtradb-cluster:5.7.21
  3. # 重命名
  4. docker tag percona/percona-xtradb-cluster:5.7.21 pxc
  5. # 删除镜像
  6. docker rmi percona/percona-xtradb-cluster:5.7.21

image.png
image.png

创建内部网络

  • 出于安全考虑,需要给PXC集群实例创建Docker内部网络
  • 创建内部网段的指令如下:

    1. # 创建的网段的名称为:net1,那这个网段的IP是什么:docker虚拟机自带的网段IP是:
    2. docker network create net1
    3. # 查看网段的相关信息
    4. docker network inspect net1
    5. # 删除网段
    6. docker network rm net1

    docker network create net1
    # 创建的网段的名称为:net1,那这个网段的IP是什么:docker虚拟机自带的网段IP是:172.17.0……,这是他内置的一个网段

    示例

    1. # 创建网段IP为:172.18.0.0/24
    2. docker network create --subnet=172.19.0.0/24 net1

    image.png
    如果报错的话,就换一个网段,报错如下
    Error response from daemon: Pool overlaps with other one on this address space

    创建Docker卷

    docker使用原则:
    如果创建docker容器,尽量不要在docker容器中保存业务数据,要把业务数据保存到宿主机里面,使用的技术就是目录映射,将容器中的目录映射到宿主机里。
    PXC这种技术,无法直接使用映射目录这种技术,如果直接使用映射目录这种技术,PXC会闪退,所以我们使用创建Docker卷这种技术

  • 容器中的PXC节点映射数据目录的解决方法

    1. # 创建Docker卷,v1是卷的名字
    2. docker volume create --name v1
    3. # 查看docker卷所在位置
    4. docker inspect v1
    5. # 删除数据卷
    6. docker volume rm v1

    在docker创建的v1卷,在宿主机上是可以看到的
    image.png
    创建pxcDir数据卷
    image.png

    创建PXC容器

  • 只需要向PXC镜像传入运行参数就能创建出PXC

    1. docker run -d -p 3306:3306
    2. -v pxcDir:/var/lib/mysql
    3. -e MYSQL_ROOT_PASSWORD=abc123456
    4. -e CLUSTER_NAME=PXC
    5. -e XTRABACKUP_PASSWORD=abc1223456
    6. --privileged --name=node1 --net=net1 --ip 172.19.0.02
    7. 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容器,命令如下:

  1. docker volume create pxcDir1
  2. docker volume create pxcDir2
  3. docker volume create pxcDir3
  4. docker volume create pxcDir4
  5. docker volume create pxcDir5
  6. # 执行这里切记:每次执行一个,都需要用navigate连一下数据库,如果能连上,就再次创建下一个,否则不要创建
  7. # 如果直接创建,容易出现闪退
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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 : 意思是和哪个节点进行同步

  1. # 进入容器
  2. docker exec -it gxbgHt bash