OracleRAC的Failover分為哪幾種

這篇文章主要介紹“Oracle RAC的Failover分為哪幾種”,在日常操作中,相信很多人在Oracle RAC的Failover分為哪幾種問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”O(jiān)racle RAC的Failover分為哪幾種”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)文昌免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了近千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

OracleRAC同時(shí)具備HA(HighAvailiablity)和LB(LoadBalance).而其高可用性的基礎(chǔ)就是Failover(故障轉(zhuǎn)移).它指集群中任何一個(gè)節(jié)點(diǎn)的故障都不會(huì)影響用戶的使用,連接到故障節(jié)點(diǎn)的用戶會(huì)被自動(dòng)轉(zhuǎn)移到健康節(jié)點(diǎn),從用戶感受而言,是感覺(jué)不到這種切換。

Oracle10gRAC的Failover可以分為3種:
1.Client-SideConnecttimeFailover
2.TAF
3.Service-SideTAF

注意事項(xiàng):不能在listener.ora文件中設(shè)置GLOBAL_NAME,因?yàn)檫@個(gè)參數(shù)會(huì)禁用Connect-time Failover和Transparent Application Failover.


一.Client-Side Connect Time Failover
Client-Side Connect Time Failover的含義:如果用戶端tnsname中配置了多個(gè)地址,用戶發(fā)起連接請(qǐng)求時(shí),會(huì)先嘗試連接地址表中的第一個(gè)地址,如果這個(gè)連接嘗試失敗,則繼續(xù)嘗試使用第二個(gè)地址,直至連接成功或者遍歷了所有的地址。


這種Failover的特點(diǎn): 只在建立連接那一時(shí)刻起作用,也就是說(shuō),這種Failover方式只在發(fā)起連接時(shí)才會(huì)去感知節(jié)點(diǎn)故障,如果節(jié)點(diǎn)沒(méi)有反應(yīng),則自動(dòng)嘗試地址列表中的下一個(gè)地址。一旦連接建立之后,節(jié)點(diǎn)出現(xiàn)故障都不會(huì)做處理,從客戶端的表現(xiàn)就是會(huì)話斷開(kāi)了,用戶程序必須重新建立連接。


啟用這種Failover的方法就是在客戶端的tnsnames.ora中添加FAILOVER=ON條目,這個(gè)參數(shù)默認(rèn)就是ON,所以即使不添加這個(gè)條目,客戶端也會(huì)獲得這種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]

現(xiàn)在的大部分流行的應(yīng)用系統(tǒng)(如:weblogic,Jboss),都是啟動(dòng)時(shí)就建立若干到數(shù)據(jù)庫(kù)的長(zhǎng)連接,在應(yīng)用程序整個(gè)生命周期內(nèi)重用這些連接。而Client-Side Connet Time Failover的工作方式是它對(duì)應(yīng)用程序的可用性沒(méi)有太大幫助。

所以從Oracle8.1.5版本只有引入了新的Failover機(jī)制—-TAF。所謂TAF,就是連接建立以后,應(yīng)用系統(tǒng)運(yùn)行過(guò)程中,如果某個(gè)實(shí)例發(fā)生故障,連接到這個(gè)實(shí)例上的用戶會(huì)被自動(dòng)遷移到其他的健康實(shí)例上。對(duì)于應(yīng)用程序而言,這個(gè)遷移過(guò)程是透明的,不需要用戶的介入,當(dāng)然,這種透明要是有引導(dǎo)的,因?yàn)橛脩舻奈刺峤皇聞?wù)會(huì)回滾。相對(duì)與Client-Side Connect Time Failover的用戶程序中斷,拋出連接錯(cuò)誤,用戶必須重啟應(yīng)用程序,TAF這種方式在提高HA上有了很大的進(jìn)步。

TAF的配置也很簡(jiǎn)單,只需要在客戶端的tnsnames.ora中添加FAILOVER_MODE配置項(xiàng)。這個(gè)條目有4個(gè)子項(xiàng)目需要定義。
1.METHOD:用戶定義何時(shí)創(chuàng)建到其實(shí)例的連接,有BASIC和PRECONNECT兩種可選值。
BASIC:是指在感知到節(jié)點(diǎn)故障時(shí)才創(chuàng)建到其他實(shí)例的連接。
PRECONNECT:是在最初建立連接時(shí)就同時(shí)建立到所有實(shí)例的連接,當(dāng)發(fā)生故障時(shí),立刻就可以切換到其他鏈路上。
兩種方法比較:BASIC方式在Failover時(shí)會(huì)有時(shí)間延遲,PRECONNECT方式雖然沒(méi)有時(shí)間延遲,但是建立多個(gè)冗余連接會(huì)消耗更多資源,兩者就是是用時(shí)間換資源和用資源換時(shí)間的區(qū)別。

2.TYPE:用于定義發(fā)生故障時(shí)對(duì)完成的SQL語(yǔ)句如何處理,其中有2種類型:session和select.
這2種方式對(duì)于未提交的事務(wù)都會(huì)自動(dòng)回滾,區(qū)別在于對(duì)select語(yǔ)句的處理,對(duì)于select模式,用戶正在執(zhí)行的select語(yǔ)句會(huì)被轉(zhuǎn)移到新的實(shí)例上,在新的節(jié)點(diǎn)上繼續(xù)返回后續(xù)結(jié)果集,而已經(jīng)返回的記錄集則拋棄。假設(shè)用戶正在節(jié)點(diǎn)1上執(zhí)行查詢,整個(gè)結(jié)果集共有100條記錄,現(xiàn)在已從節(jié)點(diǎn)1上返回10條記錄,這時(shí)節(jié)點(diǎn)1宕機(jī),用戶連接被轉(zhuǎn)移到節(jié)點(diǎn)2上。如果是session模式,則需要重新執(zhí)行查詢語(yǔ)句;如果是select方式,會(huì)從節(jié)點(diǎn)2上繼續(xù)返回剩下的90天記錄,而已經(jīng)從節(jié)點(diǎn)1返回的10條記錄不會(huì)重復(fù)返回給用戶,對(duì)于用戶而言,感受不到這種切換。

顯然為了實(shí)現(xiàn)select方式,Oracle必須為每個(gè)session保存更多的內(nèi)容,包括游標(biāo),用戶上下文等,需要更多的資源也是用資源換時(shí)間的方案。

3.DELAY和RETRIES:這2個(gè)參數(shù)分別代表重試間隔時(shí)間和重試次數(shù)。
示例:
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的特點(diǎn)它都有,其次這種TAF是在服務(wù)器上配置的,而不像TAF是在客戶端配置的。

Client-SideTAF是在客戶端修改tnsnames.ora文件來(lái)配置的,如果有很多客戶端使用這個(gè)數(shù)據(jù)庫(kù),那么每次微笑調(diào)整都需要把所有的計(jì)算機(jī)更改一遍,既低效又容易出錯(cuò)。而Service-Side TAF通過(guò)結(jié)合Service,在數(shù)據(jù)庫(kù)里保存FAIL_MODE的配置,把所有的TAF配置保存在數(shù)據(jù)字典中,從而省去了客戶端的配置工作,現(xiàn)在客戶端的TNS文件就不需要任何TAF的配置選項(xiàng)了。

從配置參數(shù)而言,Service-Side TAF和TAF相比多了一個(gè)Instance Role(實(shí)例角色)的概念。所謂的實(shí)例角色,就是當(dāng)有多個(gè)Instance參與一個(gè)Service時(shí),可以配置優(yōu)先使用哪一個(gè)Instance為用戶提供服務(wù)。用戶共有兩種可選角色。

PREFERRED:首選實(shí)例,會(huì)優(yōu)先選擇擁有這個(gè)角色的實(shí)例提供服務(wù)。
AVAILABLE:后備實(shí)例,用戶連接會(huì)優(yōu)先連接PREFFERRED的Instance,當(dāng)PREFERRED的Instance不可用時(shí),才會(huì)被轉(zhuǎn)到AVAILBALE的Instance上。
要使用Server-Side TAF必須配置Service。Service可以在創(chuàng)建數(shù)據(jù)庫(kù)時(shí)創(chuàng)建,也可以在創(chuàng)建數(shù)據(jù)庫(kù)之后修改,既可以使用dbca配置向?qū)?,也可以用命令行的方式配置?/strong>

3.1用DBCA配置Service
1).運(yùn)行DBCA,選擇ORACLE RACApplication Clusters database
2).在第二個(gè)界面選擇:Services Management
3).第三個(gè)界面會(huì)出現(xiàn)RAC數(shù)據(jù)庫(kù)列表,用戶可以在這個(gè)列表中選擇要配置Service的數(shù)據(jù)庫(kù)
4).在Serice配置界面中,單擊Add創(chuàng)建新的Service,輸入service名字。在Instance列表框定義實(shí)例角色,選擇那個(gè)service1作為Preferred(首選實(shí)例),Service2作為   availiable(后備實(shí)例)。TAFPolicy有三個(gè)選項(xiàng):None,Basic,Pre-connect。我們選Basic。最后點(diǎn)擊Finish,完成Service配置。
5)在結(jié)束Service配置后,服務(wù)會(huì)自動(dòng)啟動(dòng)。

3.2用srvctl命令配置Service
用命令行方式配置Service對(duì)遠(yuǎn)程維護(hù)很有用。先來(lái)看一下相關(guān)命令
1)創(chuàng)建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才會(huì)創(chuàng)建服務(wù)。即在OCR中注冊(cè)一個(gè)ora.raw.dmm.Raw1.Srv的服務(wù)。

2)查看配置信息
#srvctl config service -d database_name [-s service_name][-a]
如果這里不指定"-s service-name",就會(huì)顯示所有Service的配置,這些配置包括preferred和availableinstance.使用-a選項(xiàng),還會(huì)顯示TAF相關(guān)信息。

3)是否自動(dòng)運(yùn)行service
數(shù)據(jù)庫(kù)啟動(dòng)時(shí),會(huì)自動(dòng)啟動(dòng)所有的Service。有時(shí)為了為了維護(hù)需要,需要禁用這個(gè)特性,在維護(hù)完成后再啟動(dòng)這個(gè)特性。
#srvctl enable/disable service -d database-name -s service-name -i instance-name

4)啟動(dòng)service
 #srvctl start service -d -s -i instance-name -o start -option -cconnect-string-q
如果不指定service-name,則所有的service都會(huì)被啟動(dòng),可以使用逗號(hào)分隔方式,同時(shí)啟動(dòng)多個(gè)service。-i指定在那個(gè)實(shí)例上啟動(dòng)service。

5)停止service
#srvctl stop service -d -s -iinstance-name -cconnect -string-q-f
其中-f選項(xiàng)可以強(qiáng)制關(guān)閉service,并中斷了其所有用戶的連接。

6)查看service狀態(tài)
#srvctl status service -d -s service-name- i instance-name -f -v
其中-f可以顯示被disable的instance信息,而-v可以顯示詳細(xì)輸出

7)刪除service
#srvctl remove service -d database-name -s service-name -i instance-name [-f]

注意:在使用srvctl創(chuàng)建service時(shí),需要注意TAF策略選項(xiàng)必須通過(guò)dbms_service包來(lái)配置。

示例:
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的注意事項(xiàng)
1).數(shù)據(jù)庫(kù)的服務(wù)名是用service_name參數(shù)來(lái)指定的,一個(gè)數(shù)據(jù)庫(kù)可以有多個(gè)服務(wù)名,但是service_name最長(zhǎng)是4kb,不要手工來(lái)修改這個(gè)參數(shù)

2)最多可以創(chuàng)建64個(gè)service,每個(gè)數(shù)據(jù)庫(kù)有2個(gè)隱含的service,因此留給用戶的就只有62個(gè)service。不能修改這兩個(gè)隱含service的配置,并且也不能手工啟動(dòng)或停止這2個(gè)服務(wù)。這兩個(gè)隱含的service分別是:SYS$BACKGROUND和SYS$USERS.

3)當(dāng)使用dbca配置Service時(shí),dbca會(huì)自動(dòng)更新OCR,啟動(dòng)Service,當(dāng)刪除service時(shí),會(huì)停止service,并更新OCR.

4)使用srvctl這個(gè)工具時(shí),命令只更新OCR中的配置,不會(huì)更新data dctionary和listener中的信息,因此還需要使用dbma_servie包來(lái)更新data dictionary,手工更改listener配置文件。故推薦使用DBCA工具來(lái)配置更改service配置

5)如果客戶端想通過(guò)Service方式連接數(shù)據(jù)庫(kù),需要在tns條目中使用service_name方式引用數(shù)據(jù)庫(kù)。如:
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)
   )
  )

注意:無(wú)論是使用dbca工具還是使用srvctl命令來(lái)配置service,都無(wú)法配置TAF的TYPE,DELAY,RETRIES三個(gè)屬性,必須使用dbms_service包來(lái)修改這些屬性。

11g中TAF的TYPE,DELAY,RETRIES三個(gè)屬性配置可以用srvctl目錄配置了。


注意:
客戶端tnsnames.ora 中的service_name 要寫我們的service-side TAF的名稱??梢酝ㄟ^(guò)一下方式查看:

SQL> showparameter service

NAME                                      TYPE           VALUE
----------------------------------------------- -----------------
service_names                      string           dave, dave_taf

然后可以驗(yàn)證:
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的名稱,而是實(shí)例的名稱,那么不影響數(shù)據(jù)庫(kù)的連接,但是無(wú)法實(shí)現(xiàn)TAF功能。



四.Srvctl命令測(cè)試實(shí)例

1.使用srvctl命令創(chuàng)建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才會(huì)創(chuàng)建服務(wù)。即在OCR中注冊(cè)一個(gè)ora.raw.dmm.Raw1.Srv的服務(wù)。

3)確認(rèn)服務(wù)創(chuàng)建成功,offline表示還沒(méi)有啟動(dòng)
$crs_stat-t

4)配置這個(gè)服務(wù)自啟動(dòng)
$srvctl enable service -d raw -s dmm


5)啟動(dòng)服務(wù)
$srvctl start service -d raw -s dmm

6)確認(rèn)服務(wù)狀態(tài)。Online說(shuō)明已啟動(dòng)
$crs_stat-t


新建的服務(wù)會(huì)自動(dòng)添加到初始話參數(shù)中:
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)確認(rèn)參數(shù)已經(jīng)生效
select name,failover_method,failover_type,goal,clb_goal from dba_services;


9)也可以用srvctl命令查看配置情況
$srvctl config service -d raw -s dmm -a


10)刪除Service
--先關(guān)閉service:
$srvctl stop service -d raw -s dmm
$srvctl disable service -d raw -s dmm

--再刪除服務(wù):
$srvctl remove service -d raw -s dmm

如果該命令清楚不掉,我們可以加上-f參數(shù)
$srvctl remove service -d raw -s dmm -f


OCR中的信息已經(jīng)被刪除了,但是數(shù)據(jù)字典中的還有該service的內(nèi)容,繼續(xù)清除數(shù)據(jù)字典中的內(nèi)容。

先查看數(shù)據(jù)字典內(nèi)容:
select name,failover_method,failover_type,goal,clb_goal from dba_services;

清除數(shù)據(jù)字典里的內(nèi)容:
begin
  dbms_service.delete_service(service_name => 'dmm');
end;
/


再次查詢數(shù)據(jù)字典,沒(méi)有了數(shù)據(jù)。清除完成
select name,failover_method,failover_type,goal,clb_goal from dba_services

到此,關(guān)于“Oracle RAC的Failover分為哪幾種”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

分享標(biāo)題:OracleRAC的Failover分為哪幾種
標(biāo)題鏈接:http://bm7419.com/article30/igedso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、網(wǎng)站收錄、ChatGPT、動(dòng)態(tài)網(wǎng)站、做網(wǎng)站建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)