《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 一种自动管理的高可用架构的实现
一种自动管理的高可用架构的实现
2016年微型机与应用第24期
霍长娟1,孙洪平2
1. 中国航空结算有限责任公司,北京 100028;2. 北京高阳金信信息技术有限公司,北京 100050
摘要: 结合实际生产业务要求,利用Oracle11g的DataGuard技术,通过本地部署主备数据库实现高可用架构,通过远端级联第二个备库实现异地容灾的要求。在DataGuard的搭建过程中,配置Broker工具实现自动管理DataGuard,在此基础上,设置FSFO和快速闪回恢复区实现本地主数据库故障时自动切换到备库,以及在备库快速闪回恢复区没有被归档日志撑满之前主库得到正常恢复,Broker能够自动恢复DataGuard的配置,从而真正实现高效的、自动的高可用架构。
Abstract:
Key words :

  霍长娟1,孙洪平2

  (1. 中国航空结算有限责任公司,北京 100028;2. 北京高阳金信信息技术有限公司,北京 100050)

       摘要:结合实际生产业务要求,利用Oracle11g的DataGuard技术,通过本地部署主备数据库实现高可用架构,通过远端级联第二个备库实现异地容灾的要求。在DataGuard的搭建过程中,配置Broker工具实现自动管理DataGuard,在此基础上,设置FSFO和快速闪回恢复区实现本地主数据库故障时自动切换到备库,以及在备库快速闪回恢复区没有被归档日志撑满之前主库得到正常恢复,Broker能够自动恢复DataGuard的配置,从而真正实现高效的、自动的高可用架构。

  关键词:DataGuard;主备数据库;远程灾备;FSFO

  中图分类号:TP309文献标识码:ADOI: 10.19358/j.issn.1674-7720.2016.24.022

  引用格式:霍长娟,孙洪平. 一种自动管理的高可用架构[J].微型机与应用,2016,35(24):77-80,83.

0引言

  目前很多银行、金融等企业都使用Oracle作为后台数据库,如何保证数据库的安全可靠性是从上到下一致关心的问题。目前的高可用配置有多种方案,数据库RAC、DataGuard、操作系统HA等,都能在某种程度上满足高可用性的要求。RAC是通过集群来消除单点故障;HA是一种OS级别的高可用方案;DataGuard是通过在异地部署备库,当主库出现问题时立即切换到备库的一种高可用方案。

1DataGuard简介

  Oracle DataGuard是Oracle公司开发的一种数据库级别的HA方案,其最主要功能是容灾、数据保护、故障恢复等,其基本原理是将日志文件从源数据库传输到目标数据库,然后在目标数据库上应用这些日志文件,从而使目标数据库与源数据库保持同步,达到高可用的目的。以下是DataGuard的一些基本概念。

  (1)DataGuard中的备库分为物理备库和逻辑备库两种,物理备库就是应用日志进行恢复, 逻辑备库就是应用SQL语句进行恢复,业界大多采用物理备库的方式。

  (2)DataGuard包含三种服务:日志传输服务——日志从主库传输到备库;日志应用服务——在备库应用日志;角色转换服务——主备库角色的转换。

  (3)DataGuard的三种数据保护模式是:最大保护、最大性能、最大(高)可用。

2业务要求

  本文结合实际生产业务,利用Oracle11g的DataGuard技术搭建高可用架构。此业务系统的等级比较高,用户要求数据库系统的可使用时间为24×365小时,除了每晚计划内的online备份时间和达成一致的维护时间外,网络连接可用率必须为可用时间的99.9%,在出现故障的时候,要求2小时内解决故障,需要厂商受理的要求4小时内解决。另外,为预防灾难发生,此系统要求有异地灾备数据库设置,也就是说需要在异地构建一套同样的环境,并且要保持数据的一致性同步。因此,简单的单机部署已经不能满足此系统的高可用性要求,必须为此系统配置带有灾备系统的高可用性架构。目前的高可用配置有多种方案,数据库RAC、DataGuard、操作系统HA等,都能在某种程度上满足高可用性的要求,结合各种技术的优缺点以及成本、对维护人员的要求等各方面因素,最终采用Oracle11g的DataGuard [1]技术实现本系统的高可用架构以及异地灾备配置。

3架构设计

  高可用架构图如图1所示。本地三台服务器,主库、备库和Broker [2]服务器,主库实时向备库传输redolog日志,备库实时恢复,Broker工具实时监测DG数据库的状态,当发生主库不可用或是其他问题(例如Broker不能和主库通信)时,通过Broker端设置的FSFO功能可以自动切换到备库,从而实现自动管理,不需要人为干预。另外,在主备库设置快速闪回恢复区,用于存放归档日志,当主库出问题后,如果能在备库快速闪回恢复区没有被归档日志撑满之前恢复正常,则不用重新搭建DG,Broker能够自动恢复DG的配置(如表1所示),归档日志往回同步完成后可以重新切回主库,从而真正实现高效的、自动的高可用架构。关于灾备数据库,通过搭建级联DG来实现,具体就是从备库通过专线向异地传输redolog,在异地数据库进行实时恢复,从而达到异地容灾的目的。由于Broker的特性,不能同时部署两台Broker服务器,因此选择在本地部署,灾备端没有部署,这也是符合SLA要求的。

 

001.jpg

4搭建DataGuard环境

  4.1约定信息

  DataGuard配置表如表2所示。

002.jpg

  4.2DG环境配置

  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,重启数据库实例生效。

  *.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

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

  elseDBMS_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控制文件。语句如下:

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

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

  4.2.2备库配置

  (1)基本配置。从主库恢复参数文件和拷贝密码文件、恢复standby控制文件(直接把standby控制文件改名成control1,control2,control3存到相应目录即可,然后启库到mount)、恢复主库rman备份。

  (2)配置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

  (3)配置主库的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;

  ...

  (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,重启数据库。

  *.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

  (3)配置主库备库的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上。

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

  (3)启用Fast-Start Failover。

  DGMGRL> ENABLE FAST_START FAILOVER;

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

5结论

  本文主要介绍了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.


此内容为AET网站原创,未经授权禁止转载。