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

  霍長娟1,孫洪平2

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

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

  關鍵詞:DataGuard;主備數據庫;遠程災備;FSFO

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

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

0引言

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

1DataGuard簡介

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

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

 ?。?)DataGuard包含三種服務:日志傳輸服務——日志從主庫傳輸到備庫;日志應用服務——在備庫應用日志;角色轉換服務——主備庫角色的轉換。

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

2業(yè)務要求

  本文結合實際生產業(yè)務,利用Oracle11g的DataGuard技術搭建高可用架構。此業(yè)務系統(tǒng)的等級比較高,用戶要求數據庫系統(tǒng)的可使用時間為24×365小時,除了每晚計劃內的online備份時間和達成一致的維護時間外,網絡連接可用率必須為可用時間的99.9%,在出現故障的時候,要求2小時內解決故障,需要廠商受理的要求4小時內解決。另外,為預防災難發(fā)生,此系統(tǒng)要求有異地災備數據庫設置,也就是說需要在異地構建一套同樣的環(huán)境,并且要保持數據的一致性同步。因此,簡單的單機部署已經不能滿足此系統(tǒng)的高可用性要求,必須為此系統(tǒng)配置帶有災備系統(tǒng)的高可用性架構。目前的高可用配置有多種方案,數據庫RAC、DataGuard、操作系統(tǒng)HA等,都能在某種程度上滿足高可用性的要求,結合各種技術的優(yōu)缺點以及成本、對維護人員的要求等各方面因素,最終采用Oracle11g的DataGuard [1]技術實現本系統(tǒng)的高可用架構以及異地災備配置。

3架構設計

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

 

001.jpg

4搭建DataGuard環(huán)境

  4.1約定信息

  DataGuard配置表如表2所示。

002.jpg

  4.2DG環(huán)境配置

  4.2.1主庫配置

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

  (2)調整undo設置和開啟數據庫閃回。通過設置快速閃回恢復區(qū),再結合DG的管理工具Broker自動管理功能可以實現DG crash后,不用手工重新搭建DG,便于DG數據庫failover時快速恢復主庫狀態(tài)。結合實際生產業(yè)務要求,生產數據庫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;

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

  *.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解析。

  (5)創(chuàng)建應用程序的連接服務。為保證應用程序在數據庫切換后自動連接到新主庫,使用dbdg服務和觸發(fā)器實現應用程序的連接轉移。

  創(chuàng)建啟動dbdg服務

  begin

  dbms_service.create_service('dbdg','dbdg');

  end;

  /

  begin

  DBMS_SERVICE.START_SERVICE('dbdg');

  end;

  /

  創(chuàng)建服務更改觸發(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。

  數據庫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全備份、為備庫創(chuàng)建參數文件、為備庫創(chuàng)建standby控制文件。語句如下:

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

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

  4.2.2備庫配置

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

 ?。?)配置DG相關參數(修改pfile文件,以下列出主要參數),然后重新生成spfile,重啟數據庫到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;

  ...

 ?。?)開啟數據庫閃回。

  SQL>ALTER DATABASE FLASHBACK ON;

 ?。?)啟動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,重啟數據庫。

  *.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數據同步、驗證redo數據同步,和DG搭建是一樣的部署,這里不再贅述。

  4.4DG Broker和FastStart Failor配置

  4.4.1Broker配置過程

  Broker是管理DataGuard的命令行工具,為使用快速放障切換(Fast-Start Failover,FSFO)功能,必須將Broker配置在Broker管理服務器HOST-DGMT-1上。

 ?。?)主、備庫配置監(jiān)聽服務。

  修改主、備庫監(jiān)聽配置文件,重啟監(jiān)聽檢查**_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規(guī)定Broker配置文件的位置,默認就在MYMORACLE_HOME/dbs下,主備庫采用默認配置即可。

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

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

  檢查dmon進程,存在即可。

 ?。?)Broker服務器配置主、備庫的TNS解析。

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

  (5)從Broker服務器連接主庫,添加主備庫信息:

  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功能實現主數據庫異常情況下快速切換到備數據庫,在Broker管理工具基礎上增加了一個單獨的observer,在Broker服務器上進行配置。

  (1)配置數據庫failover的目標。

  配置dbpro failover的目標:

  DGMGRL>edit database dbpro set property FastStartFailoverTarget=dbsty;

  配置dbsty failover的目標:

  DGMGRL>edit database dbsty set property FastStartFailoverTarget=dbpro;

  (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;

 ?。?)啟用Fast-Start Failover。

  DGMGRL> ENABLE FAST_START FAILOVER;

  4.4.3switchover和手動failover測試

 ?。?)switchover切換測試

  切換前檢查狀態(tài)是否正常,如果數據同步不正常,將不能進行switchover。

  DGMGRL> SHOW FAST_START FAILOVER;

  從主庫switchover到備庫:

  DGMGRL> switchover to dbsty;

  從備庫switchover回切到主庫:

  DGMGRL> switchover to dbpro;

 ?。?)手動failover切換測試

  切換前檢查狀態(tài)是否正常, 如果備庫狀不正常,將不能進行failover。

  DGMGRL> SHOW FAST_START FAILOVER;

  從主庫手動failover到備庫:

  DGMGRL> FAILOVER TO dbsty;

5結論

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

  參考文獻

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

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


此內容為AET網站原創(chuàng),未經授權禁止轉載。