FILE+POS 方式 GreatSQL 主從複製架構給主節點磁碟擴容

GreatSQL發表於2024-07-12

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

GreatSQL是適用於金融級應用的國內自主開源資料庫,具備高效能、高可靠、高易用性、高安全等多個核心特性,可以作為MySQL或Percona Server的可選替換,用於線上生產環境,且完全免費併相容MySQL或Percona Server。

相關連結: GreatSQL社群 Gitee GitHub Bilibili

GreatSQL社群:

社群部落格有獎徵稿詳情:https://greatsql.cn/thread-100-1-1.html

image-20230105161905827

技術交流群:

微信:掃碼新增GreatSQL社群助手微信好友,傳送驗證資訊加群

image-20221030163217640

相關文章