Oracle RAC Failover 详解
2019獨角獸企業重金招聘Python工程師標準>>>
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)
?)
??????)
????)
轉載于:https://my.oschina.net/u/2249726/blog/417546
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Oracle RAC Failover 详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ie6 javascript js 缺少
- 下一篇: Ubuntu12环境下Thin+rail