首页 > 数据库 >FILE+POS 方式 GreatSQL 主从复制架构给主节点磁盘扩容

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

时间:2024-07-12 09:42:04浏览次数:14  
标签:主从复制 GreatSQL POS slave02 greatsql slave01 db02 db01 节点

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 指定的位点

file

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

greatsql> show slave status\G
Relay_Master_Log_File: mysql-bin.000002
Exec_Master_Log_Pos: 61781270

file

03.停掉db01 slave01主从线程

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

观察标记部分比db02 slave02大

file

停止复制

file

04.观察db01 slave01

greatsql> show slave status\G
Relay_Master_Log_File: mysql-bin.000002
Exec_Master_Log_Pos:73110158

file

05.观察db01 slave01

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

greatsql> show master status;
File :mysql-bin.000003   
Position : 48396034

file

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;

file

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

greatsql> show slave status \G

file

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

greatsql> stop slave;  

file

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;

file

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

greatsql> show slave status \G 

file

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

在db01 master节点上观察

file

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

greatsql> show slave status\G

file

greatsql> show master status;

file

观察 db02 slave02

file

10.停止db02 slave 02

greatsql> stop slave;

11.在db02 slave 02观察

greatsql> show slave status\G
Relay_Master_Log_File: mysql-bin.000003
Exec_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

file

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

五、案例总结

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

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


Enjoy GreatSQL

标签:主从复制,GreatSQL,POS,slave02,greatsql,slave01,db02,db01,节点
From: https://www.cnblogs.com/greatsql/p/18297613

相关文章

  • Postman接口测试工具详解
    文章目录Postman接口测试工具详解一、Postman简介二、安装与配置1.安装Postman2.配置Postman三、创建和管理请求1.创建请求2.配置请求3.添加请求参数四、发送请求与查看响应1.发送请求2.查看响应五、使用环境变量1.创建环境变量2.使用环境变量3.切换环境六......
  • 【笔记】mysql主从复制
    数据的读写都放在一台数据库上会导致该数据库压力过大,且如果此数据库损坏丢失无备份会造成损失故:设置两台(这里以两台为例)主数据库负责写入从数据库负责读取从数据库从主数据库那里取数据进行数据同步开干!(一)在VM准备好两台虚拟机创建虚拟机真的很简单选择典型之后......
  • Redis高可用之持久化、主从复制
    一、Redis高可用策略概述持久化持久化是最简单的高可用方法,主要作用是数据备份,即将数据存储在硬盘,保证数据不会因进程退出而丢失。主从复制主从复制是高可用Redis的基础,主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复哨兵在主从复制的基础上,......
  • 本地 AI RAG 系列之 使用 OpenLlama、Postgres、Node.js 和 Next.js 进行 100% 免费矢
    简介所以你想尝试向量搜索,但你不想付钱给OpenAI,或者使用Huggingface,也不想付钱给向量数据库公司。我来帮你。让我们在自己的机器上免费开始向量搜索吧。推荐文章《知识图谱大模型系列之01利用KeyBERT、HDBSCAN和Zephyr-7B-Beta构建知识图谱,LLM增强的自然语言处......
  • PostgreSQL逻辑复制搭建
    复制作为一种高可用/数据同步方案,在每一种数据库中都有实现,可以借助复制功能实现数据库的高可用或者数据同步/备份方案。复制的分类整体上看,复制可以分为物理复制和逻辑复制,对于物理复制或者逻辑复制,没有所谓的优劣,只有各自的适应场景。所谓的物理复制,也即复制数据库的redo物理......
  • Franka Robot 打印机器人关节位姿(print_joint_poses.cpp)
    //Copyright(c)2023FrankaRoboticsGmbH//UseofthissourcecodeisgovernedbytheApache-2.0license,seeLICENSE#include<iostream>#include<iterator>#include<franka/exception.h>#include<franka/model.h>/***@exam......
  • Postman与世界相连:集成第三方服务的全面指南
    ......
  • JS | fetch发送post请求
    在使用fetchAPI发送POST请求时,通常需要指定请求的方法为"POST",并且通过body参数传递要发送的数据。示例代码下面是一个简单的示例,演示如何使用fetchAPI发送POST请求:consturl='/api/endpoint';//替换为你的后端接口URLconstrequestData={mmsi:2098......
  • 精通Postman响应解析:正则表达式的实战应用
    ......
  • 大数据来袭:在Postman中巧妙处理大型响应数据的秘籍
    ......