PXC

SWARM 集群

创建 SWARM 主节点 (–advertise-addr 用来指定使用哪个网卡的 IP)

docker swarm init --advertise-addr 192.168.x.x

复制初始化输出的加入命令,在需要加入的机器执行

docker swarm join  --token xxxxxxxx

创建 PXC 专用的 overlay 网络 pxc

docker network create -d overlay --attachable pxc

Docker

Node1

  • 创建目录,赋权 A

    mkdir -p /opt/pxc-node1/conf /opt/pxc-node1/data /opt/pxc-node1/logs
    
    chmod 777 /opt/pxc-node1/conf /opt/pxc-node1/data /opt/pxc-node1/logs
    
  • node1 的配置 docker-compose.yml

    version: "3"
    services:
      pxc-node1:
        image: percona/percona-xtradb-cluster:8.0.36-28.1
        container_name: pxc-node1
        volumes:
          - /opt/pxc-node1/conf:/etc/percona-xtradb-cluster.conf.d
          - /opt/pxc-node1/data:/var/lib/mysql
          - /opt/pxc-node1/logs:/var/log/mysql
        environment:
          - TZ=Asia/Shanghai
          - MYSQL_ROOT_PASSWORD=xxxxxx # root 密码
          - XTRABACKUP_PASSWORD=xxxxxx # pxc 集群同步密码
          - CLUSTER_NAME=pxc
        # - CLUSTER_JOIN=pxc-node1
        network_mode: pxc # overlay 网络名称
        ports:
          - 3316:3306
        restart: always
        privileged: true
    
  • 启动

    docker compose -f docker-compose.yml up -d pxc-node1
    

Node2

  • 先查看 pxc-node1 是否报错

    docker logs -f --tail 100 pxc-node1
    
  • 不报错后创建 node1 的相同目录,复制/opt/pxc-node1/data/*.pem 的证书文件到/opt/pxc-node2/data/

    cp -p /opt/pxc-node1/data/*.pem /opt/pxc-node2/data/
    
    cp -p /opt/pxc-node1/conf/*.pem /opt/pxc-node2/conf/
    
  • node2 的配置 docker-compose.yml

    version: "3"
    services:
      pxc-node2:
        image: percona/percona-xtradb-cluster:8.0.36-28.1
        container_name: pxc-node2
        volumes:
          - /opt/pxc-node2/conf:/etc/percona-xtradb-cluster.conf.d
          - /opt/pxc-node2/data:/var/lib/mysql
          - /opt/pxc-node2/logs:/var/log/mysql
        environment:
          - TZ=Asia/Shanghai
          - MYSQL_ROOT_PASSWORD=xxxxxx
          - XTRABACKUP_PASSWORD=xxxxxx
          - CLUSTER_NAME=pxc
          - CLUSTER_JOIN=pxc-node1 # 主节点容器名称
        network_mode: pxc # overlay 网络名称
        ports:
          - 3326:3306
        restart: always
        privileged: true
    
    • 启动
    docker compose -f docker-compose.yml up -d pxc-node2
    

NodeX

更多节点按 node2 方式添加

宕机处理

  • 查询存活的节点

    在所有能连接的机器查询

    SHOW STATUS LIKE 'wsrep_cluster%';
    
  • 停止所有节点 docker

    docker compose -f docker-compose.yml up -d pxc-nodeX
    
  • 将其中一个存活的设置成新主节点

  • 修改主节点 grastate.dat 文件的 safe_to_bootstrap 值改为 1

  • 删除主节点 docker-compose.yml 的 CLUSTER_JOIN 配置

  • 修改其他节点的 docker-compose.yml 的 CLUSTER_JOIN 配置为新主节点容器名称

  • 先启动新的主节点,连接后查看是否正常

  • 然后依次启动子节点直到全部启动完毕

  • 检测集群状态是否正常