Fast-Start Failover
基本概念
Fast-Start Failover是建立在broker基础上的一个快速故障转换的机制,通过fast-start failover可以自动检测primary的故障,然后自动的failover到预先指定的standby上面,这样可以最大化的减少故障时间,提高数 据库的可用性。
结构
Fast-Start Failover是在broker的基础上再增加了一个单独的observer,用来监控primary和standby数据库的状态,一旦primary不可用,observer就会自动的切换到指定的standby上面。
准备工作
1. 确保broker配置为运行在Max Availability模式。
2. 在primary和standby机器上都启用flashback database,这个在reinstate failed的数据库的时候要用。
3. 在运行observer的机器上安装DGMGRL工具,用于启动observer。
4. 配置tnsname.ora文件,保证observer能正常的连接到primary和standby数据库上面。
配置及启用Fast-Start Failover
在满足上面的条件之后在经过下面少许的配置就可以启用Fast-Start Failover了。
1. 配置每个数据库Failover的目标,这一步是决定当数据库出问题之后会自动failover到那个standby。
-- 配置torcla failover的目标
edit
database
torcla
set
property
'
FastStartFailoverTarget
'
=
'
torclb
'
;
-- 配置torclb failover的目标
edit
database
torclb
set
property
'
FastStartFailoverTarget
'
=
'
torcla
'
;
1. 设定FastStartFailoverThreshold值,这个设置是决定了primary坏了多长时间之后会执行自动的failover操作,这里我们设置的是30s。
EDIT
CONFIGURATION
SET
PROPERTY
FastStartFailoverThreshold
=
30
;
1. 启用Fast-Start Failover。
DGMGRL
>
ENABLE
FAST_START
FAILOVER
;
Enabled
.
1. 启动observer。
oracle
@
orainst
[
torcla
]:~
$
dgmgrl
sys
/
12345
@
torcla
.
mycompany
DGMGRL
for
Linux
:
Version
10.2.0.2.0
-
Production
Copyright
(
c
)
2000
,
2005
,
Oracle
.
All
rights
reserved
.
Welcome
to
DGMGRL
,
type
"
help
"
for
information
.
Connected
.
DGMGRL
>
start
observer
;
observer
started
1. 现在可以看看我们环境的状态了。
DGMGRL
>
show
configuration
verbose
Configuration
Name
:
FSF
Enabled
:
YES
Protection
Mode
:
MaxAvailability
Fast
-
Start
Failover
:
ENABLED
Databases
:
torcla
-
Primary
database
torclb
-
Physical
standby
database
-
Fast
-
Start
Failover
target
Fast
-
Start
Failover
Threshold
:
30
seconds
observer
:
orainst
.
desktop
.
mycompany
.
com
Current
status
for
"
FSF
"
:
SUCCESS
Fast-Start Failover的管理
Fast-Start Failover的工作过程
在启用了fast-start failover和observer之后,broker会来监控primary和standby数据库的状态,一旦primary数据库出现故障,observer会根据一定的程序来执行自动的failover操作。
1. 当发生下列情形是observer会尝试启动failover操作
• observer和primary数据库之间连接出现故障时
• 当primary数据库故障或者是RAC环境中所有instance都故障时
• 执行SHUTDOWN ABORT之后,特别注意正常的SHUTDOWN操作(NORMAL,IMMEDIATE,TRANSACTIONAL)不会引发failover操作
• 数据库文件OFFLINE除了最后一个数据库文件OFFLINE的情形,其他的情况下observer都会尝试在FastStartFailoverThreshold制定的时间之内重新连接数据库,如果还是无法连接之后才会执行自动failover操作。
2. 在FastStartFailoverThreshold指定的时间内重新连接数据库,在RAC环境中会尝试连接其他的instance。
3. 尝试时间结束后,observer将确定目标standby可用。下面的这些情形会导致failover失败
• fast-start failover没有启用
• observer无法连接到standby数据库
• standby与observer中记录的状态不一致
• observer在primary fail的时候正好没有运行,再次启动之后只能找到一个standby
• 目标standby没有和primary完成同步
• 目标standby是逻辑standby时,在V$DATABASE中显示LOADING DICTIONARY时
• 目标standby还能和primary正常通讯时
• 在V$DATABASE的列FS_FAILOVER_STATUS中显示了其他无法进行failover操作时
• 有手工failover正在进行时
4. 执行failover操作,使目标standby变成新的primary。
5. reinstate之前失败的primary
下面来个实际的failover例子.
先看看当前的primary,确定是torcla
DGMGRL
>
show
configuration
Configuration
Name
:
FSF
Enabled
:
YES
Protection
Mode
:
MaxAvailability
Fast
-
Start
Failover
:
ENABLED
Databases
:
torcla
-
Primary
database
torclb
-
Physical
standby
database
-
Fast
-
Start
Failover
target
Current
status
for
"
FSF
"
:
SUCCESS
然后登录到torcla上,执行一个SHUTDOWN ABORT命令
SYS
@
torcla
>
shutdown
abort
ORACLE
instance
shut
down
.
然后在observer里面我们可以看到自动failover了
DGMGRL
>
start
observer
;
observer
started
06
:
08
:
24.47
Tuesday
,
September
01
,
2009
Initiating
fast
-
start
failover
to
database
"
torclb
"
...
Performing
failover
NOW
,
please
wait
...
Failover
succeeded
,
new
primary
is
"
torclb
"
06
:
08
:
33.49
Tuesday
,
September
01
,
2009
再看此时的状态,primary已经换成torclb了,不过此时torcla是不可用的
DGMGRL
>
show
configuration
Configuration
Name
:
FSF
Enabled
:
YES
Protection
Mode
:
MaxAvailability
Fast
-
Start
Failover
:
ENABLED
Databases
:
torcla
-
Physical
standby
database
(
disabled
)
-
Fast
-
Start
Failover
target
torclb
-
Primary
database
Current
status
for
"
FSF
"
:
Warning
:
ORA
-
16608
:
one
or
more
databases
have
warnings
再将torcla启动到mount,接着就能看到observer会自动的reinstate torcla
DGMGRL
>
start
observer
;
observer
started
06
:
11
:
13.45
Tuesday
,
September
01
,
2009
Initiating
reinstatement
for
database
"
torcla
"
...
Reinstating
database
"
torcla
"
,
please
wait
...
Operation
requires
shutdown
of
instance
"
torcla
"
on
database
"
torcla
"
Shutting
down
instance
"
torcla
"
...
ORA
-
01109
:
database
not
open
Database
dismounted
.
ORACLE
instance
shut
down
.
Operation
requires
startup
of
instance
"
torcla
"
on
database
"
torcla
"
Starting
instance
"
torcla
"
...
ORACLE
instance
started
.
Database
mounted
.
Continuing
to
reinstate
database
"
torcla
"
...
Reinstatement
of
database
"
torcla
"
succeeded
06
:
12
:
20.07
Tuesday
,
September
01
,
2009
查看Fast-Start Failover状态
通过SHOW CONFIGURATION VERBOSE命令可以查看Fast-Start Failover的基本运行状态
DGMGRL
>
SHOW
CONFIGURATION
VERBOSE
Configuration
Name
:
FSF
Enabled
:
YES
Protection
Mode
:
MaxAvailability
Fast
-
Start
Failover
:
ENABLED
Databases
:
torcla
-
Primary
database
torclb
-
Physical
standby
database
-
Fast
-
Start
Failover
target
Fast
-
Start
Failover
Threshold
:
30
seconds
observer
:
orainst
.
desktop
.
mycompany
.
com
Current
status
for
"
FSF
"
:
SUCCESS
要查看Fast-Start Failover更多的信息就要查看V$DATABASE视图中的相关的列了。
FS_FAILOVER_STATUS
这个列显示了Fast-Start Failover的状态,通过查看这个列我们可以知道数据库时处于什么状态之中,详细的状态信息在
这里。
FS_FAILOVER_CURRENT_TARGET
当前数据库的failover的目标数据库
FS_FAILOVER_THRESHOLD
执行自动failover的时间超时值
FS_FAILOVER_observer_PRESENT
是否启动了observer,通过查看这个列我们可以知道是否有observer在监控着这个数据库
FS_FAILOVER_observer_HOST
监控此数据库的observer所在的位置
SYS
@
torclb
>
col
FS_FAILOVER_STATUS
for
a25
SYS
@
torclb
>
col
FS_FAILOVER_CURRENT_TARGET
for
a10
SYS
@
torclb
>
col
FS_FAILOVER_THRESHOLD
for
999
SYS
@
torclb
>
col
FS_FAILOVER_observer_PRESENT
for
a4
SYS
@
torclb
>
col
FS_FAILOVER_observer_HOST
for
a30
SYS
@
torclb
>
select
FS_FAILOVER_STATUS
,
FS_FAILOVER_CURRENT_TARGET
,
FS_FAILOVER_THRESHOLD
,
FS_FAILOVER_observer_PRESENT
,
FS_FAILOVER_observer_HOST
from
v
$
database
;
FS_FAILOVER_STATUS
FS_FAILOVER_CURRENT_TARGET
FS_FAILOVER_THRESHOLD
FS_FAILOVER_observer_PRESENT
FS_FAILOVER_observer_HOST
-----------------------
-- ---------- --------------------- ---- ------------------------------
SYNCHRONIZED
torclb
30
YES
orainst
.
desktop
.
mycompany
.
com
禁用Fast-Start Failover
禁用Fast-Start Failover的命令为
DISABLE
FAST_START
FAILOVER
[
FORCE
]
加上FORCE之后将会强行在执行DISABLE命令的数据库以及这个数据库可连通的其他数据库上面上禁用Fast-Start Failover,而其他无法连接上的数据库将保持原来的状态;不加FROCE时如果有那个数据库暂时无法连接的话那么DISABLE操作将会失败。所以 在当primary和standby数据库的网络连接良好的情况下要使用不带FORCE的命令。
通常需要使用FORCE的情形
• 当因为网络问题造成primary无法和observer及那些已完成同步的standby通讯时,primary将会停止工作,如果 primary的恢复时间可期,且想要primary继续工作的话就需要使用FORCE选项暂时在primary上禁用fast-start failover,不过之前一定要检查看数据库有没有自动failover。
• 当primary和standby没有完成同步的时候想要手工的执行failover的命令,在fast-start failover启用的时候是无法执行的,这时候也需要使用FORCE选项强行禁用fast-start failover。
• 在fast-start failover失败之后还想将数据库failover到其他可用的standby上时也需要先使用FORCE强制禁用fast-start failover然后在手工进行failover操作。
• 如果确定有问题的primary可以很快的恢复,此时不想让fast-start failover自动failover,也可以使用FORCE选项强行禁用fast-start failover。
Observer管理
启用observer的操作很简单,使用DGMGRL连接到数据库,然后执行START OBSERVER命令就行了。
要启动observer的话必须使用SYS连接到DGMGRL,同一时间只能启动一个observer,如果尝试启动多个observer将会收到这样的消息
ORA
-
16647
:
could
not
start
more
than
one
observer
要停止一个observer的话只需要用DGMGRL连接到数据库,然后执行STOP OBSERVER命令就行了。
要确定一个数据库是否在observer的监视中必须要去查看V$DATABASE视图中的 FS_FAILOVER_OBSERVER_PRESENT和FS_FAILOVER_OBSERVER_HOST。只有当 FS_FAILOVER_OBSERVER_PRESENT为YES的时候才说明这个数据库时处于observer的监控之中。
同时数据库是否有observer监视这个信息我们也可以从DGMGRL中查看到
DGMGRL
>
show
database
torcla
statusreport
STATUS
REPORT
INSTANCE_NAME
SEVERITY
ERROR_TEXT
*
ERROR
ORA
-
16820
:
Fast
-
Start
Failover
observer
is
no
longer
observing
this
database
在启动observer的时候,observer会自动的在当前目录中生成一个默认名字为fsfo.dat的二进制文件,这个文件里面保存了 fast-start failover的配置信息,同时也包含了到primary和standby的连接方式。也可以在启动observer的时候使用FILE参数指定配置文 件的位置,命令如下
START
OBSERVER
[
FILE
=<
observer
configuration
file
>];
参考至:http://www.dbabeta.com/2009/learn-data-guard-broker_fast-start-failover.html
如有错误,欢迎指正