數(shù)據(jù)庫|TiDB Binlog實踐指南,輕松實現(xiàn)主備集群部署和數(shù)據(jù)同步
劉昊?| 數(shù)據(jù)庫工程師
最近手頭有個系統(tǒng),有需要搭建災備庫的需求(RTO要求4小時內(nèi),根據(jù)實際情況計算)。考慮到生產(chǎn)系統(tǒng)是5版本,TiCDC存在一些兼容性問題,且TiDB Binlog已經(jīng)有實踐案例及經(jīng)驗可供參考,故選擇使用TiDB Binlog來實現(xiàn)主集群-->災備集群的增量數(shù)據(jù)同步。數(shù)據(jù)全量初始化采用Dumpling + TiDB Lightning工具。
具體實施過程如下:
一、災備集群部署
災備集群搭建方案,采用與主集群1:1的方式進行部署,直接用現(xiàn)生產(chǎn)環(huán)境集群拓撲文件進行部署,部署完成后建用戶并賦權,具體過程不再贅述。
二、主集群擴容pump
編輯生產(chǎn)集群擴容pump所需拓撲文件,內(nèi)容如下
編輯完成后,執(zhí)行擴容命令
擴容完成后,最終會輸出如下內(nèi)容

三、開啟主集群Binlog功能
執(zhí)行edit-config命令,修改集群配置:
在server_configs下TiDB部分,添加如下配置

編輯完成后,reload tidb節(jié)點使配置生效
reload完成后,會輸出如下內(nèi)容

四、主集群調整GC時間
登錄數(shù)據(jù)庫,執(zhí)行如下sql:
sql返回執(zhí)行成功后,再次執(zhí)行select @@tidb_gc_life_time;,查詢結果輸出為6h或360m,即為調整成功。
五、使用dumpling工具并將生產(chǎn)數(shù)據(jù)全量導出
導出完成后,日志最終會輸出["dump data successfully, dumpling will exit now"]字樣,如下圖所示:

六、將導出數(shù)據(jù)目錄上傳至災備服務器,進行全量導入
第一步,使用lightning工具將數(shù)據(jù)全量導入
以下為運行l(wèi)ightning所需配置文件,因導入數(shù)據(jù)量大,建議開啟斷點
第二步,開始導入
導入完成后,日志會輸出["tidb lightning exit"],如圖:

七、災備集群擴容pump
編輯擴容pump所需配置文件
上傳完成后,執(zhí)行如下命令擴容
擴容完成后,最終會輸出如下內(nèi)容

八、災備集群開啟Binlog功能
執(zhí)行edit-config命令,修改集群配置文件
在server_config下tidb部分,添加如下配置

修改完成后,reload tidb節(jié)點使配置生效
reload完成后,會輸出如下內(nèi)容

九、生產(chǎn)集群與災備集群新建Drainer用戶并授權
分別登錄生產(chǎn)和災備數(shù)據(jù)庫,執(zhí)行如下SQL,創(chuàng)建Drainer用戶并授權
以上sql均返回成功后,執(zhí)行show grants for 'drainer'@'%';確認drainer用戶權限包含Insert、Update、Delete、Create、Drop、Alter、Execute、Index、Select、Create View權限。
十、災備集群擴容Drainer(本地記錄Binlog,實現(xiàn)增量備份)
編輯擴容Binlog所需配置文件
編輯完成后,執(zhí)行如下命令擴容
擴容完成后,最終會輸出如下內(nèi)容

十一、主集群擴容Drainer
編輯擴容Drainer所需配置文件
dumpling導出metadata中Pso查看方式:
導出數(shù)據(jù)目錄中$/dumpdir ,會有一個metadata的文件,執(zhí)行cat命令即可查看該文件中Pso,如圖所示:

編輯完成后,執(zhí)行如下命令擴容
擴容完成后,最終會輸出如下內(nèi)容:

十二、檢驗同步鏈路是否搭建成功
分別訪問集群監(jiān)控(10.3.31.1:3000、10.3.31.101:3000),查詢grafana監(jiān)控面板中tidb-test-binlog-->drainer界面,如圖:

checkpoint正常推進,代表drainer同步鏈路正常工作。
在生產(chǎn)庫新建test表或在原有test表中插入數(shù)據(jù),在災備庫進行查詢,如生產(chǎn)庫執(zhí)行的DDL或DML在災備庫能夠查詢到,證明生產(chǎn)庫增量數(shù)據(jù)可通過同步鏈路同步至災備庫,生產(chǎn)-->災備數(shù)據(jù)同步鏈路搭建成功。
十三、GC時間調整回原配置
登錄數(shù)據(jù)庫,執(zhí)行如下SQL:
sql返回執(zhí)行成功后,再次執(zhí)行select @@tidb_gc_life_time;,查詢結果輸出為1h或10m,即為調整成功。
至此TiDB Binlog搭建的集群數(shù)據(jù)同步鏈路搭建完成,數(shù)據(jù)同步成功。
部署過程中,需要注意的是drainer的initial-commit-ts參數(shù),只能在部署的時候配置,無法在已有drainer節(jié)點上進行配置。后續(xù)運維過程中,需額外關注Skip Binlog Count監(jiān)控指標,防止出現(xiàn)TiDB 寫入 Binlog 失敗的情況,如出現(xiàn)TiDB 寫入 Binlog 失敗,需及時進行處理。
各位路過大佬如果有相關方案及操作步驟改進建議,歡迎進群討論。
