Data Guard Broker系列之六:Fast-Start Failover

fanhongjie發表於2010-12-29

轉自:


[@more@]Fast-Start Failover


top基本概念

Fast-Start Failover是建立在broker基礎上的一個快速故障轉換的機制,透過fast-start failover可以自動檢測primary的故障,然後自動的failover到預先指定的standby上面,這樣可以最大化的減少故障時間,提高資料庫的可用性。


top結構

Fast-Start Failover是在broker的基礎上再增加了一個單獨的observer,用來監控primary和standby資料庫的狀態,一旦primary不可用,observer就會自動的切換到指定的standby上面。


top準備工作

  1. 確保broker配置為執行在Max Availability模式。
  2. 在primary和standby機器上都啟用flashback database,這個在reinstate failed的資料庫的時候要用。
  3. 在執行observer的機器上安裝DGMGRL工具,用於啟動observer。
  4. 配置tnsname.ora檔案,保證observer能正常的連線到primary和standby資料庫上面。


top配置及啟用Fast-Start Failover

在滿足上面的條件之後在經過下面少許的配置就可以啟用Fast-Start Failover了。

  1. 配置每個資料庫Failover的目標,這一步是決定當資料庫出問題之後會自動failover到那個standby。
  2. -- 配置torcla failover的目標edit database torcla set property 'FastStartFailoverTarget'='torclb';-- 配置torclb failover的目標edit database torclb set property 'FastStartFailoverTarget'='torcla';
  3. 設定FastStartFailoverThreshold值,這個設定是決定了primary壞了多長時間之後會執行自動的failover操作,這裡我們設定的是30s。
  4. EDIT CONFIGURATION SET PROPERTY FastStartFailoverThreshold = 30;
  5. 啟用Fast-Start Failover。
  6. DGMGRL> ENABLE FAST_START FAILOVER;Enabled.
  7. 啟動observer。
  8. 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
  9. 現在可以看看我們環境的狀態了。
  10. 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


topFast-Start Failover的管理


topFast-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 abortORACLE instance shut down.

然後在observer裡面我們可以看到自動failover了

DGMGRL> start observer;observer started
06:08:24.47 Tuesday, September 01, 2009Initiating 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, 2009Initiating 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" succeeded06:12:20.07 Tuesday, September 01, 2009


top檢視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 a25SYS@torclb> col FS_FAILOVER_CURRENT_TARGET for a10SYS@torclb> col FS_FAILOVER_THRESHOLD for 999SYS@torclb> col FS_FAILOVER_observer_PRESENT for a4SYS@torclb> col FS_FAILOVER_observer_HOST for a30SYS@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_FAILOVE FS_FAILOVER_THRESHOLD FS_F FS_FAILOVER_observer_HOST

-----------------------
-- ---------- --------------------- ---- ------------------------------SYNCHRONIZED torclb 30 YES orainst.desktop.mycompany.com


top禁用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。


topObserver管理

啟用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 statusreportSTATUS 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>];

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/73920/viewspace-1043822/,如需轉載,請註明出處,否則將追究法律責任。

相關文章