《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 一種自動管理的高可用架構(gòu)的實現(xiàn)
一種自動管理的高可用架構(gòu)的實現(xiàn)
2016年微型機與應(yīng)用第24期
霍長娟1,孫洪平2
1. 中國航空結(jié)算有限責(zé)任公司,北京 100028;2. 北京高陽金信信息技術(shù)有限公司,北京 100050
摘要: 結(jié)合實際生產(chǎn)業(yè)務(wù)要求,利用Oracle11g的DataGuard技術(shù),通過本地部署主備數(shù)據(jù)庫實現(xiàn)高可用架構(gòu),通過遠(yuǎn)端級聯(lián)第二個備庫實現(xiàn)異地容災(zāi)的要求。在DataGuard的搭建過程中,配置Broker工具實現(xiàn)自動管理DataGuard,在此基礎(chǔ)上,設(shè)置FSFO和快速閃回恢復(fù)區(qū)實現(xiàn)本地主數(shù)據(jù)庫故障時自動切換到備庫,以及在備庫快速閃回恢復(fù)區(qū)沒有被歸檔日志撐滿之前主庫得到正?;謴?fù),Broker能夠自動恢復(fù)DataGuard的配置,從而真正實現(xiàn)高效的、自動的高可用架構(gòu)。
Abstract:
Key words :

  霍長娟1,孫洪平2

 ?。?. 中國航空結(jié)算有限責(zé)任公司,北京 100028;2. 北京高陽金信信息技術(shù)有限公司,北京 100050)

       摘要:結(jié)合實際生產(chǎn)業(yè)務(wù)要求,利用Oracle11g的DataGuard技術(shù),通過本地部署主備數(shù)據(jù)庫實現(xiàn)高可用架構(gòu),通過遠(yuǎn)端級聯(lián)第二個備庫實現(xiàn)異地容災(zāi)的要求。在DataGuard的搭建過程中,配置Broker工具實現(xiàn)自動管理DataGuard,在此基礎(chǔ)上,設(shè)置FSFO和快速閃回恢復(fù)區(qū)實現(xiàn)本地主數(shù)據(jù)庫故障時自動切換到備庫,以及在備庫快速閃回恢復(fù)區(qū)沒有被歸檔日志撐滿之前主庫得到正?;謴?fù),Broker能夠自動恢復(fù)DataGuard的配置,從而真正實現(xiàn)高效的、自動的高可用架構(gòu)。

  關(guān)鍵詞:DataGuard;主備數(shù)據(jù)庫;遠(yuǎn)程災(zāi)備;FSFO

  中圖分類號:TP309文獻標(biāo)識碼:ADOI: 10.19358/j.issn.1674-7720.2016.24.022

  引用格式:霍長娟,孫洪平. 一種自動管理的高可用架構(gòu)[J].微型機與應(yīng)用,2016,35(24):77-80,83.

0引言

  目前很多銀行、金融等企業(yè)都使用Oracle作為后臺數(shù)據(jù)庫,如何保證數(shù)據(jù)庫的安全可靠性是從上到下一致關(guān)心的問題。目前的高可用配置有多種方案,數(shù)據(jù)庫RAC、DataGuard、操作系統(tǒng)HA等,都能在某種程度上滿足高可用性的要求。RAC是通過集群來消除單點故障;HA是一種OS級別的高可用方案;DataGuard是通過在異地部署備庫,當(dāng)主庫出現(xiàn)問題時立即切換到備庫的一種高可用方案。

1DataGuard簡介

  Oracle DataGuard是Oracle公司開發(fā)的一種數(shù)據(jù)庫級別的HA方案,其最主要功能是容災(zāi)、數(shù)據(jù)保護、故障恢復(fù)等,其基本原理是將日志文件從源數(shù)據(jù)庫傳輸?shù)侥繕?biāo)數(shù)據(jù)庫,然后在目標(biāo)數(shù)據(jù)庫上應(yīng)用這些日志文件,從而使目標(biāo)數(shù)據(jù)庫與源數(shù)據(jù)庫保持同步,達到高可用的目的。以下是DataGuard的一些基本概念。

 ?。?)DataGuard中的備庫分為物理備庫和邏輯備庫兩種,物理備庫就是應(yīng)用日志進行恢復(fù), 邏輯備庫就是應(yīng)用SQL語句進行恢復(fù),業(yè)界大多采用物理備庫的方式。

 ?。?)DataGuard包含三種服務(wù):日志傳輸服務(wù)——日志從主庫傳輸?shù)絺鋷?;日志?yīng)用服務(wù)——在備庫應(yīng)用日志;角色轉(zhuǎn)換服務(wù)——主備庫角色的轉(zhuǎn)換。

 ?。?)DataGuard的三種數(shù)據(jù)保護模式是:最大保護、最大性能、最大(高)可用。

2業(yè)務(wù)要求

  本文結(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)解決。另外,為預(yù)防災(zāi)難發(fā)生,此系統(tǒng)要求有異地災(zāi)備數(shù)據(jù)庫設(shè)置,也就是說需要在異地構(gòu)建一套同樣的環(huán)境,并且要保持?jǐn)?shù)據(jù)的一致性同步。因此,簡單的單機部署已經(jīng)不能滿足此系統(tǒng)的高可用性要求,必須為此系統(tǒng)配置帶有災(zāi)備系統(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)以及異地災(zāi)備配置。

3架構(gòu)設(shè)計

  高可用架構(gòu)圖如圖1所示。本地三臺服務(wù)器,主庫、備庫和Broker [2]服務(wù)器,主庫實時向備庫傳輸redolog日志,備庫實時恢復(fù),Broker工具實時監(jiān)測DG數(shù)據(jù)庫的狀態(tài),當(dāng)發(fā)生主庫不可用或是其他問題(例如Broker不能和主庫通信)時,通過Broker端設(shè)置的FSFO功能可以自動切換到備庫,從而實現(xiàn)自動管理,不需要人為干預(yù)。另外,在主備庫設(shè)置快速閃回恢復(fù)區(qū),用于存放歸檔日志,當(dāng)主庫出問題后,如果能在備庫快速閃回恢復(fù)區(qū)沒有被歸檔日志撐滿之前恢復(fù)正常,則不用重新搭建DG,Broker能夠自動恢復(fù)DG的配置(如表1所示),歸檔日志往回同步完成后可以重新切回主庫,從而真正實現(xiàn)高效的、自動的高可用架構(gòu)。關(guān)于災(zāi)備數(shù)據(jù)庫,通過搭建級聯(lián)DG來實現(xiàn),具體就是從備庫通過專線向異地傳輸redolog,在異地數(shù)據(jù)庫進行實時恢復(fù),從而達到異地容災(zāi)的目的。由于Broker的特性,不能同時部署兩臺Broker服務(wù)器,因此選擇在本地部署,災(zāi)備端沒有部署,這也是符合SLA要求的。

 

001.jpg

4搭建DataGuard環(huán)境

  4.1約定信息

  DataGuard配置表如表2所示。

002.jpg

  4.2DG環(huán)境配置

  4.2.1主庫配置

  (1)基本配置。開啟force logging,通過使用remote login密碼文件配置redo的傳輸認(rèn)證、開啟歸檔。

  (2)調(diào)整undo設(shè)置和開啟數(shù)據(jù)庫閃回。通過設(shè)置快速閃回恢復(fù)區(qū),再結(jié)合DG的管理工具Broker自動管理功能可以實現(xiàn)DG crash后,不用手工重新搭建DG,便于DG數(shù)據(jù)庫failover時快速恢復(fù)主庫狀態(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;

 ?。?)配置DG相關(guān)參數(shù)(修改pfile文件,以下列出主要參數(shù)),然后重新生成spfile,重啟數(shù)據(jù)庫實例生效。

  *.db_name=dbpro

  *.db_unique_name=dbpro

  *.log_archive_config=dg_config=(dbpro,dbsty,dbdr)

  *.log_archive_dest_1=location=/dbarch/dbpro

  valid_for=(all_logfiles,all_roles) db_unique_name=dbpro

  *.log_archive_dest_2=service=dbsty async

  valid_for=(all_logfiles,primary_role) db_unique_name=dbsty

  *.log_archive_dest_3=service=dbdr async compression=enable

  valid_for=(standby_logfiles,standby_role) db_unique_name=dbdr

  *.log_archive_dest_state_1=enable

  *.log_archive_dest_state_2=enable

  *.log_archive_dest_state_3=enable

  *.fal_server=dbsty

  *.fal_client=dbpro

 ?。?)配置備庫的TNS解析,在主庫tnsnames.ora中添加備庫的TNS解析。

 ?。?)創(chuàng)建應(yīng)用程序的連接服務(wù)。為保證應(yīng)用程序在數(shù)據(jù)庫切換后自動連接到新主庫,使用dbdg服務(wù)和觸發(fā)器實現(xiàn)應(yīng)用程序的連接轉(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');

  elseDBMS_SERVICE.STOP_SERVICE('dbdg');

  end if;

  end;

  /

 ?。?)配置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;

  ...

 ?。?)為備庫做準(zhǔn)備。

  對主庫做rman全備份、為備庫創(chuàng)建參數(shù)文件、為備庫創(chuàng)建standby控制文件。語句如下:

  SQL> CREATE PFILE=/tmp/initdbpro.ora FROM SPFILE;

  SQL>ALTER DATABASE CREATE STANDBY CONTROLFILE AS /tmp/dbsty.ctl;

  4.2.2備庫配置

 ?。?)基本配置。從主庫恢復(fù)參數(shù)文件和拷貝密碼文件、恢復(fù)standby控制文件(直接把standby控制文件改名成control1,control2,control3存到相應(yīng)目錄即可,然后啟庫到mount)、恢復(fù)主庫rman備份。

 ?。?)配置DG相關(guān)參數(shù)(修改pfile文件,以下列出主要參數(shù)),然后重新生成spfile,重啟數(shù)據(jù)庫到mount。

  *.db_name=dbpro

  *.db_unique_name=dbsty

  *.log_archive_config=dg_config=(dbpro,dbsty,dbdr)

  *.log_archive_dest_1=location=/dbarch/dbpro

  valid_for=(all_logfiles,all_roles) db_unique_name=dbsty

  *.log_archive_dest_2=service=dbpro async

  valid_for=(online_logfiles,primary_role) db_unique_name=dbpro

  *.log_archive_dest_3=service=dbdr async compression=enable

  valid_for=(standby_logfiles,standby_role) db_unique_name=dbdr

  *.log_archive_dest_state_1=enable

  *.log_archive_dest_state_2=enable

  *.log_archive_dest_state_3=enable

 ?。?)配置主庫的TNS解析,在備庫tnsnames.ora中添加主庫的TNS解析。

  (4)配置standby redo log。

  ALTER DATABASE ADD STANDBY LOGFILE GROUP 21 (/dbdata01/oradata/dbpro/styredo01a.log,/dbdata02/oradata/dbpro/styredo01b.log) SIZE 800M;

  ...

 ?。?)開啟數(shù)據(jù)庫閃回。

  SQL>ALTER DATABASE FLASHBACK ON;

 ?。?)啟動redo數(shù)據(jù)同步。

  SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

 ?。?)驗證redo數(shù)據(jù)同步。

  備庫確認(rèn)現(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是否被應(yīng)用:

  SQL> SELECT SEQUENCE#,APPLIED FROM VMYMARCHIVED_LOG ORDER BY SEQUENCE#;

  4.3搭建DR配置

  關(guān)于災(zāi)備數(shù)據(jù)庫,通過搭建級聯(lián)DG來實現(xiàn),具體就以備庫為源端,通過專線向異地災(zāi)備服務(wù)器傳輸redolog,在異地數(shù)據(jù)庫進行實時恢復(fù),從而達到異地容災(zāi)的目的。

  (1)基本配置。從主庫恢復(fù)參數(shù)文件、拷貝密碼文件、恢復(fù)控制文件,然后啟庫到mount、恢復(fù)主庫rman備份。

  (2)配置相關(guān)參數(shù)(修改pfile文件,以下列出主要參數(shù)),然后重新生成spfile,重啟數(shù)據(jù)庫。

  *.db_name=dbpro

  *.db_unique_name=dbdr

  *.log_archive_config=dg_config=(dbpro,dbsty,dbdr)

  *.log_archive_dest_1=location=/dbarch/dbpro

  valid_for=(online_logfiles,all_roles) db_unique_name=dbdr

  *.log_archive_dest_2=location=dbpro

  alid_for=(standby_logfiles,standby_role) db_unique_name=dbdr

  *.log_archive_dest_state_1=enable

  *.log_archive_dest_state_2=enable

 ?。?)配置主庫備庫的TNS解析、配置standby redo log、開啟閃回、啟動redo數(shù)據(jù)同步、驗證redo數(shù)據(jù)同步,和DG搭建是一樣的部署,這里不再贅述。

  4.4DG Broker和FastStart Failor配置

  4.4.1Broker配置過程

  Broker是管理DataGuard的命令行工具,為使用快速放障切換(Fast-Start Failover,F(xiàn)SFO)功能,必須將Broker配置在Broker管理服務(wù)器HOST-DGMT-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)

  )

  )

 ?。?)主、備庫設(shè)置Broker配置文件位置。

  參數(shù)dg_broker_config_file1規(guī)定Broker配置文件的位置,默認(rèn)就在MYMORACLE_HOME/dbs下,主備庫采用默認(rèn)配置即可。

 ?。?)主、備庫啟用Broker。

  SQL>ALTER SYSTEM SET DG_BROKER_START=TRUE scope=both;

  檢查dmon進程,存在即可。

  (4)Broker服務(wù)器配置主、備庫的TNS解析。

  修改Broker服務(wù)器上tnsname.ora文件,添加主、備庫的TNS解析,此處省略。

 ?。?)從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;

 ?。?)啟用Broker配置:

  DGMGRL> ENABLE CONFIGURATION;

  4.4.2Fast-Start Failover 配置過程

  FastStart Failover功能實現(xiàn)主數(shù)據(jù)庫異常情況下快速切換到備數(shù)據(jù)庫,在Broker管理工具基礎(chǔ)上增加了一個單獨的observer,在Broker服務(wù)器上進行配置。

  (1)配置數(shù)據(jù)庫failover的目標(biāo)。

  配置dbpro failover的目標(biāo):

  DGMGRL>edit database dbpro set property FastStartFailoverTarget=dbsty;

  配置dbsty failover的目標(biāo):

  DGMGRL>edit database dbsty set property FastStartFailoverTarget=dbpro;

  (2)設(shè)置FastStartFailoverThreshold閾值和FastStartFailoverLagLimit閾值。

  FastStartFailoverThreshold閾值設(shè)置為120秒(默認(rèn)30秒),如果observer和備庫在120秒內(nèi)無法連接上主數(shù)據(jù)庫,則啟動FastStart Fallouer。

  DGMGRL>EDIT CONFIGURATION SET PROPERTY FastStartFailoverThreshold = 120;

  FastStartFailoverLagLimi閾值設(shè)置為180秒(默認(rèn)30秒),備數(shù)據(jù)庫與主數(shù)據(jù)庫的數(shù)據(jù)丟失在180秒之內(nèi)才能啟動FastStart Failover。

  DGMGRL>EDIT CONFIGURATION SET PROPERTY FastStartFailoverLagLimit = 180;

 ?。?)啟用Fast-Start Failover。

  DGMGRL> ENABLE FAST_START FAILOVER;

  4.4.3switchover和手動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;

5結(jié)論

  本文主要介紹了Oracle11g的DataGuard以及Broker管理工具的基本概念以及功能,最后結(jié)合實際業(yè)務(wù),給出了在Linux平臺上搭建DG以及DR環(huán)境的實際案例,經(jīng)過生產(chǎn)運行的實際測試,證明利用DG搭建的高可用架構(gòu)以及容災(zāi)環(huán)境可以滿足實際業(yè)務(wù)需求。

  參考文獻

 ?。?] 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.


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。