DMHS原理和故障處理


DMHS原理

達夢數據實時同步軟件 DMHS 是達夢推出的新一代支持異構環境的高性能、高可 靠和高可擴展的數據庫實時同步系統。

優點

  1. 高可擴展性:根據需求靈活配置(一對一、一對多、多對一、多對多),滿足用戶的各種復雜數據同步需求。
  2. 高可用性:采用基於日志的結構化數據同步技術,實時數據同步不依賴主機上 源數據庫的觸發器或者規則,對主機源數據庫系統幾乎無影響。主機故障時,可快速切換至備機,及時接管業務。
  3. 實時同步:並行處理,能夠及時讀取源庫日志,以較低的資 源占用實現大批量的數據實時同步。
  4. 高可靠性:以源數據庫的事務為單位,保障備機數據庫與主機數據庫的事務級完整性和一致性。

DMHS組成

DMHS三大主要模塊:日志分析(CPT)、數據入庫(EXEC)和消息發 送(NET)。這三個模塊統一由管理模塊(MGR)進行調度執行。

  1. CPT
    對源數據庫日志進行解析,提取數據的變化如插入(INSERT)、 刪除(DELETE)、修改(UPDATE)和對像操作(DDL)等信息,包裝后投遞給消 息發送(NET)模塊。
  2. NET
    • NET 消息發送子模塊:對CPT投遞的信息進行分發,分發前可以對操作進行過濾,或者對表進行過濾和映射,還可以對消息中的列進行映射(如改名、剔除和函數計算)。經過處理的消息通過網絡(TCP/IP)發送給下一級NET,或保存在本地。
    • NET 消息接收子模塊:通過網絡傳輸的消息, NET 消息接收子模塊通 過網絡(TCP/IP)接收並發送給 EXEC 模塊。上一級NET模塊保存在本地的文件,NET 消息接收子模塊讀取本 地文件並發送給 EXEC 模塊,或通過 FTP 服務器下載數據,並發送給 EXEC 模塊。
  3. EXEC
    EXEC 模塊接收到 NET 接受子模塊發來的消息,把這些消息按事務分類,如果某個事 務上收到了提交消息則構造相應的 SQL,使用 ODBC 驅動接口對這些數據進行入庫;如 果某個事務在源端回滾,則直接丟棄不執行。
  • 捕獲器:數據實時同步系統中負責讀取、解析源端數據庫管理系統的歸檔日志,並發送解析后的 數據。捕獲器將源端數據庫日志讀取解析后發送出去,它必須與源端數據庫在同一台機器上。 捕獲器由 MGR 模塊、CPT 模塊、NET 發送子模塊組成,NET 發送子模塊不能單獨存在,必須由 CPT 模塊調用。
  • 執行器: 執行端是數據實時同步服務系統中數據入庫(目標端數據庫)的執行端。執行器將接收到的數據入庫執行,它可以與目標端數據庫處於不同機器。執行器由 MGR 模塊、EXEC 模塊、NET 接收子模塊組成,NET 接收子模塊不能單獨存在,必須由 EXEC 模塊調用。
  • 路由器:數據實時同步系統中負責傳輸數據在網絡中的路由。 路由器一般配置在第三台機器上,對捕獲器中 CPT 模塊和執行器中的 EXEC 模塊進行 映射,從而實現跨網關同步。路由器由 MGR 模塊、NET 接收子模塊、NET 發送子模塊組成,NET 接收子模塊和 NET 發送子模塊由 MGR 模塊調度,從而實現路由功能。
  • 轉發器:數據實時同步系統中負責傳輸數據的過濾及轉發。

調度管理MGR

MGR根據配置文件加載啟動捕獲器功能、執行器功能、 轉發器功能或路由功能。當 MGR 啟動捕獲器功能時,MGR 會調度 CPT 模塊和 NET 模塊 (發送子模塊);當啟動執行器功能時,會調度 NET 模塊(接收子模塊)和 EXEC 模塊; 當啟動轉發器或路由器功能時,會調度 NET 模塊(接收子模塊和發送子模塊)。
image
配置參數解析:dmhs.hs(bin目錄下配置),啟用相關模塊就解析相關配置

CPT

CPT 模塊在啟動時,會利用 NET 模塊,向對端發送獲取起始 LSN 的命令。CPT 模塊找 到起始 LSN 對應的交易日志位置,從該位置開始讀取交易日志進行分析。起始 LSN 表示該 LSN 之前的所有事務都已經同步到目標端。隨着 DMHS 同步的進行,起始 LSN 會向后推移。
CPT 模塊在抽取增量數據時,並不能根據交易日志,還原源端數據庫的 SQL 操作,但 可以實現源端數據庫 SQL 操作的同等操作。對於 DML 操作,CPT 模塊以數據行為單位, 對交易日志進行解析;對於 DDL,CPT 模塊以單個 DDL 動作為單位,對交易日志進行解析。
離線字典是 CPT 模塊進行交易日志分析的基礎,也是實現離線分析的基礎,當一個表 的離線字典不存在時,源數據庫中該表的所有操作都會被過濾掉。

NET

NET 模塊是各個功能模塊之間連接通信、信息交換與傳輸的工具,包括以下功能:

  1. 表操作的過濾:同步過程中,NET 模塊會根據配置,對同步的數據進行判斷,如 果不滿足黑名單條件且滿足白名單條件,則將消息發送到目標端,否則,直接丟棄。
  2. 列值轉換及過濾:同步過程中,當需要對表數據進行轉換,NET 模塊會根據原始 數據,計算轉換后的數據,並對消息數據重新填充;當需要對表中特定數據進行過濾/篩選 時,NET 模塊會對原始數據進行判斷,是否需要進行傳輸。
  3. 消息的本地存儲:NET 模塊可將接收到的 DMHS 消息進行本地存儲,本功能在網 絡環境不穩定的環境中,可最大限度的保證增量數據不丟失。
  4. 消息的本地讀取:NET 模塊可從本地存儲中讀取 DMHS 消息,發送到目標端。
  5. 消息的 FTP 遠程讀取:NET 模塊可從遠程 FTP 服務器中讀取 DMHS 消息,發送到 目標端。
  6. 消息的發送及接收:DMHS 各站點之間數據的傳遞都是使用 NET 模塊完成的。

EXEC

        DMHS在數據同步時,源端不同數據庫的交易日志經過 CPT 的解析,封裝成統一的數 據格式,經過 NET 模塊一級級的投遞,最后投遞到 EXEC 模塊進行入庫處理,當 EXEC 模 塊把接收到的事務入庫以后,該事務的同步流程才算正式完成。EXEC 模塊通過 NET 的 RECV 模塊接收到源端的數據以后,需要對接收到的數據提取進行事務歸類,歸類過程中還 會涉及到大事務的緩存,部分回滾的處理,ORP 操作的轉換,組織大對像數據等復雜的處 理 。 在明確事務收到提交操作以后,再把提交的事務交由執行線程進行入庫處理。
        為了保證事務的完整性,EXEC 模塊在入庫事務時默認的情況下不會拆分事務,造成執 行線程之間會出現執行順序上的依賴關系。當同步環境對事務的完整性沒有嚴格要求時,便 可以啟用事務分裂功能(trx_split 參數配置為 1),把一個事務按表拆分成 N 個小事務。執 行線程在入庫時,會收集相同表操作的小事務並合並成大事務后再執行,這樣不同執行線程 之間操作的表互不影響,可以有效的提升執行線程入庫的並行度,達到提升同步性能的目的。 只是在這種同步模式下,目標端數據庫中的數據在單個時間節點上和源端數據表的數據分布 是不同的,待所有事務同步完成以后,兩邊數據庫的數據最終會保持一致。

DMHS故障排查

  1. CPT模塊或EXEC模塊啟動失敗時,檢查是否將數據庫bin目錄添加到LD_LIBRARY_PATH環境變量中

  2. 源端執行start cpt時無法獲取LSN:
    a. 檢查源端和目的端網絡是否連通。
    b. 檢查dmhs.hs中send配置的目的端ip或端口是否錯誤。
    c. 目的端是否執行start exec,EXEC模塊是否成功加載。

  3. LSN定位失敗,一般是源端數據庫的歸檔文件被誤刪造成的,執行端 DMHS_TRXID_TABLE 中 TID 為 0 的記錄中 SEQID 的值修改為源端對應歸檔文件的最小 LSN,重啟目標端和源端的 DMHS,同 步會從源端第一個歸檔開始重新同步。

  4. CPT 啟動無響應 出現這種問題的可能性有很多,下面幾種最常見:
    a. 目標端中存在大量待執行的事務,需要等它們執行完。
    b. 目標端的 DMHS_TRXID_TABLE 中存在大量的記錄。
    c. 源端數據庫存在大量的歸檔文件,CPT 啟動會收集這些歸檔。
    d. 源端的歸檔或在線單個日志文件過大,CPT 定位時會掃描定位到的日志文件。
    e. 歸檔文件不連續,當出現某個歸檔文 件丟失的情況下,CPT 在定位 LSN 或是解析日志過程中就會被阻塞。

  5. 同步阻塞時:
    a. 檢查是否是事務阻塞,查詢相應的鎖等待信息確認該問題。
    b. 檢查EXEC模塊線程狀態,判斷入庫效率是否低下,具體分析造成效率低下的原因。

  6. DDL 未同步時,檢查源端是否執行了創建觸發器的腳本,首先要檢查源端數據庫的輔助表 DMHS_DDL_SQL 是否記錄了事件觸發器捕獲到的 DDL SQL,如果沒有,則可能是數據庫 層面禁用了事件觸發器。

  7. RLOG_APPEND_LOGIC是靜態參數,源端開啟修改日志,修改參數后需要重啟數據庫服務。未重啟會卡在加載模塊那一步


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM