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\G
Relay_Master_Log_File: mysql-bin.000002
Exec_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\G
Relay_Master_Log_File: mysql-bin.000002
Exec_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\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
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
技術交流群:
微信:掃碼新增
GreatSQL社群助手
微信好友,傳送驗證資訊加群
。