霍長娟,孫洪平
(1. 中國航空結算有限責任公司,北京 100028;2. 北京高陽金信信息技術有限公司,北京 100050)
一種自動管理的高可用架構的實現
霍長娟1,孫洪平2
(1. 中國航空結算有限責任公司,北京 100028;2. 北京高陽金信信息技術有限公司,北京 100050)
結合實際生產業務要求,利用Oracle11g的DataGuard技術,通過本地部署主備數據庫實現高可用架構,通過遠端級聯第二個備庫實現異地容災的要求。在DataGuard的搭建過程中,配置Broker工具實現自動管理DataGuard,在此基礎上,設置FSFO和快速閃回恢復區實現本地主數據庫故障時自動切換到備庫,以及在備庫快速閃回恢復區沒有被歸檔日志撐滿之前主庫得到正常恢復,Broker能夠自動恢復DataGuard的配置,從而真正實現高效的、自動的高可用架構。
DataGuard;主備數據庫;遠程災備;FSFO
目前很多銀行、金融等企業都使用Oracle作為后臺數據庫,如何保證數據庫的安全可靠性是從上到下一致關心的問題。目前的高可用配置有多種方案,數據庫RAC、DataGuard、操作系統HA等,都能在某種程度上滿足高可用性的要求。RAC是通過集群來消除單點故障;HA是一種OS級別的高可用方案;DataGuard是通過在異地部署備庫,當主庫出現問題時立即切換到備庫的一種高可用方案。
Oracle DataGuard是Oracle公司開發的一種數據庫級別的HA方案,其最主要功能是容災、數據保護、故障恢復等,其基本原理是將日志文件從源數據庫傳輸到目標數據庫,然后在目標數據庫上應用這些日志文件,從而使目標數據庫與源數據庫保持同步,達到高可用的目的。以下是DataGuard的一些基本概念。
(1)DataGuard中的備庫分為物理備庫和邏輯備庫兩種,物理備庫就是應用日志進行恢復, 邏輯備庫就是應用SQL語句進行恢復,業界大多采用物理備庫的方式。
(2)DataGuard包含三種服務:日志傳輸服務——日志從主庫傳輸到備庫;日志應用服務——在備庫應用日志;角色轉換服務——主備庫角色的轉換。
(3)DataGuard的三種數據保護模式是:最大保護、最大性能、最大(高)可用。
本文結合實際生產業務,利用Oracle11g的DataGuard技術搭建高可用架構。此業務系統的等級比較高,用戶要求數據庫系統的可使用時間為24×365小時,除了每晚計劃內的online備份時間和達成一致的維護時間外,網絡連接可用率必須為可用時間的99.9%,在出現故障的時候,要求2小時內解決故障,需要廠商受理的要求4小時內解決。另外,為預防災難發生,此系統要求有異地災備數據庫設置,也就是說需要在異地構建一套同樣的環境,并且要保持數據的一致性同步。因此,簡單的單機部署已經不能滿足此系統的高可用性要求,必須為此系統配置帶有災備系統的高可用性架構。目前的高可用配置有多種方案,數據庫RAC、DataGuard、操作系統HA等,都能在某種程度上滿足高可用性的要求,結合各種技術的優缺點以及成本、對維護人員的要求等各方面因素,最終采用Oracle11g的DataGuard[1]技術實現本系統的高可用架構以及異地災備配置。
高可用架構圖如圖1所示。本地三臺服務器,主庫、備庫和Broker[2]服務器,主庫實時向備庫傳輸redolog日志,備庫實時恢復,Broker工具實時監測DG數據庫的狀態,當發生主庫不可用或是其他問題(例如Broker不能和主庫通信)時,通過Broker端設置的FSFO功能可以自動切換到備庫,從而實現自動管理,不需要人為干預。另外,在主備庫設置快速閃回恢復區,用于存放歸檔日志,當主庫出問題后,如果能在備庫快速閃回恢復區沒有被歸檔日志撐滿之前恢復正常,則不用重新搭建DG,Broker能夠自動恢復DG的配置(如表1所示),歸檔日志往回同步完成后可以重新切回主庫,從而真正實現高效的、自動的高可用架構。關于災備數據庫,通過搭建級聯DG來實現,具體就是從備庫通過專線向異地傳輸redolog,在異地數據庫進行實時恢復,從而達到異地容災的目的。由于Broker的特性,不能同時部署兩臺Broker服務器,因此選擇在本地部署,災備端沒有部署,這也是符合SLA要求的。

圖1 高可用架構圖

保護模式最大性能備庫模式物理備庫redo傳輸方式非壓縮備庫數據丟失數據丟失<3min故障切換時間故障自動切換時間<5min故障手動切換時間<2h故障切換方式Fast-StartFailover(FSFO)或手動failover所謂FSFO,就是實現自動切換,不需要人為干預(注:如果備庫數據丟失超3min,將無法實現自動切換)
4.1 約定信息
DataGuard配置表如表2所示。

表2 DataGuard 配置表
4.2 DG環境配置
4.2.1 主庫配置
(1)基本配置。開啟force logging,通過使用remote login密碼文件配置redo的傳輸認證、開啟歸檔。
(2)調整undo設置和開啟數據庫閃回。通過設置快速閃回恢復區,再結合DG的管理工具Broker自動管理功能可以實現DG crash后,不用手工重新搭建DG,便于DG數據庫failover時快速恢復主庫狀態。結合實際生產業務要求,生產數據庫undo數據和數據庫閃回數據保留時間分別設置為12小時和24小時。主要語句如下:
SQL>ALTER SYSTEM SET UNDO_RETENTION=43200 SCOPE=SPFILE;
SQL>ALTER SYSTEM SET UNDO_MANAGEMENT='AUTO' SCOPE=SPFILE;
SQL>ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=1440 SCOPE=BOTH;
SQL>ALTER SYSTEM SET db_recovery_file_dest_size=150G;
SQL>ALTER SYSTEM SET db_recovery_file_dest=’/dbflashback/flashlog’;
SQL>ALTER DATABASE FLASHBACK ON;
(3)配置DG相關參數(修改pfile文件,以下列出主要參數),然后重新生成spfile,重啟數據庫實例生效。


*.log_archive_dest_state_1=enable
*.log_archive_dest_state_2=enable
*.log_archive_dest_state_3=enable
(4)配置備庫的TNS解析,在主庫tnsnames.ora中添加備庫的TNS解析。
(5)創建應用程序的連接服務。為保證應用程序在數據庫切換后自動連接到新主庫,使用dbdg服務和觸發器實現應用程序的連接轉移。
創建啟動dbdg服務
begin
dbms_service.create_service('dbdg','dbdg');
end;
/
begin
DBMS_SERVICE.START_SERVICE('dbdg');
end;
/
創建服務更改觸發器
create or replace trigger startdbdg after startup on database
declare
v_role varchar(30);
begin
select database_role into v_role from vMYMdatabase;
if v_role = 'PRIMARY' then
DBMS_SERVICE.START_SERVICE('dbdg');
else DBMS_SERVICE.STOP_SERVICE('dbdg');
end if;
end;
/
(6)配置standby redo log。
數據庫standby redo log用來實時接收redo日志,大小與online redo log一致,組數比online redo log多一組。語句如下:
ALTER DATABASE ADD STANDBY LOGFILE GROUP 21 ('/dbdata01/oradata/dbpro/styredo01a.log','/dbdata02/oradata/dbpro/styredo01b.log') SIZE 800M;
...
(7)為備庫做準備。
對主庫做rman全備份、為備庫創建參數文件、為備庫創建standby控制文件。語句如下:

4.2.2 備庫配置
(1)基本配置。從主庫恢復參數文件和拷貝密碼文件、恢復standby控制文件(直接把standby控制文件改名成control1,control2,control3存到相應目錄即可,然后啟庫到mount)、恢復主庫rman備份。
(2)配置DG相關參數(修改pfile文件,以下列出主要參數),然后重新生成spfile,重啟數據庫到mount。

*.log_archive_dest_state_1=enable
*.log_archive_dest_state_2=enable
*.log_archive_dest_state_3=enable
(3)配置主庫的TNS解析,在備庫tnsnames.ora中添加主庫的TNS解析。
(4)配置standby redo log。

...
(5)開啟數據庫閃回。
SQL>ALTER DATABASE FLASHBACK ON;
(6)啟動redo數據同步。
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
(7)驗證redo數據同步。
備庫確認現有的歸檔redo日志文件:
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM VMYMARCHIVED_LOG ORDER BY SEQUENCE#;
主庫強制切換日志:
SQL> ALTER SYSTEM SWITCH LOGFILE;
備庫驗證新的redo數據是否歸檔:
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM VMYMARCHIVED_LOG ORDER BY SEQUENCE#;
備庫驗證接受的redo是否被應用:
SQL> SELECT SEQUENCE#,APPLIED FROM VMYMARCHIVED_LOG ORDER BY SEQUENCE#;
4.3 搭建DR配置
關于災備數據庫,通過搭建級聯DG來實現,具體就以備庫為源端,通過專線向異地災備服務器傳輸redolog,在異地數據庫進行實時恢復,從而達到異地容災的目的。
(1)基本配置。從主庫恢復參數文件、拷貝密碼文件、恢復控制文件,然后啟庫到mount、恢復主庫rman備份。
(2)配置相關參數(修改pfile文件,以下列出主要參數),然后重新生成spfile,重啟數據庫。


*.log_archive_dest_state_1=enable
*.log_archive_dest_state_2=enable
(3)配置主庫備庫的TNS解析、配置standby redo log、開啟閃回、啟動redo數據同步、驗證redo數據同步,和DG搭建是一樣的部署,這里不再贅述。
4.4 DG Broker和Fast-Start Failor配置
4.4.1 Broker配置過程
Broker是管理DataGuard的命令行工具,為使用快速放障切換(Fast-Start Failover,FSFO)功能,必須將Broker配置在Broker管理服務器HOST-DGMT-1上。
(1)主、備庫配置監聽服務。
修改主、備庫監聽配置文件,重啟監聽檢查**_DGMGRL服務。
主數據庫:
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=dbpro_DGMGRL) (ORACLE_HOME=/dbu01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME=dbpro)
)
)
備數據庫:
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=dbsty_DGMGRL) (ORACLE_HOME=/dbu01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME=dbpro)
)
)
(2)主、備庫設置Broker配置文件位置。
參數dg_broker_config_file1規定Broker配置文件的位置,默認就在MYMORACLE_HOME/dbs下,主備庫采用默認配置即可。
(3)主、備庫啟用Broker。
SQL>ALTER SYSTEM SET DG_BROKER_START=TRUE scope=both;
檢查dmon進程,存在即可。
(4)Broker服務器配置主、備庫的TNS解析。
修改Broker服務器上tnsname.ora文件,添加主、備庫的TNS解析,此處省略。
(5)從Broker服務器連接主庫,添加主備庫信息:
DGMGRL>connect sys/xxxxxxx@dbpro;
創建主庫配置信息:
DGMGRL> CREATE CONFIGURATION 'dbproconf' AS PRIMARY DATABASE IS 'dbpro' CONNECT IDENTIFIER IS dbpro;
添加備庫配置:
DGMGRL> ADD DATABASE 'dbsty' AS CONNECT IDENTIFIER IS dbsty MAINTAINED AS PHYSICAL;
(6)啟用Broker配置:
DGMGRL> ENABLE CONFIGURATION;
4.4.2 Fast-Start Failover 配置過程
Fast-Start Failover功能實現主數據庫異常情況下快速切換到備數據庫,在Broker管理工具基礎上增加了一個單獨的observer,在Broker服務器上進行配置。
(1)配置數據庫failover的目標。
配置dbpro failover的目標:

配置dbsty failover的目標:

(2)設置FastStartFailoverThreshold閾值和FastStartFailoverLagLimit閾值。
FastStartFailoverThreshold閾值設置為120秒(默認30秒),如果observer和備庫在120秒內無法連接上主數據庫,則啟動Fast-Start Fallouer。
DGMGRL>EDIT CONFIGURATION SET PROPERTY FastStartFailoverThreshold = 120;
FastStartFailoverLagLimi閾值設置為180秒(默認30秒),備數據庫與主數據庫的數據丟失在180秒之內才能啟動Fast-Start Failover。
DGMGRL>EDIT CONFIGURATION SET PROPERTY FastStartFailoverLagLimit = 180;
(3)啟用Fast-Start Failover。
DGMGRL> ENABLE FAST_START FAILOVER;
4.4.3 switchover和手動failover測試
(1)switchover切換測試
切換前檢查狀態是否正常,如果數據同步不正常,將不能進行switchover。
DGMGRL> SHOW FAST_START FAILOVER;
從主庫switchover到備庫:
DGMGRL> switchover to dbsty;
從備庫switchover回切到主庫:
DGMGRL> switchover to dbpro;(2)手動failover切換測試
切換前檢查狀態是否正常, 如果備庫狀不正常,將不能進行failover。
DGMGRL> SHOW FAST_START FAILOVER;
從主庫手動failover到備庫:
DGMGRL> FAILOVER TO dbsty;
本文主要介紹了Oracle11g的DataGuard以及Broker管理工具的基本概念以及功能,最后結合實際業務,給出了在Linux平臺上搭建DG以及DR環境的實際案例,經過生產運行的實際測試,證明利用DG搭建的高可用架構以及容災環境可以滿足實際業務需求。
[1] RICH K.Oracle DataGuard concepts and administrator 11g release 2 (11.2) E25608-03,2012[EB/OL].(2012-xx)http://docs.oracle.com/cd/E11882_01/server.112/e41134/toc.htm.
[2] RICH K.Oracle DataGuard broker 11g release 2 (11.2) E17023-07,2012[EB/OL].(2012-xx)http://docs.oracle.com/cd/E11882_01/server.112/e40771/toc.htm.
Implementation of an automatically managed high availability architecture
Huo Changjuan1,Sun Hongping2
(1. Accounting Center of China Aviation, Beijing 100028, China; 2. The Company of Beijing Gao Yang Jin Xin, Beijing 100050, China)
In this paper, according to the actual production of business requirements,using Oracle11g’s DataGuard technology, we deploy primary-standby database architecture locally to achieve high availability,and deploy a second standby database attached to the first standby database remotely for disaster recovery.In the DataGuard building process, we configure Broker tools to achieve automate management DataGuard. On this basis, we set FSFO and fast flashback recovery area for local primary database automatic failover to the standby database, as well as the primary database becomes normal before standby database’s fast flashback recovery area is fulled with archivelog. The broker can automatically restore DataGuard configuration, archiving efficient and automated high availability architecture.
DataGuard;primary-standby database;remote disaster recovery;FSFO
TP309
A
10.19358/j.issn.1674- 7720.2016.24.022
霍長娟,孫洪平. 一種自動管理的高可用架構[J].微型機與應用,2016,35(24):77-80,83.
2016-08-17)
霍長娟(1982-),女,碩士,工程師,主要研究方向:數據庫管理、數據庫安全。
孫洪平(1978-),男,本科,高級工程師,主要研究方向:軟件工程、中間件。