OracleRAC的Failover分為哪幾種

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

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

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

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

注意事項:不能在listener.ora文件中設置GLOBAL_NAME,因為這個參數(shù)會禁用Connect-time Failover和Transparent Application Failover.


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


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


啟用這種Failover的方法就是在客戶端的tnsnames.ora中添加FAILOVER=ON條目,這個參數(shù)默認就是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]

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

所以從Oracle8.1.5版本只有引入了新的Failover機制—-TAF。所謂TAF,就是連接建立以后,應用系統(tǒng)運行過程中,如果某個實例發(fā)生故障,連接到這個實例上的用戶會被自動遷移到其他的健康實例上。對于應用程序而言,這個遷移過程是透明的,不需要用戶的介入,當然,這種透明要是有引導的,因為用戶的未提交事務會回滾。相對與Client-Side Connect Time Failover的用戶程序中斷,拋出連接錯誤,用戶必須重啟應用程序,TAF這種方式在提高HA上有了很大的進步。

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

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

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

3.DELAY和RETRIES:這2個參數(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的特點它都有,其次這種TAF是在服務器上配置的,而不像TAF是在客戶端配置的。

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

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

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

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

3.2用srvctl命令配置Service
用命令行方式配置Service對遠程維護很有用。先來看一下相關命令
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才會創(chuàng)建服務。即在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
數(shù)據(jù)庫啟動時,會自動啟動所有的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狀態(tài)
#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創(chuàng)建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).數(shù)據(jù)庫的服務名是用service_name參數(shù)來指定的,一個數(shù)據(jù)庫可以有多個服務名,但是service_name最長是4kb,不要手工來修改這個參數(shù)

2)最多可以創(chuàng)建64個service,每個數(shù)據(jù)庫有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方式連接數(shù)據(jù)庫,需要在tns條目中使用service_name方式引用數(shù)據(jù)庫。如:
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的名稱,而是實例的名稱,那么不影響數(shù)據(jù)庫的連接,但是無法實現(xiàn)TAF功能。



四.Srvctl命令測試實例

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才會創(chuàng)建服務。即在OCR中注冊一個ora.raw.dmm.Raw1.Srv的服務。

3)確認服務創(chuàng)建成功,offline表示還沒有啟動
$crs_stat-t

4)配置這個服務自啟動
$srvctl enable service -d raw -s dmm


5)啟動服務
$srvctl start service -d raw -s dmm

6)確認服務狀態(tài)。Online說明已啟動
$crs_stat-t


新建的服務會自動添加到初始話參數(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)確認參數(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
--先關閉service:
$srvctl stop service -d raw -s dmm
$srvctl disable service -d raw -s dmm

--再刪除服務:
$srvctl remove service -d raw -s dmm

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


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

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

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


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

到此,關于“Oracle RAC的Failover分為哪幾種”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

分享標題:OracleRAC的Failover分為哪幾種
標題鏈接:http://muchs.cn/article30/igedso.html

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

廣告

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

h5響應式網(wǎng)站建設