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