標籤:
Oracle RAC 同時具備HA(High Availiablity) 和LB(LoadBalance). 而其高可用性的基礎就是Failover(容錯移轉). 它指叢集中任何一個節點的故障都不會影響使用者的使用,串連到故障節點的使用者會被自動轉移到健康節點,從使用者感受而言, 是感覺不到這種切換。
Oracle 10g RAC 的Failover 可以分為3種:
1. Client-Side Connect time Failover
2. 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能力。
樣本:
RAC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521))
(LOAD_BALANCE=YES)
(
CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=RAC)
)
)
註:rac1-vip,rac2-vip要添加到hosts 檔案中,不然可能解析不了。
二. TAF(Transparent Application Failover)
這塊的配置,參考:
10g & 11g Configuration of TAF(Transparent Application Failover) and Load Balancing [ID 453293.1]
現 在的大部分流行的應用系統(如: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: 是在最初建立串連時就同時建立到所有執行個體的串連,當發生故障時,立刻就可以切換到其他鏈路上。
兩種方法比較: BASIC方式在Failover時會有時間延遲,PRECONNECT方式雖然沒有時間延遲,但是建立多個冗餘串連會消耗更多資源,兩者就是是用時間換資源和用資源換時間的區別。
2. TYPE: 用於定義發生故障時對完成的SQL 語句如何處理,其中有2種類型:session 和select.
這2種方式對於未提交的事務都會自動復原,區別在於對select 語句的處理,對於select,使用者正在執行的select語句會被轉移到新的執行個體上,在新的節點上繼續返回後續結果集,而已經返回的記錄集則拋棄。
假 設使用者正在節點1上執行查詢,整個結果集共有100條記錄,現在已從節點1上返回10條記錄,這時節點1宕機,使用者串連被轉移到節點2上,如果是 session模式,則需要重新執行查詢語句;如果是select方式,會從節點2上繼續返回剩下的90天記錄,而已經從節點1返回的10條記錄不會重複 返回給使用者,對於使用者而言,感受不到這種切換。
顯然為了實現select 方式,Oracle 必須為每個session儲存更多的內容,包括遊標,使用者上下文等,需要更多的資源也是用資源換時間的方案。
3. DELAY 和 RETRIES: 這2個參數分別代表稍候再試時間和重試次數。
樣本:
RAC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521))
(LOAD_BALANCE=YES)
(
CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=RAC)
(
FAILOVER_MODE=
(TYPE=session)
(METHOD=basic)
(RETRIES=180)
(DELAY=5)
)
)
)
Oracle RAC Failover 詳解