首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 高可用性災難恢復 (HADR) 實戰:從架構原理到異地雙機建置全攻略

     編輯:DB2 教學

HADR 核心架構與運作模式

HADR (High Availability Disaster Recovery) 屬非同步 HA 叢集,採「主庫+備庫」雙副本架構,透過交易日誌傳送與重放 (Replay) 維持資料一致:

  • Primary:服務讀寫請求,捕獲日誌經 TCP/IP 傳送。
  • Standby:接收日誌重放,平常不對外服務;Primary 故障時接管 (Takeover) 升為新 Primary。
  • Client 自動重導向:DB2 Client 連接時同步取得 Standby 連線資訊,Primary 掛點自動轉連 Standby,應用無感知。

HADR 工作原理

Standby 狀態機:從啟動到對等

Standby 狀態遷移

  1. Local Catch-up:啟動後重放本地日誌。
  2. Remote Catch-up Pending:嘗試連線 Primary。
  3. Remote Catch-up:接收並重放 Primary 傳來的日誌。
  4. Peer:雙方同步,Primary 每次 Commit 同步寫入 Standby 日誌 (視同步模式)。

Client 自動重導向流程

Client 自動重導向

  1. 應用透過 Client 連 Primary。
  2. Client 取得 Standby 連線參數 (Alternate Server)。
  3. Primary 故障 → Client 連線逾時。
  4. Client 自動重試 Standby。
  5. Standby 重放剩餘日誌 → 轉為 Primary。
  6. Standby 處理請求並回應。
  7. 應用無感知完成切換。

實戰部署:CentOS 5.2 + DB2 V9.5 (32-bit)

前置條件

  • 雙機同硬體、同 OS 版本、同 DB2 版本/修補包。
  • 資料庫容器、表空間、日誌大小、緩衝池完全一致。
  • 網路互通,預留 HADR 專用通訊埠。

步驟詳解

  1. 建立實例與資料庫 (Primary):
    useradd -u 505 -g db2iadm1 -m -d /home/db2hadr db2hadr
    db2icrt -u db2fenc1 db2hadr
    su - db2hadr
    db2start
    db2 create database HADB
    
  2. 啟用歸檔日誌並備份:
    db2 update db cfg for HADB using logretain on
    db2 backup database HADB to /mnt/hgfs/share
    # 記錄時間戳 20090201125734
    
  3. 還原至 Standby:
    scp /mnt/hgfs/share/HADB.0.db2hadr.NODE0000.20090201125734.001 Standby:/mnt/hgfs/share/
    su - db2hadr
    db2start
    db2 restore database HADB from "/mnt/hgfs/share" taken at 20090201125734 replace history file
    
  4. 設定 Client Alternate Server:
    # Primary 上
    db2 update alternate server for database HADB using hostname 192.168.189.129 port 50000
    # Standby 上
    db2 update alternate server for database HADB using hostname 192.168.189.128 port 50000
    
  5. 配置 /etc/services 註冊 HADR 通訊埠 (雙機同設):
    DB2_HADR_1 55001/tcp
    DB2_HADR_2 55002/tcp
    
  6. Primary HADR 參數:
    db2 update db cfg for HADB using HADR_LOCAL_HOST 192.168.189.128
    db2 update db cfg for HADB using HADR_LOCAL_SVC DB2_HADR_1
    db2 update db cfg for HADB using HADR_REMOTE_HOST 192.168.189.129
    db2 update db cfg for HADB using HADR_REMOTE_SVC DB2_HADR_2
    db2 update db cfg for HADB using HADR_REMOTE_INST db2hadr
    db2 update db cfg for HADB using HADR_SYNCMODE NEARSYNC
    db2 update db cfg for HADB using HADR_TIMEOUT 120
    db2 connect to HADB
    db2 quiesce database immediate force connections
    db2 unquiesce database
    db2 connect reset
    
  7. Standby HADR 參數 (LOCAL/REMOTE 對調):
    db2 update db cfg for HADB using HADR_LOCAL_HOST 192.168.189.129
    db2 update db cfg for HADB using HADR_LOCAL_SVC DB2_HADR_2
    db2 update db cfg for HADB using HADR_REMOTE_HOST 192.168.189.128
    db2 update db cfg for HADB using HADR_REMOTE_SVC DB2_HADR_1
    db2 update db cfg for HADB using HADR_REMOTE_INST db2hadr
    db2 update db cfg for HADB using HADR_SYNCMODE NEARSYNC
    db2 update db cfg for HADB using HADR_TIMEOUT 120
    
  8. 啟動 HADR (先 Standby 再 Primary):
    # Standby
    db2 deactivate database HADB
    db2 start hadr on database HADB as standby
    
    # Primary
    db2 deactivate database HADB
    db2 start hadr on database HADB as primary
    

同步模式選擇指南

模式Primary Commit 等待條件資料損失風險效能影響
SYNC日誌寫入 Standby 本地並回報零最高延遲
NEARSYNC日誌進入 Standby 作業系統緩衝區極低 (Standby OS 崩潰才遺失)中等
ASYNC日誌送出網路即返回網路緩衝區內資料可能遺失最低
SUPERASYNC不等待,獨立發送最高無

本範例採 NEARSYNC 平衡可用性與效能。

驗證與故障切換測試

  1. db2 get snapshot for db on HADB 確認 Primary/Standby 角色與 Peer 狀態。
  2. Primary 建立測試表並插入資料。
  3. Standby 執行 db2 takeover hadr on database HADB 強制接管。
  4. 再次 snapshot 確認角色互換。
  5. 連線新 Primary 查詢測試資料,驗證零資料遺失。

Primary HADR 狀態 Standby HADR 狀態

管理維護要點

  • 監控指標:HADR_STATE、HADR_LOG_GAP (日誌差距)、PRIMARY_LOG_TIME vs STANDBY_LOG_TIME。
  • 計畫性切換:TAKEOVER HADR ON DATABASE ... (不加 BY FORCE) 讓 Primary 正常關閉後再切換。
  • 故障後重建:原 Primary 修復後,以 Standby 身分加入 (START HADR AS STANDBY),再視需求切回。
  • 日誌保留:確保 Primary LOGRETAIN=ON 且檔案系統空間足夠,防止 Standby 追不上需重新初始化。

結語

HADR 以資料庫原生複寫取代共享存儲,消除單點故障,支援異地部署,並提供 Client 透明故障轉移。配合 NEARSYNC 模式與自動重導向,可在毫秒級 RTO 內實現近乎零 RPO 的高可用與災難恢復,是 DB2 企業級部署的核心能力之一。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved