霍長娟,孫洪平
(1. 中國航空結(jié)算有限責任公司,北京 100028;2. 北京高陽金信信息技術(shù)有限公司,北京 100050)
一種自動管理的高可用架構(gòu)的實現(xiàn)
霍長娟1,孫洪平2
(1. 中國航空結(jié)算有限責任公司,北京 100028;2. 北京高陽金信信息技術(shù)有限公司,北京 100050)
結(jié)合實際生產(chǎn)業(yè)務(wù)要求,利用Oracle11g的DataGuard技術(shù),通過本地部署主備數(shù)據(jù)庫實現(xiàn)高可用架構(gòu),通過遠端級聯(lián)第二個備庫實現(xiàn)異地容災的要求。在DataGuard的搭建過程中,配置Broker工具實現(xiàn)自動管理DataGuard,在此基礎(chǔ)上,設(shè)置FSFO和快速閃回恢復區(qū)實現(xiàn)本地主數(shù)據(jù)庫故障時自動切換到備庫,以及在備庫快速閃回恢復區(qū)沒有被歸檔日志撐滿之前主庫得到正?;謴?,Broker能夠自動恢復DataGuard的配置,從而真正實現(xiàn)高效的、自動的高可用架構(gòu)。
DataGuard;主備數(shù)據(jù)庫;遠程災備;FSFO
目前很多銀行、金融等企業(yè)都使用Oracle作為后臺數(shù)據(jù)庫,如何保證數(shù)據(jù)庫的安全可靠性是從上到下一致關(guān)心的問題。目前的高可用配置有多種方案,數(shù)據(jù)庫RAC、DataGuard、操作系統(tǒng)HA等,都能在某種程度上滿足高可用性的要求。RAC是通過集群來消除單點故障;HA是一種OS級別的高可用方案;DataGuard是通過在異地部署備庫,當主庫出現(xiàn)問題時立即切換到備庫的一種高可用方案。
Oracle DataGuard是Oracle公司開發(fā)的一種數(shù)據(jù)庫級別的HA方案,其最主要功能是容災、數(shù)據(jù)保護、故障恢復等,其基本原理是將日志文件從源數(shù)據(jù)庫傳輸?shù)侥繕藬?shù)據(jù)庫,然后在目標數(shù)據(jù)庫上應用這些日志文件,從而使目標數(shù)據(jù)庫與源數(shù)據(jù)庫保持同步,達到高可用的目的。以下是DataGuard的一些基本概念。
(1)DataGuard中的備庫分為物理備庫和邏輯備庫兩種,物理備庫就是應用日志進行恢復, 邏輯備庫就是應用SQL語句進行恢復,業(yè)界大多采用物理備庫的方式。
(2)DataGuard包含三種服務(wù):日志傳輸服務(wù)——日志從主庫傳輸?shù)絺鋷?;日志應用服?wù)——在備庫應用日志;角色轉(zhuǎn)換服務(wù)——主備庫角色的轉(zhuǎn)換。
(3)DataGuard的三種數(shù)據(jù)保護模式是:最大保護、最大性能、最大(高)可用。
本文結(jié)合實際生產(chǎn)業(yè)務(wù),利用Oracle11g的DataGuard技術(shù)搭建高可用架構(gòu)。此業(yè)務(wù)系統(tǒng)的等級比較高,用戶要求數(shù)據(jù)庫系統(tǒng)的可使用時間為24×365小時,除了每晚計劃內(nèi)的online備份時間和達成一致的維護時間外,網(wǎng)絡(luò)連接可用率必須為可用時間的99.9%,在出現(xiàn)故障的時候,要求2小時內(nèi)解決故障,需要廠商受理的要求4小時內(nèi)解決。另外,為預防災難發(fā)生,此系統(tǒng)要求有異地災備數(shù)據(jù)庫設(shè)置,也就是說需要在異地構(gòu)建一套同樣的環(huán)境,并且要保持數(shù)據(jù)的一致性同步。因此,簡單的單機部署已經(jīng)不能滿足此系統(tǒng)的高可用性要求,必須為此系統(tǒng)配置帶有災備系統(tǒng)的高可用性架構(gòu)。目前的高可用配置有多種方案,數(shù)據(jù)庫RAC、DataGuard、操作系統(tǒng)HA等,都能在某種程度上滿足高可用性的要求,結(jié)合各種技術(shù)的優(yōu)缺點以及成本、對維護人員的要求等各方面因素,最終采用Oracle11g的DataGuard[1]技術(shù)實現(xiàn)本系統(tǒng)的高可用架構(gòu)以及異地災備配置。
高可用架構(gòu)圖如圖1所示。本地三臺服務(wù)器,主庫、備庫和Broker[2]服務(wù)器,主庫實時向備庫傳輸redolog日志,備庫實時恢復,Broker工具實時監(jiān)測DG數(shù)據(jù)庫的狀態(tài),當發(fā)生主庫不可用或是其他問題(例如Broker不能和主庫通信)時,通過Broker端設(shè)置的FSFO功能可以自動切換到備庫,從而實現(xiàn)自動管理,不需要人為干預。另外,在主備庫設(shè)置快速閃回恢復區(qū),用于存放歸檔日志,當主庫出問題后,如果能在備庫快速閃回恢復區(qū)沒有被歸檔日志撐滿之前恢復正常,則不用重新搭建DG,Broker能夠自動恢復DG的配置(如表1所示),歸檔日志往回同步完成后可以重新切回主庫,從而真正實現(xiàn)高效的、自動的高可用架構(gòu)。關(guān)于災備數(shù)據(jù)庫,通過搭建級聯(lián)DG來實現(xiàn),具體就是從備庫通過專線向異地傳輸redolog,在異地數(shù)據(jù)庫進行實時恢復,從而達到異地容災的目的。由于Broker的特性,不能同時部署兩臺Broker服務(wù)器,因此選擇在本地部署,災備端沒有部署,這也是符合SLA要求的。
圖1 高可用架構(gòu)圖
保護模式最大性能備庫模式物理備庫redo傳輸方式非壓縮備庫數(shù)據(jù)丟失數(shù)據(jù)丟失<3min故障切換時間故障自動切換時間<5min故障手動切換時間<2h故障切換方式Fast-StartFailover(FSFO)或手動failover所謂FSFO,就是實現(xiàn)自動切換,不需要人為干預(注:如果備庫數(shù)據(jù)丟失超3min,將無法實現(xiàn)自動切換)
4.1 約定信息
DataGuard配置表如表2所示。
表2 DataGuard 配置表
4.2 DG環(huán)境配置
4.2.1 主庫配置
(1)基本配置。開啟force logging,通過使用remote login密碼文件配置redo的傳輸認證、開啟歸檔。
(2)調(diào)整undo設(shè)置和開啟數(shù)據(jù)庫閃回。通過設(shè)置快速閃回恢復區(qū),再結(jié)合DG的管理工具Broker自動管理功能可以實現(xiàn)DG crash后,不用手工重新搭建DG,便于DG數(shù)據(jù)庫failover時快速恢復主庫狀態(tài)。結(jié)合實際生產(chǎn)業(yè)務(wù)要求,生產(chǎn)數(shù)據(jù)庫undo數(shù)據(jù)和數(shù)據(jù)庫閃回數(shù)據(jù)保留時間分別設(shè)置為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相關(guān)參數(shù)(修改pfile文件,以下列出主要參數(shù)),然后重新生成spfile,重啟數(shù)據(jù)庫實例生效。
*.log_archive_dest_state_1=enable
*.log_archive_dest_state_2=enable
*.log_archive_dest_state_3=enable
(4)配置備庫的TNS解析,在主庫tnsnames.ora中添加備庫的TNS解析。
(5)創(chuàng)建應用程序的連接服務(wù)。為保證應用程序在數(shù)據(jù)庫切換后自動連接到新主庫,使用dbdg服務(wù)和觸發(fā)器實現(xiàn)應用程序的連接轉(zhuǎn)移。
創(chuàng)建啟動dbdg服務(wù)
begin
dbms_service.create_service('dbdg','dbdg');
end;
/
begin
DBMS_SERVICE.START_SERVICE('dbdg');
end;
/
創(chuàng)建服務(wù)更改觸發(fā)器
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。
數(shù)據(jù)庫standby redo log用來實時接收redo日志,大小與online redo log一致,組數(shù)比online redo log多一組。語句如下:
ALTER DATABASE ADD STANDBY LOGFILE GROUP 21 ('/dbdata01/oradata/dbpro/styredo01a.log','/dbdata02/oradata/dbpro/styredo01b.log') SIZE 800M;
...
(7)為備庫做準備。
對主庫做rman全備份、為備庫創(chuàng)建參數(shù)文件、為備庫創(chuàng)建standby控制文件。語句如下:
4.2.2 備庫配置
(1)基本配置。從主庫恢復參數(shù)文件和拷貝密碼文件、恢復standby控制文件(直接把standby控制文件改名成control1,control2,control3存到相應目錄即可,然后啟庫到mount)、恢復主庫rman備份。
(2)配置DG相關(guān)參數(shù)(修改pfile文件,以下列出主要參數(shù)),然后重新生成spfile,重啟數(shù)據(jù)庫到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)開啟數(shù)據(jù)庫閃回。
SQL>ALTER DATABASE FLASHBACK ON;
(6)啟動redo數(shù)據(jù)同步。
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
(7)驗證redo數(shù)據(jù)同步。
備庫確認現(xiàn)有的歸檔redo日志文件:
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM VMYMARCHIVED_LOG ORDER BY SEQUENCE#;
主庫強制切換日志:
SQL> ALTER SYSTEM SWITCH LOGFILE;
備庫驗證新的redo數(shù)據(jù)是否歸檔:
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配置
關(guān)于災備數(shù)據(jù)庫,通過搭建級聯(lián)DG來實現(xiàn),具體就以備庫為源端,通過專線向異地災備服務(wù)器傳輸redolog,在異地數(shù)據(jù)庫進行實時恢復,從而達到異地容災的目的。
(1)基本配置。從主庫恢復參數(shù)文件、拷貝密碼文件、恢復控制文件,然后啟庫到mount、恢復主庫rman備份。
(2)配置相關(guān)參數(shù)(修改pfile文件,以下列出主要參數(shù)),然后重新生成spfile,重啟數(shù)據(jù)庫。
*.log_archive_dest_state_1=enable
*.log_archive_dest_state_2=enable
(3)配置主庫備庫的TNS解析、配置standby redo log、開啟閃回、啟動redo數(shù)據(jù)同步、驗證redo數(shù)據(jù)同步,和DG搭建是一樣的部署,這里不再贅述。
4.4 DG Broker和Fast-Start Failor配置
4.4.1 Broker配置過程
Broker是管理DataGuard的命令行工具,為使用快速放障切換(Fast-Start Failover,F(xiàn)SFO)功能,必須將Broker配置在Broker管理服務(wù)器HOST-DGMT-1上。
(1)主、備庫配置監(jiān)聽服務(wù)。
修改主、備庫監(jiān)聽配置文件,重啟監(jiān)聽檢查**_DGMGRL服務(wù)。
主數(shù)據(jù)庫:
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)
)
)
備數(shù)據(jù)庫:
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)主、備庫設(shè)置Broker配置文件位置。
參數(shù)dg_broker_config_file1規(guī)定Broker配置文件的位置,默認就在MYMORACLE_HOME/dbs下,主備庫采用默認配置即可。
(3)主、備庫啟用Broker。
SQL>ALTER SYSTEM SET DG_BROKER_START=TRUE scope=both;
檢查dmon進程,存在即可。
(4)Broker服務(wù)器配置主、備庫的TNS解析。
修改Broker服務(wù)器上tnsname.ora文件,添加主、備庫的TNS解析,此處省略。
(5)從Broker服務(wù)器連接主庫,添加主備庫信息:
DGMGRL>connect sys/xxxxxxx@dbpro;
創(chuàng)建主庫配置信息:
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功能實現(xiàn)主數(shù)據(jù)庫異常情況下快速切換到備數(shù)據(jù)庫,在Broker管理工具基礎(chǔ)上增加了一個單獨的observer,在Broker服務(wù)器上進行配置。
(1)配置數(shù)據(jù)庫failover的目標。
配置dbpro failover的目標:
配置dbsty failover的目標:
(2)設(shè)置FastStartFailoverThreshold閾值和FastStartFailoverLagLimit閾值。
FastStartFailoverThreshold閾值設(shè)置為120秒(默認30秒),如果observer和備庫在120秒內(nèi)無法連接上主數(shù)據(jù)庫,則啟動Fast-Start Fallouer。
DGMGRL>EDIT CONFIGURATION SET PROPERTY FastStartFailoverThreshold = 120;
FastStartFailoverLagLimi閾值設(shè)置為180秒(默認30秒),備數(shù)據(jù)庫與主數(shù)據(jù)庫的數(shù)據(jù)丟失在180秒之內(nèi)才能啟動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切換測試
切換前檢查狀態(tài)是否正常,如果數(shù)據(jù)同步不正常,將不能進行switchover。
DGMGRL> SHOW FAST_START FAILOVER;
從主庫switchover到備庫:
DGMGRL> switchover to dbsty;
從備庫switchover回切到主庫:
DGMGRL> switchover to dbpro;(2)手動failover切換測試
切換前檢查狀態(tài)是否正常, 如果備庫狀不正常,將不能進行failover。
DGMGRL> SHOW FAST_START FAILOVER;
從主庫手動failover到備庫:
DGMGRL> FAILOVER TO dbsty;
本文主要介紹了Oracle11g的DataGuard以及Broker管理工具的基本概念以及功能,最后結(jié)合實際業(yè)務(wù),給出了在Linux平臺上搭建DG以及DR環(huán)境的實際案例,經(jīng)過生產(chǎn)運行的實際測試,證明利用DG搭建的高可用架構(gòu)以及容災環(huán)境可以滿足實際業(yè)務(wù)需求。
[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
霍長娟,孫洪平. 一種自動管理的高可用架構(gòu)[J].微型機與應用,2016,35(24):77-80,83.
2016-08-17)
霍長娟(1982-),女,碩士,工程師,主要研究方向:數(shù)據(jù)庫管理、數(shù)據(jù)庫安全。
孫洪平(1978-),男,本科,高級工程師,主要研究方向:軟件工程、中間件。