MySQL主从结构在线迁移至PXC高可用集群的方案(二)

241 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天,点击查看活动详情

上文介绍了pxc迁移方案总体步骤、优点及需要提前准备的工作,本文继续介绍用mysql从库拉起pxc集群第一个节点。

从库转为PXC集群节点

本文pxc实例及mysql实例均采用docker容器部署,容器网络模式为host。具体部署步骤如下:

实例宿主机防火墙放通,与网络防火墙放通端口一致

firewall-cmd --add-port={3306/tcp,4567/tcp,4568/tcp,4444/tcp}
firewall-cmd --permanent --add-port={3306/tcp,4567/tcp,4568/tcp,4444/tcp}

准备docker-compose.yml文件

vim docker-compose.yml

version: '2.2'
services:
  pxc_server_3306:
    image: {镜像仓库地址}/percona-xtradb-cluster:5.7.33
    container_name: pxc_server_3306
    environment:
      MYSQL_ROOT_PASSWORD: example
    network_mode: host
    volumes:
      - "/etc/localtime:/etc/localtime:ro"
      - "/etc/mysql/my-3306.cnf:/etc/mysql/my.cnf:ro"
      - "/etc/mysql/wsrep-3306.cnf:/etc/percona-xtradb-cluster.conf.d/wsrep.cnf:ro"
      - "{datadir}:/var/lib/mysql"
    cpus: 8
    mem_limit: 24g
    mem_reservation: 20g

准备pxc节点配置文件

my.cnf与原mysql配置文件一致,新增wsrep.cnf文件,将{}中内容替换为实际的值,其他的参数可以根据实际情况调整

vim wsrep-3306.cnf

[mysqld]
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_name=pxc_3306

# 第一个pxc节点启动参数设为gcomm://,后面加入的节点如注释行所示,然后将第一个节点的配置也改为注释行
wsrep_cluster_address=gcomm://
#wsrep_cluster_address=gcomm://{ip1}:4567,{ip2}:4567,{ip3}:4567

port=3306

# 其他节点修改相应的ip和node_name即可
wsrep_node_name=pxc_3306_node1
wsrep_node_incoming_address={ip1}:3306
wsrep_node_address={ip1}:4567
wsrep_sst_receive_address={ip1}:4444

wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=sstuser:{password}

wsrep_slave_threads=8
wsrep_provider_options="cert.log_conflicts=YES; gcache.recover=yes; gcache.page_size = 128M; gcache.size = 4G; gcs.fc_limit = 10000; gcs.fc_factor = 1; gcs.fc_master_slave = YES"

pxc_strict_mode=ENFORCING

binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
wsrep_auto_increment_control=ON
skip_ssl

停止mysql从库实例

docker stop {mysql_3306}

配置配置文件及datadir目录权限

pxc容器运行账号为mysql,对应uid为1001,所以需在宿主创建一个uid为1001的账号,并使该账号具备读配置文件及读写datadir的权限

useradd -u 1001 pxc -M -s /sbin/nologin
chown -R pxc. {datadir}
chown -R pxc. /etc/mysql

运行pxc实例

#docker-compose拉起容器
cd {docker-compose.yml文件所在目录}
docker-compose up -d pxc_server_3306

#查看容器云翔状态
docker ps

#查看日志
docker-compose logs
tail -f {datadir}/mysqld.err

登录mysql,检查wsrep状态及slave状态

以pxc方式启动的实例,默认仍与原主库保持主从同步,即其既是pxc集群的第一个节点,又仍是mysql主从结构的从库

show status like 'wsrep%';
show slave status\G

(未完待续)