天天看點

10g RAC TAF介紹

Oracle 10g RAC TAF介紹

  

  Oracle RAC 同時具備HA(High Availiablity) 和LB(LoadBalance). 而其高可用性的基礎就是Failover(故障轉移). 它指叢集中任何一個節點

的故障都不會影響使用者的使用,連接配接到故障節點的使用者會被自動轉移到健康節點,從使用者感受而言, 是感覺不到這種切換。

Oracle 10g RAC 的Failover 可以分為3種:

1. Client-Side Connect time Failover

2. Client-Side TAF

3. Service-Side TAF

注意事項: 不能在listener.ora 檔案中設定GLOBAL_NAME, 因為這個參數會禁用Connect-time Failover 和 Transparent Application Failover.

一.Client-Side Connect Time Failover

Client-Side Connect Time Failover的含義:如果使用者端tnsname 中配置了多個位址,使用者發起連接配接請求時,會先嘗試連接配接位址表中的第一

個位址,如果這個連接配接嘗試失敗,則繼續嘗試使用第二個位址,直至連接配接成功或者周遊了所有的位址。

這種Failover的特點:隻在建立連接配接那一時刻起作用,也就是說,這種Failover方式隻在發起連接配接時才會去感覺節點故障,如果節點沒有

反應,則自動嘗試位址清單中的下一個位址。一旦連接配接建立之後,節點出現故障都不會做處理,從用戶端的表現就是會話斷開了,使用者

程式必須重建立立連接配接。

啟用這種Failover的方法就是在用戶端的tnsnames.ora中添加FAILOVER=ON 條目,這個參數預設就是ON,是以即使不添加這個條目,

用戶端也會獲得這種Failover能力。

示例:

VICTOR =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = node01-vip)(PORT = 1521))

    (ADDRESS = (PROTOCOL = TCP)(HOST = node02-vip)(PORT = 1521))

    (LOAD_BALANCE = yes)

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = vic)

    )

  )

注:node01-vip,node02-vip要添加到hosts 檔案中,不然可能解析不了。

二. Client-Side TAF(Transparent Application Failover)

現在的大部分流行的應用系統(如:weblogic, Jboss),都是啟動時就建立若幹到資料庫的長連接配接,在應用程式整個生命周期内重用這些

連接配接。 而Client-Side Connet Time Failover的工作方式使它對應用程式的可用性沒有太大幫助。

是以從Oracle 8.1.5 版本隻有引入了新的Failover 機制—TAF。 所謂TAF,就是連接配接建立以後,應用系統運作過程中,如果某個執行個體發

生故障,連接配接到這個執行個體上的使用者會被自動遷移到其他的健康執行個體上。對于應用程式而言,這個遷移過程是透明的,不需要使用者的介

入,當然,這種透明要是有引導的,因為使用者的未送出事務會復原。 相對與Client-Side Connect Time Failover的使用者程式中斷(抛出

連接配接錯誤,使用者必須重新開機應用程式),TAF這種方式在提高HA上有了很大的進步。

TAF 的配置也很簡單,隻需要在用戶端的tnsnames.ora中添加FAILOVER_MODE配置項。這個條目有4個子項目需要定義。

1. METHOD: 使用者定義何時建立到其執行個體的連接配接,有BASIC 和 PRECONNECT 兩種可選值。

BASIC: 是指在感覺到節點故障時才建立到其他執行個體的連接配接。

PRECONNECT:是在最初建立連接配接時就同時建立到所有執行個體的連接配接,當發生故障時,立刻就可以切換到其他鍊路上。

注意:server-side TAF的failover方式無法設定為PRECONNECT,隻能設定為BASIC,10g,11g都是如此。是以,如果failover方式要設定

為PRECONNECT,就隻能使用client-side TAF。

兩種方法比較: BASIC方式在Failover時會有時間延遲,PRECONNECT方式雖然沒有時間延遲,但是建立多個備援連接配接會消耗更多資源,

兩者就是是用時間換資源和用資源換時間的差別。

2. TYPE: 用于定義發生故障時對完成的SQL 語句如何處理,其中有2種類型:session 和select.

這2種方式對于未送出的事務都會自動復原,差別在于對select 語句的處理,對于select,使用者正在執行的select語句會被轉移到新的執行個體

上,在新的節點上繼續傳回後續結果集,而已經傳回的記錄集則抛棄。

假設使用者正在節點1上執行查詢,整個結果集共有10000條記錄,現在已從節點1上傳回9000條記錄,這時節點1當機,使用者連接配接被轉移到節

點2上,如果是session模式,則需要重新執行查詢語句;如果是select方式,會從節點2上繼續傳回剩下的1000條記錄,而已經從節點1返

回的9000條記錄不會重複傳回給使用者,對于使用者而言,感受不到這種切換。

顯然為了實作select 方式,Oracle 必須為每個session儲存更多的内容,包括遊标,使用者上下文等,需要更多的資源也是用資源換時間

的方案。

3. DELAY 和 RETRIES: 這2個參數分别代表重試間隔時間和重試次數。

示例:

DCSRV =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = node01-vip)(PORT = 1521))

    (ADDRESS = (PROTOCOL = TCP)(HOST = node02-vip)(PORT = 1521))

    (LOAD_BALANCE = yes)

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = dcsrv)

      (FAILOVER_MODE =

        (TYPE = SELECT)

        (METHOD = BASIC)

        (RETRIES = 180)

        (DELAY = 5)

      )

    )

  )

三. Service-Side TAF

Service-SideTAF 可以看作是TAF的一種變種,首先Service-SideTAF也是TAF,所有TAF的特點它都有,其次這種TAF是在伺服器上配

置的,而不像TAF是在用戶端配置的。

Client-Side TAF 是在用戶端修改tnsnames.ora 檔案來配置的,如果有很多用戶端使用這個資料庫,那麼每次微小調整都需要把所有的

計算機更改一遍,既低效又容易出錯。而Service-Side TAF 通過結合Service,在資料庫裡儲存FAIL_MODE的配置,把所有的TAF配置

儲存在資料字典中,進而省去了用戶端的配置工作,現在用戶端的TNS檔案就不需要任何TAF的配置選項了。

從配置參數而言,Service-Side TAF和TAF 相比多了一個Instance Role(執行個體角色)的概念。 所謂的執行個體角色,就是當有多個Instance 參

與一個Service時,可以配置優先使用哪一個Instance為使用者提供服務。使用者共有兩種可選角色。

PREFERRED:首選執行個體,會優先選擇擁有這個角色的執行個體提供服務。

AVAILABLE: 後備執行個體,使用者連接配接會優先連接配接PREFFERRED的Instance,當PREFERRED的Instance不可用時,才會被轉到AVAILBALE

的Instance上。

要使用Server-Side TAF,第一步,必須配置Service。 Service 可以在建立資料庫時建立,也可以在建立資料庫之後修改,既可以使用

dbca 配置向導,也可以用指令行的 方式配置。第二步,必須通過dbms_service包來配置TAF政策選項。

注意:server-side的TAF政策會覆寫掉client-side的TAF政策,是以如果使用client-side TAF連接配接資料庫而不想使用server-side的政策,

就隻能使用另外一個service。

RAC