引言
IBM DB2 Universal Database (UDB) Enterprise Server Edition V8.2 引入了一種新的稱為高可用性災難恢復 (HADR) 的高可用性功能,它通過將數據從主要數據庫復制到備用數據庫為其客戶端應用程序提供了一種故障轉移功能。這使得客戶端應用程序可以方便地從部分或完全災難中恢復過來。另外,DB2 HADR 還與自動客戶端路由 (ACR) 功能相關聯,使災難恢復行為對其客戶端應用程序實際上是透明的。
例如,IBM WebSphere Application Server Network Deployment (ND) V6.1 使用 DB2 來存儲其應用程序的持久性數據。WebSphere Application Server 應用程序只需要與主要數據庫進行連接即可。為了在備用服務器上保持數據庫的一個同步副本,系統會一致地將 DB2 HADR 日志文件從主要服務器發(fā)送到備用服務器來保持二者的同步。當主要服務器脫機時(計劃內或計劃外停機),備用服務器將聯機代替其工作。在啟用自動客戶端重新路由功能時,DB2 重新路由邏輯將檢查是否可以找到備用服務器。如果可以找到,重新路由功能將首先重新嘗試連接失敗的主要服務器,如果該操作失敗,重新路由將嘗試連接替代的備用服務器。這時,WebSphere Application Server 就會與備用服務器重新建立連接,并將回滾事務,然后在備用服務器上重新發(fā)布。整個 DB2 HADR 故障轉移過程對 WebSphere Application Server ND 應用程序是透明的。
DB2 HADR 和自動客戶端重新路由功能使得其客戶端應用程序可以從發(fā)生故障的數據庫服務器中恢復過來,最大限度地減少了中斷時間。本文介紹使用 WebSphere Application Server ND V6.1 作為客戶端應用程序并利用 DB2 HADR 和自動客戶端重新路由功能構建高可用性數據庫環(huán)境的步驟。
DB2 HADR 準備工作
DB2 HADR 要求
在將 DB2 和 HADR 用作 WebSphere Application Server 應用程序數據存儲庫之前,您需要了解對主要 DB2 服務器和備用 DB2 服務器的下列基本要求:
- 需要完全相同的操作系統和 DB2 版本。
- 必須使用相同的容器文件系統和安裝路徑,例如 /home/db2inst1/sqllib。
- 如果通過引用方式使用 HADR 功能,則需要指定 HADR 的通信端口:
- 對于 UNIX® 或 Linux®:/etc/services
- 對于 Windows®:c:\windows\system32\drivers\etc\services
- 主要服務器和客戶端應用程序應能夠通過 TCP/IP 連接到備用服務器計算機。
DB2 HADR 設置
現在我們將了解,在設置 DB2 HADR 主要服務器和備用服務器時都涉及哪些內容:
- 在主要計算機和備用計算機上安裝 DB2 UDB Enterprise Server Edition。在兩臺計算機上都啟動 DB2 服務器,如果尚未運行,則在主要計算機上創(chuàng)建數據庫和所需的表。為了便于說明,我們將使用“Sample”作為數據庫名稱。(有關詳細的安裝信息,請參見 DB2 信息中心。)
- 接下來,為主要計算機和備用計算機上的每個數據庫確定 TCP/IP 連接通信端口(按照常規(guī)的客戶端/服務器數據庫連接)。端口名是用戶定義的,端口號可以是任意數字,只要沒有沖突就行。不要求主要服務器和備用服務器上的端口相同;不過,如果保持這兩臺計算機上的端口相同,則配置起來將會非常方便。對于 Sample 數據庫,我們在主要服務器和備用服務器上使用了兩個端口(51012 和 51013):
清單 1. 用于“Sample”數據庫的兩個 HADR 端口
>more /etc/services # HADR ports assigned by user ha_sample 51012/tcp ha_sample_int 51013/tcp |
您需要編輯 /etc/services 文件 (UNIX/Linux) 或 c:\windows\system32\drivers\etc\services (Windows) 來指定端口。(注意,只有管理員帳戶才能夠編輯這些文件。)
為主要計算機上的每個數據庫配置 HADR 變量。(此處顯示的步驟僅適用于主要計算機。)必須對每個數據庫重復此過程。在設置這些變量時,請驗證 hard_local_host 和 hard_remote_host 變量是否引用了正確的計算機。而且,hadr_local_svc 和 hadr_remote_svc 變量必須與上述 /etc/services 文件中定義的名稱相匹配。下面我們以“Sample”數據庫為例進行說明:
清單 2. Sample 數據庫的 HADR 變量
>db2 update db cfg for Sample using hadr_local_host >db2 update db cfg for Sample using hadr_remote_host >db2 update db cfg for Sample using hadr_local_svc ha_sample >db2 update db cfg for Sample using hadr_remote_svc ha_sample_int >db2 update db cfg for Sample using hadr_remote_inst >db2 update db cfg for Sample using hadr_timeout 120 >db2 update db cfg for Sample using hadr_syncmode nearsync >db2 update db cfg for Sample using logretain on >db2 update db cfg for Sample using LOGINDEXBUILD on >db2 update alternate server for database Sample using hostname port 60000 |
上例中,NEARSYNC 被選為同步模式。此模式雖然比 SYNC 模式提供較少的事務丟失保護,但比 SYNC 模式的事務響應時間要短一些。注意,清單 2 中的最后命令可以為 DB2 HADR 啟用自動客戶端重新路由功能,并且端口 60000 是備用計算機上的 DB2 實例端口號。