DB2 HADR 配置示例

介紹數據庫

  DB2HA能夠在OS級別使用專門的HA來實現,也可以使用DB2內置的HADR來實現,且配置和管理很簡單。服務器

  一個HADR環境須要兩臺數據庫服務器:主數據庫服務器(primary)和備用數據庫服務器(standby,處於standby角色的數據庫不可以被訪問)。當主數據庫中發生事務操做時,會同時將日誌文件經過TCP/IP協議傳送到備用數據庫服務器,而後備用數據庫對接受到的日誌文件進行重放(Replay),從而保持與主數據庫的一致性。當主數據庫發生故障時,備用數據庫服務器能夠接管主數據庫服務器的事務處理。此時,備用數據庫服務器做爲新的主數據庫服務器進行數據庫的讀寫操做,而客戶端應用程序的數據庫鏈接能夠經過自動客戶端從新路由(Automatic Client Reroute)機制轉移到新的主服務器。當原來的主數據庫服務器被修復後,又能夠做爲新的備用數據庫服務器加入HADR。經過這種機制,DB2 UDB實現了數據庫的災難恢復和高可用性,最大限度的避免了數據丟失。異步

 

clip_p_w_picpath001

 

 

同步方式tcp

primarystandby 的參數HADR_SYNCMODE用來設置日誌的同步方式,參數的設置將取決於DB在事務的響應時間和事務丟失的可能性之間的平衡。ide

SYNC:primarystandby DB日誌均確認寫入成功才認爲日誌寫入成功。spa

NEARSYNC:primary DB日誌寫入成功,standby DB確認接收到日誌即認爲日誌寫入成功。操作系統

ASYNC(異步):primary DB日誌寫入成功,並將日誌發送出去以後即認爲日誌寫入成功。rest

 

自動客戶端從新路由(automatic client reroute) 日誌

db2 UPDATE ALTERNATE SERVER FOR DATABASE testdb USING HOSTNAME 172.16.72.11 PORT 60000 xml

#此命令用來在primarystandby DB上設置備用數據庫信息.

#ACR 不使用HADR_REMOTE_HOST 和 HADR_REMOTE_SVC 數據庫配置參數

 

 

 

DB2 HADR的使用限制

  1. 只有DB2 UDB Enterprise Server EditionESE)支持HADR,但HADR不能支持分區數據庫(Database Partitioning FeatureDPF)。

  2. 主數據庫和備用數據庫必須運行在相同的操做系統版本上,而且DB2 UDB的版本也必須一致,除非短暫的軟件升級過程。

  3. 主數據庫和備用數據庫的位大小必須一致(32位或64位)。

  4. 不能在備用數據庫上進行備份操做

  5. 備用數據庫是不能訪問的,客戶端程序沒法鏈接備用數據庫。

  6. 日至歸檔操做只能在主數據庫上進行。

  7. 帶有COPY NO選項的LOAD命令是不支持的

  8. 主數據庫和備用數據庫必須是一對一的。

  1. HADR不能使用循環日誌

  2. HADR不復制數據庫配置參數、共享庫、DLLsUDFs或存儲過程

 

 

HADR操做

啓動和中止

db2 start HADR on db testdb user a3intest using passwd as standby

 

db2 start HADR on db testdb as primary [by force]

#若是在HADR_TIMEOUT所指定的時間內未能創建與備用數據庫HADR的鏈接,啓動會失敗,使用by force 選項能夠在啓動失敗時強行啓動。

 

db2 deactivate db testdb

db2 stop hadr on db testdb

#stop HADR on standby

 

db2 stop hadr on db testdb

#stop HADR on primary

 

 

查看HADR的鏈接狀態

當備用數據庫的HADR啓動時,它首先進入本地同步更新狀態。並根據本地日誌路徑配置參數及日誌歸檔方法的設置檢索本地系統中的日誌文件並重放。當本地日誌文件重放完畢,備用數據庫進入遠程同步暫掛狀態。當與主數據庫創建鏈接以後,備用數據庫進入遠程同步更新狀態。即主數據庫將本身的日誌文件經過TCPIP協議發送給備用數據庫,備用數據庫接收到日誌文件並重放,直到全部日誌文件都重放完畢,備用數據庫和主數據庫進入對等狀態

 

db2 get snapshot for db on testdb

#能夠查看primary,standby數據庫的鏈接狀態

db2 get db cfg | grep -i hadr

#查詢數據庫HADR的相關配置

 

接管/故障轉移

當主數據庫發生故障時,備用數據庫能夠接管主數據庫的服務,成爲新的主數據庫(稱爲故障轉移)。當原主數據庫修復後,又能夠做爲備用數據庫加入HADR對。即便主數據庫服務器沒有故障,咱們經過接管命令(TAKEOVER)切換主數據庫和備用數據庫的角色。

db2 takeover HADR on db test by force

#primary DB故障時緊急接管,takeover命令只運行在standby DB上。

db2 takeover HADR on db testdb

#普通接管

 

 

配置示例

hostname:primary.ade.com

IP:172.16.72.11

OS:RHEL7.0

package:db2 V10.1FP4 ESE

instance:a3intest

port:60000

db:testdb

 

hostname:standby.ade.com

IP:172.16.72.12

OS:RHEL7.0

package:db2 V10.1FP4 ESE

instance:a3intest

port:60000

db:testdb (restored from primary)

 

 

 

#primary & standby

DB2_a1intest        60000/tcp  (/etc/services)

db2set db2comm=tcpip

db2 update dbm cfg using svcename DB2_a3intest

 

##make sure the following port is available for HADR.

echo "DB2_HADR_1      61001/tcp" >> /etc/sevices

echo "DB2_HADR_2      61002/tcp" >> /etc/sevices

 

#歸檔日誌

db2 update db cfg for testdb  using logarchmeth1 logretain

 

##索引日誌記錄參數

db2 UPDATE DB CFG FOR testdb USING LOGINDEXBUILD ON

db2 UPDATE DB CFG FOR testdb USING INDEXREC RESTART

 

 

##primary

db2 UPDATE ALTERNATE SERVER FOR DATABASE testdb USING HOSTNAME 172.16.72.12 PORT 60000

db2 UPDATE DB CFG FOR testdb USING HADR_LOCAL_HOST 172.16.72.11

db2 UPDATE DB CFG FOR testdb USING HADR_LOCAL_SVC DB2_HADR_1

db2 UPDATE DB CFG FOR testdb USING HADR_REMOTE_HOST 172.16.72.12

db2 UPDATE DB CFG FOR testdb USING HADR_REMOTE_SVC DB2_HADR_2

db2 UPDATE DB CFG FOR testdb USING HADR_REMOTE_INST a3intest

db2 UPDATE DB CFG FOR testdb USING HADR_SYNCMODE NEARSYNC

db2 UPDATE DB CFG FOR testdb USING HADR_TIMEOUT 120

db2 CONNECT TO testdb

db2 QUIESCE DATABASE IMMEDIATE FORCE CONNECTIONS

db2 UNQUIESCE DATABASE

db2 CONNECT RESET

 

##backup db on primary

db2 backup db testdb to /db/a3intest/db2backup

 

##restore db on standby

db2 restore db testdb from /db/a3intest/db2backup/ taken at 20150203203651 replace history file without prompting

 

##standby

db2 UPDATE ALTERNATE SERVER FOR DATABASE testdb USING HOSTNAME 172.16.72.11 PORT 60000

db2 UPDATE DB CFG FOR testdb USING HADR_LOCAL_HOST 172.16.72.12

db2 UPDATE DB CFG FOR testdb USING HADR_LOCAL_SVC DB2_HADR_2

db2 UPDATE DB CFG FOR testdb USING HADR_REMOTE_HOST 172.16.72.11

db2 UPDATE DB CFG FOR testdb USING HADR_REMOTE_SVC DB2_HADR_1

db2 UPDATE DB CFG FOR testdb USING HADR_REMOTE_INST a3intest

db2 UPDATE DB CFG FOR testdb USING HADR_SYNCMODE NEARSYNC

db2 UPDATE DB CFG FOR testdb USING HADR_TIMEOUT 120

 

db2 update db cfg for testdb  using logarchmeth1 logretain

db2 UPDATE DB CFG FOR testdb USING LOGINDEXBUILD ON

db2 UPDATE DB CFG FOR testdb USING INDEXREC RESTART

 

 

#start HADR on standby

db2 deactivate db testdb

db2 start hadr on db testdb as standby

 

 

#start HADR on primary

db2 deactivate db testdb

db2 start hadr on db testdb as primary

 

##HADR status

 

db2pd -db testdb -hadr

##HADR_STATE = PEER 表示鏈接正常

 

db2 get snapshot for db on testdb

##能夠查詢HADR的鏈接狀態

 

##stop HADR

#primary

db2 stop hadr on db testdb

#standby

db2 deactivate db testdb

db2 stop hadr on db testdb

 

##test HADR

#primary:

db2 connect to testdb

db2 "CREATE TABLE HADRTEST(ID INTEGER NOT NULL WITH DEFAULT,NAME VARCHAR(10),PRIMARY KEY (ID))"

db2 "INSERT INTO HADRTEST (ID,NAME) VALUES (1,'a')"

db2 "INSERT INTO HADRTEST (ID,NAME) VALUES (2,'b')"

db2 "INSERT INTO HADRTEST (ID,NAME) VALUES (3,'b')"

##standby

db2 takeover hadr on db testdb

db2 get snapshot for db on testdb

db2 connect to testdb

db2 "select * from hadrtest"

相關文章
相關標籤/搜索