摘要:本文通過介紹雙集群的架構、log結構、分析步驟來介紹雙集群容災的問題分析方法。
本文分享自華為雲社區《從原理到實踐,手把手帶你輕松get數倉雙集群容災》,原文作者:Puyol 。
雙集群原理
GaussDB(DWS) 的容災方案是一個雙集群同步的架構,即兩套獨立集群定期同步數據以達到容這的目的。目前數據同步的方式是通過roach(GaussDB(DWS)備份、恢復工具)定期做增量備份和恢復同步。雙集群框架是一個復雜的分布式系統,在出現問題時,如何快速准確的定位問題及恢復服務是一個非常緊迫的問題,這個問題在雲上會更突出。本文通過介紹雙集群的架構、log結構、分析步驟來介紹雙集群容災的問題分析方法。
首先介紹一下雙集群的部署方案原理,從部署架構和重要參數兩個方面先介紹一下背景知識,便於更好理解問題分析的方法。
架構簡介
1. 邏輯架構示例
下圖是一個同構的雙集群部署示意圖,主備集群都是3c3d, 主集群的主結點部署雙集群框架腳本,定期進行備份操作,備集群的主結點定期恢復備份集。基礎數據需要進行一全量備份,之后增量備份。
2. 部署架構
下圖是接上圖的部署架構,涉及雙集群同步腳本(SyncDataToStby.py), 備份程序(GaussRoach.py, gs_roach)三個二進制文件
備份側調用關系:SyncDataToStby.py -> GaussRoach.py -> gs_roach
恢復側調用關系:SyncDataToStby.py -> GaussRoach.py -> gs_roach
了解調用關系和咱們分析問題有直接的關系。
SyncDataToStby.py 是整個雙集群的調用起始,控制着雙集群的正常運行,正常情況下是長駐內存的進程,如果異常退出后,后台會有crontab的來重新拉起雙集群腳本: crontab -> SyncDataToStby.py -> GaussRoach.py -> gs_roach
主要參數簡介
問題定位
眾所周知,系統的各種log是我們了解運行機制,了解問題現場的有力工具,同樣雙集群的問題分析也依賴於log的分析,首先認識一下雙集群對應的日志:
log 目錄結構
由上節的邏輯圖及部署圖,每個二進制對應的log文件如下圖所示,對應二進制的信息查找對應的log。
如上圖,雙集群的日志也是存放到$GAUSSLOG這個目錄,並且有自己獨立的目錄 roach, 由這個目錄同樣是備份/恢復的對應的log路徑。我們按調用關系從上到下的角度來介紹
1. frame目錄
存放 SyncDataToStby.py 生成的log,涉及到雙集群調度,備份集清理,狀態顯示,配置文件及命令行參數解析的功能。
2. controller目錄
存放 GaussRoach.py 生成的log,涉及到備份、恢復准備工作一些操作,備份、恢復參數解析,備份集群的處理,錯誤處理等
3. agent目錄
存放 gs_roach工具 生成的log,涉及到gs_roach 連接gaussdb/gtm/cm發起備份/恢復,生成備份集/恢復備份集等操作。
gs_roach工具功能:在備份側完成將cn/dn/gtm/cm的數據文件按順序打包成備份文件的功能,並生成備份集元信息文件; 恢復側根據元信息文件將備份集文件解壓到對應cn/dn/gtm/cm的數據目錄中。
定位步驟
1. 確定問題在備份側還是恢復側,查找雙集群主結點上Sync日志,確定出錯的模塊
2. 確定出錯的層次,由於雙集群執行過程是一個上下層調用及時序關系的方式,具體順序參考:
crontab -> SyncDataToStby.py -> GaussRoach.py -> gs_roach
3. 在各個模塊都有較詳細的日志描述過程,具體問題具體分析,大體有如下幾個方面
1)配置出錯,用戶、環境變量文件
2)備份集群路徑權限問題
3)由於集群狀態非Normal導致備份失敗
4)結點故障及備份集損壞導致恢復失敗
4. 后續文章會按模塊及錯誤類型來詳細描述問題定位步驟
小結
GaussDB(DWS)的雙集群容災功能是一個獨立的復雜的分布式系統,涉及到三層工具的使用,因此在問題定位時會造成一些困惑。定位的方法需要先去理解架構,運行機制,然后根據時序關系去對應結點分析日志。后續會從各個模塊的角度介紹一些典型的問題及修復方法。
想了解GuassDB(DWS)更多信息,歡迎微信搜索“GaussDB DWS”關注微信公眾號,和您分享最新最全的PB級數倉黑科技,后台還可獲取眾多學習資料哦~