Oracle DG 自动故障转移 —— Fast-Start Fail Over(FSFO)

本文详细介绍了Oracle Data Guard的Fast-Start Failover(FSFO)机制,涵盖配置步骤、工作原理及测试案例,确保数据库高可用性。

前面介绍了 Oracle DG 手动 SwitchOver & Failover及Failover后利用闪回恢复主从同步 和 Oracle DG Broker 进行 SwitchOver & Failover及Failover后恢复主从同步

这篇来看下DG的自动切换方法 —— Fast-Start Fail Over。

FSFO允许代理在主库故障的情况下自动故障转移到先前选择的备库,无需手动执行任何步骤,以便快速可靠地恢复业务。FSFO只能在代理配置中使用,并且只能通过DGMGRL或OEM进行配置。

FSFO支持在最高可用性与最高性能模式下使用。最大可用性模式保证不会丢失任何数据,最高性能模式可保证丢失的数据量不超过FastStartFailoverLagLimit属性指定的数据量(单位为秒)。

 

一、 何时会进行FSFO

配置完成后,FSFO将在以下情况下起作用:

  • 主库与 Observer和目标备库 失联时间均超过FastStartFailoverThreshold属性配置阈值(单位为秒)
  • 单实例数据库中主实例崩溃
  • RAC中所有主实例崩溃
  • shutdown abort主库
  • 应用程序通过调用DBMS_DG.INITIATE_FS_FAILOVER函数启动FSFO
  • Oracle 错误:可以指定启动 FSFO 故障切换的 ORA 错误列表(默认为空)
  • Broker 可配置为遇到以下任一条件时启动FSFO:
Health ConditionDescription默认启用
Datafile Offline数据文件由于写错误脱机Yes
Corrupted Dictionary关键数据库对象的字典损坏,该状态可在数据库open时被检测到Yes
Corrupted Controlfile控制文件由于写入错误永久损坏Yes
Inaccessible Logfile由于IO错误,LGWR无法写入日志组的任何成员No
Stuck Archiver由于设备已满或不可用,归档进程无法归档redo logNo

 

二、 Observer

Observer是一个OCI(Oracle Call Interface)客户端组件,通常运行在独立服务器并监视主库可用性。

Observer 应安装在独立的服务器上,与主、备服务器分开。DGMGRL包含Observer 软件,因此要在独立的服务器上安装DGMGRL。安装方法有以下两种:

  • 通过选择Oracle Universal Installer中的Administrator选项来安装完整的Oracle Client Administrator。此安装包括DGMGRL,但不包括OEM代理。这种安装方式可以使用DGMGRL命令但无法使用OEM来管理Observer。
  • 安装完整的Oracle数据库软件包,这种安装方式包括DGMGRL。
  • 安装步骤参考 https://www.jianshu.com/p/55fd93a81150

顾名思义,Observer可以观察主备库之间的活动,决定是否进行FSFO,因此我们需要在连接性最高的服务器上安装Observer。FSFO可能会导致错误的故障转移,即使主库正在运行并且可以在本地访问,也可能会发生FSFO;如果客户端无法访问主库,也可能不发生FSFO。

 

三、 FSFO过程

 

1. FSFO之前

DG稳定运行,主库将REDO数据传输到备库,Observer监视整体状态。

 

2. FSFO期间

主库遇到灾难,并且它与Observer和目标备库均失联。在检测到通信中断后,Observer在FastStartFailoverThreshold指定时间内尝试重连主库,如果还是无法连接,且目标备库已准备好进行FSFO,则将发生FSFO。

 

3. FSFO之后

FSFO已完成,并且目标备库以主库角色运行。在修复了原主库之后,Observer将重建与该数据库的连接,并将其恢复为新主库的备库。新主库开始将重做数据传输给它。

 

四、 FSFO配置前提条件

  • 直到11g为止,数据库保护模式应为“最大可用性”或“最大性能” 
  • 已配置 Oracle DG Broker,配置方法参考 Oracle DG Broker 进行 SwitchOver & Failover及Failover后恢复主从同步
  • LOGXPTMODE属性在最大可用性模式下应为SYNC,在最大性能模式下应为ASYNC,主备库LOGXPTMODE设置必须相同
  • 主库和作为FSFO目标的备库必须都启用闪回数据库
  • 在Observer上配置tnsnames.ora文件,使其能连接到主库和作为FSFO目标的备库
  • 创建一个静态服务名称,以便Observer可以在恢复时自动重启数据库

 

五、 配置

最简单的方法只需要配置Observer并enable fast_start failover; 即可。

参考 https://blog.youkuaiyun.com/shiyu1157758655/article/details/55504518

 

下面是按照官方文档配置推荐的主要参数。

1. 连接到dgmgrl并检查配置

DGMGRL> connect sys/oracle
Connected.

DGMGRL> show configuration;

Configuration - dgconfig1
  Protection Mode: MaxPerformance
  Databases:
    testdb     - Primary database
    std_testdb - Physical standby database

Fast-Start Failover: DISABLED
Configuration Status: SUCCESS

 

2. 设置故障转移目标

只能为当前主库设置一个目标转移备库,若只有一个备库,此步骤可忽略。若要修改目标转移备库,需要先禁用FSFO,改完后再启用。

DGMGRL> EDIT DATABASE TESTDB SET PROPERTY FASTSTARTFAILOVERTARGET=STD_TESTDB;
Property "faststartfailovertarget" updated

DGMGRL> EDIT DATABASE STD_TESTDB SET PROPERTY FASTSTARTFAILOVERTARGET=TESTDB;
Property "faststartfailovertarget" updated

 

3. 设置保护模式与LogXptMode

LOGXPTMODE属性在最大可用性模式下应为SYNC,在最大性能模式下应为ASYNC,主备库LOGXPTMODE设置必须相同

DGMGRL> EDIT CONFIGURATION SET PROTECTION MODE AS MaxAvailability;
DGMGRL> edit database orcl set property 'LogXptMode'='ASYNC'; 
DGMGRL> edit database orcl_dg set property 'LogXptMode'='ASYNC';

 

4. 设置FSFO阈值

如果主库与 Observer和目标备库 失联时间均超过FastStartFailoverThreshold属性配置阈值(单位为秒),将启动FSFO。

换句话说,FastStartFailoverThreshold表示,Observer和目标备库 在检测到主库不可用后、希望等多少秒才启动FSFO。再此期间,它们会尝试重连主库。

默认值为30秒,最小6秒。

DGMGRL> edit configuration set property faststartfailoverthreshold=300;

 

5. 设置最大可接受延迟时间

FastStartFailoverLagLimit表示,自动故障转移允许的最大数据丢失量(单位为秒),仅在最高性能保护模式时才可使用。

FastStartFailoverLagLimit作为DG可接受的最大延迟时间,备库的apply lag只有在此限制之内,才允许FSFO。

如果无法维持已配置的数据丢失保证,主库上的redo生成将停止。为了避免长时间停顿,Observer或者目标备库可能会在第一次记录到无法发生FSFO之后,允许主库继续生成redo。此时若主库故障,将无法发生FSFO。

默认值为30秒,最小值为10秒。

DGMGRL> edit configuration set property faststartfailoverlaglimit=50;

 

6. 设置FastStartFailoverPmyShutdown属性

默认为true,表示在FastStartFailoverThreshold属性指定的秒数过去之后,使用ABORT选项关闭主数据库。

如果不希望由于 主库redo生成停止 或 主库与Observer和目标备库 失联时间超过FastStartFailoverThreshold指定时间而在触发FSFO后关闭主库,需要将其设置为假。

DGMGRL> edit configuration set property FastStartFailoverThreshold=false;

 

7. 设置自动恢复数据库属性

如果FastStartFailoverAutoReinstate属性设置为TRUE,在原主库故障修复后,会自动尝试将其恢复为新主库的备库。

DGMGRL> EDIT CONFIGURATION SET PROPERTY FASTSTARTFAILOVERAUTOREINSTATE=TRUE;

Property "faststartfailoverautoreinstate" updated

 

8. 启动Observer

ObserverConnectIdentifier用于指定Observer应如何连接并监视主备库。如果希望Observer使用不同于发送重做数据连接串的连接标识符,请为主库和目标备库设置此属性(可选)。

配置Observer(可选)

dgmgrl sys/xxxx@OBSRV_ORCL_DGMGRL

DGMGRL>edit database orcl set property ObserverConnectIdentifier='OBSRV_ORCL_DGMGRL';
DGMGRL>edit database orcl_dg set property ObserverConnectIdentifier='OBSRV_ORCL_DG_DGMGRL';

启动Observer

[oracle@localhost oradata]$ dgmgrl
...
DGMGRL> connect sys/oracle@testdb
Connected.

DGMGRL> start observer;
Observer started

 

9. 启用fast_start故障转移

DGMGRL> enable fast_start failover;
Enabled.

启用Fast_Start Failover时alert日志如下:

Fast-Start Failover (FSFO) has been enabled between:
  Primary = "testdb"
  Standby = "std_testdb"
Sat Jun 23 15:49:22 2018
FSFP started with pid=69, OS id=17552

 

10. 查看FSFO配置

DGMGRL> show fast_start failover;

Fast-Start Failover: ENABLED
  Threshold:          50 seconds
  Target:             std_testdb
  Observer:           test1.localdomain
  Lag Limit:          50 seconds (not in use)
  Shutdown Primary:   TRUE
  Auto-reinstate:     TRUE
  Observer Reconnect: (none)
  Observer Override:  FALSE

Configurable Failover Conditions
  Health Conditions:
    Corrupted Controlfile          YES
    Corrupted Dictionary           YES
    Inaccessible Logfile            NO
    Stuck Archiver                  NO
    Datafile Offline               YES

Oracle Error Conditions: (none)

也可以从v$database视图检查

SELECT fs_failover_status,
fs_failover_current_target,
fs_failover_threshold,
fs_failover_observer_present,
fs_failover_observer_host
FROM v$database;

 

六、 FSFO测试

测试环境描述:    
1操作系统:SUSE Linux 11  
2Oracle Cluster版本:N/A  
3Oracle数据库版本:12.1.0.2  
4架构:Dataguard+FSFO  
     
编号描述测试动作预期结果实际结果/备注
1计划外主库实例挂掉kill -9 pid_of_smon
或者
SQL > shutdown abort
Primary instance crash,standby instance进行切换。

切换后,原standby instance成primary instance.

在dgmgrl控制台可以看到ORA-16829: fast-start failover configuration is lagging,且原primary instance可以看到ORA-16661: the standby database needs to be reinstated
2分钟左右完成切换
2计划外备库实例挂掉kill -9 pid_of_smon
或者
SQL > shutdown abort
dgmgrl控制台主库报错ORA-16810: multiple errors or warnings detected for the database,备库报错ORA-01034: ORACLE not available备库挂掉,应用不受影响
3计划内关闭主库SQL > shutdown immediate主备库不切换,在dgmgrl控制台可以看到主库报错:Error: ORA-01034: ORACLE not available,备库提示信息:(*) Physical standby database 计划内维护
4计划内关闭备库SQL > shutdown immediate主备库不切换,在dgmgrl控制台可以看到主库报错:ORA-16829: fast-start failover configuration is lagging,备库提示信息:(*) Physical standby database (disabled)计划内维护
5重新启动失败数据库实例SQL > startup启动原primary库之后,自动变成physical standby角色。在完成Clearing online log之后,进行mrp的介质恢复。

在dgmgrl控制台,看到原primary状态从ORA-16661: the standby database needs to be reinstated,变成ORA-16657: reinstatement of database in progress,继而变成ORA-16829: fast-start failover configuration is lagging,待lag补齐之后最终变成Physical standby database 
重启的原primary库恢复正常大约5~10分钟,重启期间应用完全不受影响。
6主库监听挂掉kill -9 pid_of_listener应用无法连接。

主库和备库之间如果没有lag,处于standby redolog的recovery,则不受影响。

主库和备库之间如果有lag,则当备库启动时,需要使用archivelog的recovery,就会报错
ORA-01196: file n is inconsistent due to a failed media recovery session。Dgmgrl控制台报错备库 ORA-16664: unable to receive the result from a database
监听挂掉,应用无法连接数据库,需要手工启动监听。

注:已经添加自动重启监听脚本,发现监听宕掉,自动拉起监听。
7备库监听挂掉kill -9 pid_of_listener应用正常连接。

主库和备库之间如果没有lag,处于standby redolog的recovery,则不受影响。

主库和备库之间如果有lag,dgmgrl控制台主库报错:ORA-16810: multiple errors or warnings detected for the database,备库报错:ORA-12541: TNS:no listener
备库启动时,需要使用archivelog的recovery,就会报错
ORA-01196: file n is inconsistent due to a failed media recovery session。Dgmgrl控制台报错备库 ORA-16664: unable to receive the result from a database
应用连接正常,需要手工启动备库监听

注:已经添加自动重启监听脚本,发现监听宕掉,自动拉起监听。
8计划内切换主备库DGMGRL> switchover to 'fltrec_dg';在切换期间,应用连接报错ORA-16456: switchover to standby in progress or completed。

切换后,应用恢复正常。
大约2分钟左右完成切换

 

参考

https://docs.oracle.com/cd/E11882_01/server.112/e40771/sofo.htm#DGBKR390

https://www.oracle.com/technetwork/cn/tutorials/smiley-fsfo-088047-zhs.html

http://oracle-help.com/dataguard/configuring-fast-start-fail-over/

https://blog.youkuaiyun.com/Hehuyi_In/article/details/94384431

https://blog.youkuaiyun.com/Hehuyi_In/article/details/105258110

How to run Observer process as a background process (文档 ID 1084681.1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hehuyi_In

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值