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

158 阅读3分钟

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

上文介绍了将mysql从库拉起pxc集群第一个节点,本文继续业务验证和生产流量切换环节。

业务验证

停止pxc节点与原主库的主从,然后重开一个binlog

stop slave;
show slave status\G
flush logs;

生产流量全部切至蓝色环境,绿色环境应用数据库连接指向pxc节点

修改数据库连接指向的办法,本文采用的k8s service,修改完service指向后,可能需要重启绿色环境应用或在原主库kill绿色环境应用数据库连接以使绿色环境应用全部重连到pxc节点。

apiVersion: v1
kind: Service
metadata:
  name: mysql-test
  namespace: ext
spec:
  ports:
  - port: 3306
    protocol: TCP
    targetPort: 3306
  type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
  name: mysql-test
  namespace: ext
subsets:
- addresses:
  - ip: {pxc_node_ip}
  ports:
  - port: 3306
    protocol: TCP

绿色环境进行业务验证与测试

测试验证数据的清理

  • 设置pxc节点read_only并重开一个binlog
set global read_only=1;
show master status;
flush logs;
  • 使用将数据库回滚工具,将测试验证产生的数据清除 这里推荐使用binlog_rollback,该工具回生产回滚sql,在pxc节点应用即可
binlog_rollback -m file -M mysql -H {ip} -P {port} -u {user} -p '{passwd}' \
-sdt "2022-05-24 07:20:00" -edt  "2022-05-24 09:20:00" \
-w rollback {binlog}

恢复与原主库的同步

start slave;

生产切换

接上面验证步骤,生产流量全部在蓝色环境,绿色环境应用连接pxc节点,在此基础上将生产流量由mysql切换到pxc。

原主库设置read_only(此时业务不可用)

set global read_only=1;

确认pxc节点已同步原主库全部数据,停止pxc主从并记录 salve status 和 wsrep 的 wsrep_last_committed

show master status\G  --原主库执行
show slave status\G --pxc执行,记录
stop slave; --pxcpxc执行
reset slave all; --pxcpxc执行
show status like 'wsrep%'; --pxcpxc执行,记录 wsrep_last_committed 值(xid)

取消pxc节点的read_only

set global read_only=0;

生产流量切至绿色环境 (此时生产流量切换到pxc集群,业务恢复)

观察业务是否正常

原主库加入pxc集群

拷贝pxc节点grastate.dat信息,放入原主库的datadir,编辑seqno字段值为pxc节点第二步骤对应的wsrep_last_committed的值

vim grastate.dat

# GALERA saved state
version: 2.1
uuid:    ***-***-***-***
seqno:   {wsrep_last_committed值}
safe_to_bootstrap: 0

其他步骤与从库变更为pxc节点一样

修改蓝色环境数据库连接指向pxc初始节点(与绿色环境一致)

修改蓝色环境 k8s service 指向,可能需要重启蓝色环境应用或在原主库kill蓝色环境应用数据库连接以使蓝色环境应用全部重连到pxc节点。

总结

这里提供的是一种在线切换方案,业务不可用时间约为2分钟,并且可以同时操作多个集群(10个?20个?),如果能申请到停机时间,可以将方案做的更简单,基于上述描述修改即可。

(未完待续)