馬 騰
(福建省建設信息中心,福建 福州 350001)
福建省自1994年起實施住房公積金制度以來,住房公積金在健全城鎮住房供應和保障體系、加快解決中低收入家庭住房問題、促進住房消費、推動房地產市場持續健康發展等方面發揮了重要作用。
為了推動全省住房公積金管理的標準化、規范化和信息化,提高全省住房公積金管理的服務水平,2002年,省住建廳牽頭開發建設了福建省住房公積金業務處理信息系統,并在全省9個設區城市住房公積金管理中心和省直、鐵路、能源集團等3個行業住房公積金管理機構中推廣應用,大大提高了我省住房公積金管理信息化水平。
隨著住房公積金業務的快速發展和信息系統的推廣應用,住房公積金數據量越來越大,截止2011年10月底,全省住房公積金繳存人數230多萬人,繳存金額突破1200億元,數據安全已經成為亟待解決的重大問題。
為此,省住建廳決定建立全省住房公積金災備中心。數據庫遠程復制是災備中心建設的關鍵技術,由于全省住房公積金業務處理信息系統統一采用Informix數據庫,因此,基于Informix的數據庫復制技術是本文研究的重點。
數據庫遠程復制通常是指把數據從生產數據庫服務器復制到備份數據庫服務器,生產服務器和備份服務器分別位于不同的地點,二者通過TCP/IP建立連接,提供一種可靠、即時的容災備份機制。另外,由于生產服務器和備份服務器處于“雙活”狀態,因此用于備份的備份服務器可被用于進行一些查詢、統計等操作,提高數據的利用率,分擔生產服務器的負載。
Informix是IBM公司出品的關系數據庫管理系統(RDBMS)家族,作為一個集成解決方案,它被定位為作為IBM在線事務處理 (OLTP)旗艦級數據服務系統,在金融、電信、零售等行業廣泛使用。在數據復制方面,Informix數據庫系統提供了包括企業復制(Enterprise Replication,ER)和高可用性數據復制(High-Availability Data Replication,HDR)在內的強大數據復制解決方案。
*HDR (High-Availability Data Replication)高可用性數據復制技術
HDR是通過讀取數據庫事務日志的方式實現主、備機互相接管的功能,當主機工作時,備機提供只讀功能,因此,備機可以提供查詢、報表等功能,實現負載分擔的功能,當主機發生故障,備機會自動接管,實現主機及備機的接管功能。
*ER(Enterprise Replication)企業復制技術
ER也是通過讀取數據庫日志的方式實現數據同步功能,當源數據庫數據發生變化后,Informix數據庫通過讀取數據庫日志,將變化的數據及時同步到目標數據庫。
ER方式和HDR方式的不同在于HDR數據庫的接管是基于數據庫服務器的,也就是HDR的作用范圍是基于整個實例的,而ER的作用范圍是作用于一個表,ER方式可以靈活定義需要復制哪些數據列及數據行,而且可以靈活定義數據復制的方式,是采用主從方式、匯總方式還是雙向復制方式。
同時,HDR還要求主服務器和備份服務器的操作系統和硬件相同,添加到每個服務器的塊的磁盤布局必須相同,主服務器和備份服務器上的IDS的版本必須一樣,而ER就沒有上述要求。
因此,在遠程數據容災方式下,ER數據庫復制技術是更為主流的選擇,本文主要針對ER的研究。
IBM Informix Enterprise Replication是基于日志的異步工具,用在數據庫服務器之間復制數據,它可以跨平臺、跨IBM Informix Dynamic Server的各個版本使用,Enterprise Replication不需要在實例之間定義相同的儲存,甚至不需要使用相同的表結構和名稱。生產服務器上的Enterprise Replication通過讀取邏輯日志、存儲事務并將每個事務作為復制數據可靠傳輸至備份服務器來捕獲要復制的事務,備份數據庫服務器的Enterprise Replication接收復制數據中所包含的每個事務,并將其應用到對應的數據庫和表中,成為正常的已記錄事務。
生產數據庫服務器在把邏輯日志緩沖區中的內容寫往磁盤之前,先將其拷貝至數據復制緩沖區,數據復制緩沖區的內容通過TCP/IP經由網絡傳到備份數據庫服務器的數據復制緩沖區中,備份數據庫服務器中的數據接收線程接收數據復制緩沖區的內容并將其放入恢復緩沖區,數據復制線程根據這些上傳的邏輯日志記錄進行數據庫寫入操作,從而使備份服務器起到了對生產服務器進行數據備份的作用。
上述數據復制過程在異步方式下工作,生產數據庫的數據處理無需等待備份服務器的數據復制,因此,ER數據復制基本不影響生產服務器的業務處理性能。
ER支持兩種類型的復制系統:主-目標復制系統、隨處更新復制系統。在主-目標復制系統中,數據的復制是單向的,始終由生產服務器向備份服務器發送數據。在隨處更新復制系統中,在任何參與的數據庫服務器上進行的更改都被復制到所有其它參與的數據庫服務器。

ER靈活支持多種拓撲結構,適應多種數據復制方式。
福建省住房公積金業務處理信息系統采用分布式架構,在全省9個設區市住房公積金管理中心和省直、鐵路、能源集團等3個行業住房公積金管理機構進行部署,配置獨立的Informix數據庫服務器。福建省住房公積金數據災備中心采用基于Informix ER的數據庫遠程復制方式。
福建省住房公積金數據災備中心為全省12個住房公積金管理中心業務處理信息系統提供數據遠程災備。Informix ER支持多對一的數據庫復制,并可實現數據的實時復制,系統架構如下:

數據災備中心的數據庫復制拓撲采用集中星型(hub-spoke)拓撲:

數據復制采用主-目標復制模式,在該模式下,數據的復制是單向的,由各住房公積金管理中心的數據庫服務器發送數據,數據災備中心服務器只接收并寫入數據庫,如果數據災備中心服務器停止運行或網絡連接出現故障,各住房公積金管理中心服務器上的ER將持續記錄數據庫日志,一旦與數據災備中心數據庫連接恢復,將繼續進行數據復制。
數據災備中心Informix數據庫一直處于OPEN狀態,Informix ER通過接口將復制的數據實時寫入數據災備中心數據庫。當生產中心出現災難時,可由數據災備中心在短時間內恢復數據。
Informix ER數據復制操作只是讀取數據庫系統的日志文件,同時通過TCP/IP方式傳輸發生改變的數據,使得網絡負載降至最低,實際每小時傳輸的數據量不大于每小時日志文件的大小。
文件備份:
實施過程需要修改生產服務器(fz_refms)中部分參數或配置文件,故在修改這些參數前做需要做好下列文件的備份工作,以root登錄生產服務器。
cp /home/informix/etc/onconfig.refms /home/informix/etc/onconfig.refms.bak
cp/home/Informix/etc/sqlhost/home/Informix/etc/sqlhosts.bak
cp/etc/hosts/etc/hosts.bak
cp/etc/services/etc/services.bak
cp/etc/fstab/etc/fstab.bak
修改HOSTS文件:
在生產服務器上的/etc/hosts文件上添加:1.1.1.1 fjst
在備份服務器 (fjst)上的/etc/hosts文件上添加:
2.2.2.2 fz_refms
校準服務器時間:
采用NTP協議保證復制雙方時間的一致性。
設置可信環境:
在生產服務器上的/etc/hosts.equiv文件上添加:fjst informix;fz_refms informix
在備份服務器上的/etc/hosts.equiv文件上添加:fjst informix;fz_refms informix
設置服務端口:
在生產服務器上的/etc/services文件上添加:st2_service 1527/tcp
設置SQLHOSTS文件:
以informix登錄,在生產服務器上的$INFORMIXDIR/etc/sqlhosts文件上添加:
g_fz group - - i=6
refms onsoctcp fz_refms informix_ser g=g_fz
g_fjst group - - i=2
fjst onsoctcp fjst st2_service g=g_fjst
設置生產服器上的發送隊列緩沖空間:
以informix登錄
建立CDR_QHDR_DBSPACE(2G)
touch/informix/er_dbs/cdr_qhdr_dbspace
chmod 660/informix/er_dbs/cdr_qhdr_dbspace
onspaces-c-d cdr_qhdr_dbspace-p/informix/er_dbs/cdr_qhdr_dbspace-o 0-s 2000000
建立CDR_DBSPACE(2G)
touch/informix/er_dbs/cdr_dbspace
chmod 660/informix/er_dbs/cdr_dbspace
onspaces-c-d cdr_dbspace-p/informix/er_dbs/cdr_dbspace-o 0-s 2000000
建立 cdr_qdata_sbspace(53G)
touch/informix/er_dbs/cdr_qdata_sbspace
chmod 660/informix/er_dbs/cdr_qdata_sbspace
onspaces-c-S cdr_qdata_sbspace-p/informix/er_dbs/cdr_qdata_sbspace -s 53000000 -o 0 -Df"AVG_LO_SIZE=2,LOGGING=OFF"
建立異常事務文件位置:
以informix登錄,在生產服務器上建立ATS目錄和RTS目錄:
mkdir/informix/er_dbs/ats
mkdir/informix/er_dbs/rts
設置onconfig配置參數:
以informix登錄,在生產服務器上修改參數文件onconfig.refms,添加以下幾行:
CDR_DBSPACE cdr_dbspace
CDR_QHDR_DBSPACE cdr_qhdr_dbspace
CDR_QDATA_SBSPACE cdr_qdata_sbspace
重啟生產數據庫:
以informix登錄,在生產服務器上運行如下命令重啟數據庫:
onmode-ky
oninit-vy
初始化數據:
生產服務器通過dbexport命令導出數據,上傳備份服務器,通過dbimport導入
建立復制:
通過cdr define replicate創建表復制
驗證復制是否建立成功:cdr list repl
通過cdr change replicateset創建復制集合
驗證是否建立成功:cdr list replset replset_fzdb
啟動復制:cdr start replset replset_fzdb
檢查復制:cdr list server
在Informix ER的運行過程中,可查看生產服務器和備份服務器的運行狀態,監控ER發送隊列和接收隊列緩沖區的使用情況,防止ER發送隊列和接收隊列從內存溢出,并且可以添加、刪除數據表的復制,Informix ER主要的日常監控和維護命令包括:
*cdr list server,查看本地服務器和已知的每個服務器的狀態。這個命令還可輸出服務器組的隊列的大小。
*cdr list replcate,查看復制的屬性。如果未在命令行指定所定義的復制名稱,ER列出當前服務器上定義的所有復制的詳細信息。
*數據庫日志文件online.log,可以查看數據庫運行情況,記錄online系統的啟動信息、ER的狀態信息、參數調整信息、檢查點信息、錯誤信息和關閉系統信息等。
*onstat-d,監控ER緩沖區使用情況,正常情況下,ER發送隊列和接收隊列不應當從內存溢出到磁盤中,但是當發生異常情況時ER發送隊列和接收隊列將可能從內存溢出到磁盤中,為防止內存隊列溢出,應定期監控發送和接收隊列的磁盤空間使用情況。
*onstat-g rqm,查看暫留在本地的數據量。
*cdr stop命令停止 ER線程。在使用cdr stop時,ER停止讀取邏輯日志和尋找要復制的數據。在ER停止時,要確保當時沒有數據庫活動發生,否則這個生產服務器就會與備份服務器上的數據不同步。
*要想重新啟動已經停止的ER服務器,應該使用cdr start。在重新啟動服務器時,ER線程啟動并從重放位置(原來停止的位置)繼續計算邏輯日志。如果重放的位置指向的邏輯日志不再存在,那么重新啟動失敗,在服務器上ER不處于活躍狀態。
*cdr change replicateset-add,將新表添加到ER復制。
*drop table,刪除已加入ER復制的表。
當某一個或多個住房公積金管理中心發生數據災難時,可以通過數據災備中心的備份數據進行恢復。
在數據恢復前,首先停止生產中心的應用,將災備中心的數據以全庫或個別庫的方式導出,生成導出文件,將導出文件通過傳輸網絡復制回生產中心,導入生產中心數據庫中,并經過嚴格的數據一致性檢查,確認恢復數據與業務的一致性后,恢復生產中心的運行狀態。
數據恢復時間與備份數據量大小相關,影響的主要因素在于網絡傳輸的時間,以恢復1GB數據為例,生產中心備份與災備中心之間的傳輸網絡帶寬為10Mbps,約為每秒1~1.2M字節,傳輸1GB數據所需時間=1000M/(1—1.2)=833— 1000S,約為 16 分鐘左右。
根據上述估算,全省各住房公積金管理中心備份數據均可在24小時內完成全庫恢復。
基于Informix ER的數據復制實現方式靈活,支持實時復制,對主機、存儲平臺無一致性要求,并且能夠實現跨平臺、跨版本復制,但也存在以下約束因素:
數據庫系統:生產服務器和備份服務器必須采用Informix數據庫系統,并且盡量采用相同的版本。
日志記錄:在ER復制所涉及的所有服務器實例上創建數據庫時,必須帶有日志記錄,為了使對數據庫系統的影響最小,盡可能使用已緩沖的日志記錄。
臨時表:由于數據庫服務器在應用程序終止或關閉數據庫時會刪除臨時表,所以不應將這些表包含在復制環境中。
主鍵約束:需要復制的所有表必須在至少一列上定義Primary Key約束,ER需要使用主鍵提高性能和解決沖突,盡管最新的Informix 11.7版本能夠支持無主鍵表復制,但為了提高ER性能,應盡量建立主鍵。
大事務處理:雖然ER能夠處理大事務,但它是為小事務優化的,為了獲得最佳性能,應盡量避免大事務。
SQL語句:在表加入復制后,不能執行任何更改表結構的操作,必須操作時,需先停止復制。禁用的SQL 語句包括:drop table、rename table、alter fragment。
時鐘同步:ER使用時間戳標記、解決復制沖突,因此參與復制的數據庫服務器時間須進行同步,應使用NTP保證時鐘同步。
避免頻繁啟停ER:在實際實施過程中,筆者發現,如果ER頻繁啟停,容易導致數據庫系統的異常,導致需要重啟數據庫,因此應盡量避免。
本文采用基于Informix ER機制的遠程數據庫復制技術很好地適應了全省12個住房公積金管理中心的軟硬件現狀,滿足了全省住房公積金數據災備中心的建設要求,通過數據集中備份和共享硬件平臺的方式,建立全省住房公積金數據災備中心,對于建立全省統一的住房公積金數據安全管理應急處置機制,確保全省住房公積金數據安全,實現對全省住房公積金管理全過程實施動態監管,提高全省住房公積金數據綜合利用水平,促進全省住房公積金信息共享和業務協調,避免各地重復建設,降低建設與維護成本具有重要意義。