PXC
主从模式
HOSTNAME | IP |
---|---|
node1 | 192.168.2.11 |
node2 | 192.168.2.12 |
SWARM 集群
-
创建 SWARM 主节点 (–advertise-addr 用来指定使用哪个网卡的 IP)
docker swarm init --advertise-addr 192.168.2.11
-
复制初始化输出的加入命令,在需要加入的机器执行
docker swarm join --token xxx
-
创建 PXC 专用的 overlay 网络 pxc
docker network create --driver overlay --attachable --subnet 10.10.0.0/16 pxc_net
-
删除没用网络
docker network prune
-
删除指定网络
docker network rm pxc_net
-
离开集群
docker swarm leave -f
Docker
node1
-
创建目录,赋权
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
-
mysqld 配置
/opt/pxc-node1/conf/mysqld.cnf
[mysqld] lower_case_table_names = 1 transaction-isolation = READ-COMMITTED log_error_suppression_list='MY-013360'
-
docker-compose.yml
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_net # 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/* /opt/pxc-node2/conf/
-
docker-compose.yml
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_net # overlay 网络名称 ports: - 3326:3306 restart: always privileged: true depends_on: - pxc-node1
- 启动
docker compose -f docker-compose.yml up -d pxc-node2
nodex
更多节点按 node2 方式添加
宕机处理
主节点没问题
-
修改主节点 grastate.dat 文件的 safe_to_bootstrap 值改为 1
-
先启动主节点,连接后查看是否正常
-
然后依次启动子节点直到全部启动完毕
-
检测集群状态是否正常
主节点无法启动
-
查询存活的节点
在所有能连接的机器查询
SHOW STATUS LIKE 'wsrep_cluster%';
-
修改存活的节点 grastate.dat 文件的 safe_to_bootstrap 值改为 1 将其设为主节点
-
删除主节点 docker-compose.yml 的 CLUSTER_JOIN 配置
-
修改其他节点的 docker-compose.yml 的 CLUSTER_JOIN 配置为新主节点容器名称
-
然后依次启动子节点直到全部启动完毕
-
检测集群状态是否正常
问题
-
不通宿主机之前 swarm 网络不通
查看网卡 tx 的 checksum 是否关闭
ethtool -k 网卡名称 | grep checksum
增加开机自启关闭网卡 tx 的 checksum
/etc/systemd/system/docker-tx-checksum-off.service
[Unit] Description=Turn off checksum offload on eth0 After=network-online.target [Install] WantedBy=network-online.target [Service] Type=oneshot ExecStart=/sbin/ethtool -K eth0 tx-checksum-ip-generic off
-
内网网段冲突
查询所有 docker_gwbridge 关联的容器
docker network inspect docker_gwbridge
断开所有 docker_gwbridge 关联的容器
docker network disconnect docker_gwbridge gateway_xxx -f
删除 docker_gwbridge 网关
docker network rm docker_gwbridge
重建 docker_gwbridge 网关
docker network create --subnet 11.11.11.0/24 \ --opt com.docker.network.bridge.name=docker_gwbridge \ --opt com.docker.network.bridge.enable_icc=false \ --opt com.docker.network.bridge.enable_ip_masquerade=true \ docker_gwbridge