FILE+POS 方式 GreatSQL 主從複製架構給主節點磁碟擴容 一、前提 在一套非常老的系統上,有一套GreatSQL主從集群(1主1從),主從複製採用的是FILE+POS方式複製,磁碟使用緊張需要擴容,只能在該台機器上添加更大的磁碟,將原數據盤替換,也沒有其他的機器資源替換。這套系統沒有V ...
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