您好,登錄后才能下訂單哦!
這篇文章主要介紹“Oracle RAC的Failover分為哪幾種”,在日常操作中,相信很多人在Oracle RAC的Failover分為哪幾種問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Oracle RAC的Failover分為哪幾種”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
OracleRAC同時具備HA(HighAvailiablity)和LB(LoadBalance).而其高可用性的基礎就是Failover(故障轉移).它指集群中任何一個節點的故障都不會影響用戶的使用,連接到故障節點的用戶會被自動轉移到健康節點,從用戶感受而言,是感覺不到這種切換。
Oracle10gRAC的Failover可以分為3種:
1.Client-SideConnecttimeFailover
2.TAF
3.Service-SideTAF
注意事項:不能在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的工作方式是它對應用程序的可用性沒有太大幫助。
所以從Oracle8.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)
)
)
)
三.Service-Side TAF
Service-Side TAF的配置參考: How To Configure Server Side Transparent Application Failover [ID 460982.1]
Service-Side TAF可以看作是TAF的一種變種,首先Service-SideTAF也是TAF,所有TAF的特點它都有,其次這種TAF是在服務器上配置的,而不像TAF是在客戶端配置的。
Client-SideTAF是在客戶端修改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配置向導,也可以用命令行的方式配置。
3.1用DBCA配置Service
1).運行DBCA,選擇ORACLE RACApplication Clusters database
2).在第二個界面選擇:Services Management
3).第三個界面會出現RAC數據庫列表,用戶可以在這個列表中選擇要配置Service的數據庫
4).在Serice配置界面中,單擊Add創建新的Service,輸入service名字。在Instance列表框定義實例角色,選擇那個service1作為Preferred(首選實例),Service2作為 availiable(后備實例)。TAFPolicy有三個選項:None,Basic,Pre-connect。我們選Basic。最后點擊Finish,完成Service配置。
5)在結束Service配置后,服務會自動啟動。
3.2用srvctl命令配置Service
用命令行方式配置Service對遠程維護很有用。先來看一下相關命令
1)創建service
#Srvctl add service -d -s -r "preferred-instance-list" -a "available-instance-list" -P
其中TAF-Policy可選:basic和preconnect。
例如:srvctl add service -d RAC -s Service2 -r "RAC1,RAC2" -a "RAC3,RAC4" -P basic
注意:srvctl add service中,只有perferred才會創建服務。即在OCR中注冊一個ora.raw.dmm.Raw1.Srv的服務。
2)查看配置信息
#srvctl config service -d database_name [-s service_name][-a]
如果這里不指定"-s service-name",就會顯示所有Service的配置,這些配置包括preferred和availableinstance.使用-a選項,還會顯示TAF相關信息。
3)是否自動運行service
數據庫啟動時,會自動啟動所有的Service。有時為了為了維護需要,需要禁用這個特性,在維護完成后再啟動這個特性。
#srvctl enable/disable service -d database-name -s service-name -i instance-name
4)啟動service
#srvctl start service -d -s -i instance-name -o start -option -cconnect-string-q
如果不指定service-name,則所有的service都會被啟動,可以使用逗號分隔方式,同時啟動多個service。-i指定在那個實例上啟動service。
5)停止service
#srvctl stop service -d -s -iinstance-name -cconnect -string-q-f
其中-f選項可以強制關閉service,并中斷了其所有用戶的連接。
6)查看service狀態
#srvctl status service -d -s service-name- i instance-name -f -v
其中-f可以顯示被disable的instance信息,而-v可以顯示詳細輸出
7)刪除service
#srvctl remove service -d database-name -s service-name -i instance-name [-f]
注意:在使用srvctl創建service時,需要注意TAF策略選項必須通過dbms_service包來配置。
示例:
Begin
dbms_service.modify_service(Service_name = '>Service1',
Failover_method => dbms_service.failover_method_basic,
Failover_type => dbms_service.failover_type_select,
Failover_retries => 180,
Failover_delay => 5);
End;
3.3配置Service的注意事項
1).數據庫的服務名是用service_name參數來指定的,一個數據庫可以有多個服務名,但是service_name最長是4kb,不要手工來修改這個參數
2)最多可以創建64個service,每個數據庫有2個隱含的service,因此留給用戶的就只有62個service。不能修改這兩個隱含service的配置,并且也不能手工啟動或停止這2個服務。這兩個隱含的service分別是:SYS$BACKGROUND和SYS$USERS.
3)當使用dbca配置Service時,dbca會自動更新OCR,啟動Service,當刪除service時,會停止service,并更新OCR.
4)使用srvctl這個工具時,命令只更新OCR中的配置,不會更新data dctionary和listener中的信息,因此還需要使用dbma_servie包來更新data dictionary,手工更改listener配置文件。故推薦使用DBCA工具來配置更改service配置
5)如果客戶端想通過Service方式連接數據庫,需要在tns條目中使用service_name方式引用數據庫。如:
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)
)
)
注意:無論是使用dbca工具還是使用srvctl命令來配置service,都無法配置TAF的TYPE,DELAY,RETRIES三個屬性,必須使用dbms_service包來修改這些屬性。
11g中TAF的TYPE,DELAY,RETRIES三個屬性配置可以用srvctl目錄配置了。
注意:
客戶端tnsnames.ora 中的service_name 要寫我們的service-side TAF的名稱。可以通過一下方式查看:
SQL> showparameter service
NAME TYPE VALUE
----------------------------------------------- -----------------
service_names string dave, dave_taf
然后可以驗證:
SQL>show parameter instance_name
NAME TYPE VALUE
-----------------------------------------------------
instance_name string rac1
SQL>select sid from v$mystat where rownum=1;
SID
----------
146
SQL>select failover_type,failover_method,failed_over from v$session where sid=146;
FAILOVER_TYPE FAILOVER_METHOD FAILED_OVER
----------------------------------------------------
SELECT BASIC YES
--如果客戶端寫的不是SERVICE-SIDE TAF的名稱,而是實例的名稱,那么不影響數據庫的連接,但是無法實現TAF功能。
四.Srvctl命令測試實例
1.使用srvctl命令創建dmm
[oracle@raw2bin]$srvctl add service -d raw -s dmm -r"raw1,raw2" -P basic
$crs_stat-t
省略..................................................
$srvctl add service -d raw -s dmm -r raw1 -a raw2 -P basic
注意:srvctl add service中,只有perferred才會創建服務。即在OCR中注冊一個ora.raw.dmm.Raw1.Srv的服務。
3)確認服務創建成功,offline表示還沒有啟動
$crs_stat-t
4)配置這個服務自啟動
$srvctl enable service -d raw -s dmm
5)啟動服務
$srvctl start service -d raw -s dmm
6)確認服務狀態。Online說明已啟動
$crs_stat-t
新建的服務會自動添加到初始話參數中:
show parameter service
7)用serviceTAF修改配置,需要用dbms_service.Modify_service包。
Begin
Dbms_service.modify_service(Service_name => 'dmm',
Failover_method => dbms_service.failover_method_basic,
Failover_type => dbms_service.failover_type_select,
Failover_retries => 180,
Failover_delay => 5);
End;
/
8)確認參數已經生效
select name,failover_method,failover_type,goal,clb_goal from dba_services;
9)也可以用srvctl命令查看配置情況
$srvctl config service -d raw -s dmm -a
10)刪除Service
--先關閉service:
$srvctl stop service -d raw -s dmm
$srvctl disable service -d raw -s dmm
--再刪除服務:
$srvctl remove service -d raw -s dmm
如果該命令清楚不掉,我們可以加上-f參數
$srvctl remove service -d raw -s dmm -f
OCR中的信息已經被刪除了,但是數據字典中的還有該service的內容,繼續清除數據字典中的內容。
先查看數據字典內容:
select name,failover_method,failover_type,goal,clb_goal from dba_services;
清除數據字典里的內容:
begin
dbms_service.delete_service(service_name => 'dmm');
end;
/
再次查詢數據字典,沒有了數據。清除完成
select name,failover_method,failover_type,goal,clb_goal from dba_services
到此,關于“Oracle RAC的Failover分為哪幾種”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。