写点什么

FILE+POS 方式 GreatSQL 主从复制架构给主节点磁盘扩容

作者:GreatSQL
  • 2024-07-12
    福建
  • 本文字数:2067 字

    阅读完需:约 7 分钟

FILE+POS 方式 GreatSQL 主从复制架构给主节点磁盘扩容

一、前提

在一套非常老的系统上,有一套 GreatSQL 主从集群(1 主 1 从),主从复制采用的是 FILE+POS 方式复制,磁盘使用紧张需要扩容,只能在该台机器上添加更大的磁盘,将原数据盘替换,也没有其他的机器资源替换。这套系统没有 VIP,没有高可用切换工具,业务读写直连主节点,从节点可供读,允许有一定的延迟,全程磁盘扩容需要手动操作,以下方案步骤是模拟最快的方式去进行磁盘扩容。

二、整体思路是

在主节点机器上挂载一块新磁盘,在新磁盘上搭建一个新的从节点,旧从节点的主变为新从节点,最后将主节点与新从节点准备好配置文件后,关闭主节点,将新从节点使用新的配置文件重启,端口号为旧主 port,新主实例顶替旧主成功。

三、模拟环境

主从架构

db01:master,172.17.135.81:3306

db02:slave02,172.17.134.225:3306

原主从 db01 master 复制数据到 db02 slave02,现在在 db01 上搭建新的从节点 slave01,并将 slave01 提升为新的主节点 master02

db01:IP 为 172.17.135.81

master :port 3306

slave01:port 3307

db02:IP 为 172.17.134.225

slave02:port 3306

四、以下操作为模拟切换流程

1).在 db01 上 master 数据放在磁盘 /data/

使用 xtrabackup 工具备份并搭建 db01 slave01 数据放在磁盘/data2/上

2).改变 db02 slave02 数据源为 db01 slave01(即 db02 slave02 从 db01-slave01 同步数据),后期切换数据库

操作过程

01.停掉 db02 slave02 复制线程

先停 slave02 目的是,slave02 获取执行的 binlog 比 db01 slave01 上的 binlog 少,方便后续 db02 slave02 追数据到 db01 slave01 指定的位点



02.观察 db02 slave02(一定要小于 04 步骤的位置)

greatsql> show slave status\GRelay_Master_Log_File: mysql-bin.000002Exec_Master_Log_Pos: 61781270
复制代码



03.停掉 db01 slave01 主从线程

观察主从复制情况,确认 db01 slave01 获取主节点位点比 db02 slave02 大,然后停掉主从,方便方便获取 db01 slave01 上的 binlog 位置信息(show master status)

观察标记部分比 db02 slave02 大



停止复制



04.观察 db01 slave01

greatsql> show slave status\GRelay_Master_Log_File: mysql-bin.000002Exec_Master_Log_Pos:73110158
复制代码



05.观察 db01 slave01

与获取主节点过来的 binlog 位点信息与当前节点上 binlog 位点信息对应关系

greatsql> show master status;File :mysql-bin.000003   Position : 48396034
复制代码



06.开启 db01 slave01 主从线程

使 db01 slave01 正常追数据

greatsql> start slave;
复制代码

07.db02 slave02 执行 until 的位置 为(04 步骤)得到的值

追 binlog 至指定位点,该位点对应着 db01 slave01 节点上show master status获取的位点信息

greatsql> start slave until MASTER_LOG_FILE ='mysql-bin.000002',MASTER_LOG_POS =73110158;
复制代码



观察状态,是否到指定位点停止

greatsql> show slave status \G
复制代码



到指定位点停止后,停掉主从复制

greatsql> stop slave;  
复制代码



08.db02 slave02 从 db01 slave01 获取数据源(即重新指定 db02 slave02 主库信息)

根据 04 、05 获取的主 binlog 位点与 db01 slave01 binlog 位点对应关系,将 db02 slave02 复制关系指定位从 db01 slave01 获取 binlog 数据,重启主从复制,并观察主从状态

在 db02 slave02 重新指定复制关系

greatsql> reset slave all; 
greatsql> CHANGE MASTER TO MASTER_HOST= '172.17.135.81',MASTER_USER='rpl', MASTER_PASSWORD='rpl123!',MASTER_PORT=3307,MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=48396034;
greatsql> start slave;
复制代码



观察复制状态,等待复制正常之后在进行下一步,避免数据丢失

greatsql> show slave status \G 
复制代码



09.通知将业务停止,避免数据更新,观察全部节点是否处于同一 binlog 位点状态

在 db01 master 节点上观察



观察 db01 slave01 主从是否正常,且无延迟

greatsql> show slave status\G
复制代码



greatsql> show master status;
复制代码



观察 db02 slave02



10.停止 db02 slave 02

greatsql> stop slave;
复制代码

11.在 db02 slave 02 观察

greatsql> show slave status\GRelay_Master_Log_File: mysql-bin.000003Exec_Master_Log_Pos: 114096916
复制代码

12.先后正常关闭 db01 master,然后关闭 db01 slave01

修改配置文件 db01 slave01 端口号为 3306

13.启动 db01 slave01(不要启动 db01 master)

登录 db01 slave01 清除复制信息

greatsql> reset slave all;
复制代码

14.重置 db02 slave02 主从复制信息,从新的主节点拉取数据

greatsql> CHANGE MASTER TO MASTER_HOST= '172.17.135.81',MASTER_USER='rpl', MASTER_PASSWORD='rpl123!',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=114096916;
greatsql> show slave status\G
复制代码



15、通知业务重连,磁盘扩容完成

五、案例总结

本案例主要是针对非 GTID 复制、无自动切换、无 VIP、无新机器、磁盘无法动态扩容的场景。

核心思想是找到对应的 binlog 位点信息,在重新指定主从信息,在重新指定主从信息之前,可以做准备工作,例如主节点上的新备主节点可以提前准备,配置文件可以提前准备,命令提前准备好,通过填补的方式将关键信息填到对应的命令中,尽量的去节省时间以及追数时间,促使业务宕机时间达到最短。

用户头像

GreatSQL

关注

GreatSQL社区 2023-01-31 加入

GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。 社区:https://greatsql.cn/ Gitee: https://gitee.com/GreatSQL/GreatSQL

评论

发布
暂无评论
FILE+POS 方式 GreatSQL 主从复制架构给主节点磁盘扩容_GreatSQL_InfoQ写作社区