Failover 之 Client-Side Connect time Failover、Client-Side TAF、Service-Side TAF
三種 Failover 之 Client-Side Connect time Failover、Client-Side TAF、Service-Side TAF
理論背景
Oracle RAC 同時具備HA(High Availiablity) 和LB(LoadBalance). 而其高可用性的基礎就是Failover(故障轉移).
它指叢集中任何一個節點的故障都不會影響使用者的使用,連線到故障節點的使用者會被自動轉移到健康節點,從使用者感受而言,
是感覺不到這種切換。正是因為這樣,才能根據業務的不同實行分機分業務分負載。
一:Failover介紹
Oracle RAC 的Failover 可以分為3種:
1. Client-Side Connect time Failover
2. Client-Side TAF
3. Service-Side TAF
一.1 Client-Side Connect Time Failover
tnsnames.ora檔案配置示例:
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)
)
)
一.2 Client-Side TAF(Transparent Application Failover)
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語句會被轉移到新的例項上,在新的節點上繼續返回後續結果集,而已經返回的記錄集則拋棄。
顯然為了實現select 方式,Oracle 必須為每個session儲存更多的內容,包括遊標,使用者上下文等,需要更多的資源也是用資源換時間的方案。
3. DELAY : 這個引數分別代表重試間隔時間。
4. RETRIES: 這個引數分別代表重試次數。
示例:
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)
)
)
)
一.3 Service-Side TAF
Service-Side TAF 可以看作是TAF的一種變種,首先Service-SideTAF也是TAF,所有TAF的特點它都有,其次這種TAF是在伺服器上配置的,而不像TAF是在客戶端配置的。
PREFERRED: 首選例項,會優先選擇擁有這個角色的例項提供服務。
AVAILABLE: 後備例項,使用者連線會優先連線PREFFERRED的Instance,當PREFERRED的Instance不可用時,才會被轉到AVAILBALE的Instance上。
要使用Server-Side TAF必須配置Service。 Service 可以在建立資料庫時建立,也可以在建立資料庫之後修改,既可以使用dbca 配置嚮導,也可以用命令列的 方式配置。
操作流程
10g:
用DBCA 配置Service
1). 執行DBCA,選擇ORACLE RAC Application Clusters database
2). 在第二個介面選擇:Services Management
3). 第三個介面會出現RAC 資料庫列表,使用者可以在這個列表中選擇要配置Service 的資料庫
4). 在Serice配置介面中,單擊Add 建立新的Service,輸入service名字。在Instance列表框定義例項角色,選擇那個service1 作為 Preferred(首選例項),Service2 作為availiable(後備例項)。 TAF Policy有三個選項: None, Basic,Pre-connect。 我們選Basic。 最後點選Finish,完成Service 配置。
5)在結束Service配置後,服務會自動啟動。
11g:
用srvctl 命令配置Service
1 建立service
#Srvctl add service -d <database-name> -s <service-name> -r "preferred-instance-list" -a "available-instance-list" -P <TAF-policy>
例如:
srvctl add service -d RAC -s Service2 -r "RAC1,RAC2" -a "RAC3,RAC4" -P basic
注意:srvctl add service中,只有perferred才會建立服務。 即在OCR中註冊一個ora.raw.dmm.rac1.Srv的服務。
2 檢視配置資訊
#srvctl config service -d database-name [-s service-name] [-a]
如果這裡不指定"-s service-name",就會顯示所有Service的配置,這些配置包括preferred 和available instance. 使用-a 選項,還會顯示TAF 相關資訊。
3 是否自動執行service
資料庫啟動時,會自動啟動所有的Service。有時為了為了維護需要,需要禁用這個特性,在維護完成後再啟動這個特性。
#srvctl enable/disable service -d database-name -s service-name -i instance-name
4 啟動service
#srvctl start service -d <database-name> -s <service-name> -i instance-name -o start-option -c connect-string -q
如果不指定service-name, 則所有的service 都會被啟動,可以使用逗號分隔方式,同時啟動多個service。 -i 指定在那個例項上啟動service。
5 停止service
#srvctl stop service -d <database-name> -s <service-name> -i instance-name -c connect-string -q -f
其中-f 選項可以強制關閉service,並中斷了其所有使用者的連線。
6 檢視service 狀態
#srvctl status service -d <database-name> -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;
理論背景
Oracle RAC 同時具備HA(High Availiablity) 和LB(LoadBalance). 而其高可用性的基礎就是Failover(故障轉移).
它指叢集中任何一個節點的故障都不會影響使用者的使用,連線到故障節點的使用者會被自動轉移到健康節點,從使用者感受而言,
是感覺不到這種切換。正是因為這樣,才能根據業務的不同實行分機分業務分負載。
一:Failover介紹
Oracle RAC 的Failover 可以分為3種:
1. Client-Side Connect time Failover
2. Client-Side TAF
3. Service-Side TAF
一.1 Client-Side Connect Time Failover
tnsnames.ora檔案配置示例:
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)
)
)
一.2 Client-Side TAF(Transparent Application Failover)
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語句會被轉移到新的例項上,在新的節點上繼續返回後續結果集,而已經返回的記錄集則拋棄。
顯然為了實現select 方式,Oracle 必須為每個session儲存更多的內容,包括遊標,使用者上下文等,需要更多的資源也是用資源換時間的方案。
3. DELAY : 這個引數分別代表重試間隔時間。
4. RETRIES: 這個引數分別代表重試次數。
示例:
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)
)
)
)
一.3 Service-Side TAF
Service-Side TAF 可以看作是TAF的一種變種,首先Service-SideTAF也是TAF,所有TAF的特點它都有,其次這種TAF是在伺服器上配置的,而不像TAF是在客戶端配置的。
PREFERRED: 首選例項,會優先選擇擁有這個角色的例項提供服務。
AVAILABLE: 後備例項,使用者連線會優先連線PREFFERRED的Instance,當PREFERRED的Instance不可用時,才會被轉到AVAILBALE的Instance上。
要使用Server-Side TAF必須配置Service。 Service 可以在建立資料庫時建立,也可以在建立資料庫之後修改,既可以使用dbca 配置嚮導,也可以用命令列的 方式配置。
操作流程
10g:
用DBCA 配置Service
1). 執行DBCA,選擇ORACLE RAC Application Clusters database
2). 在第二個介面選擇:Services Management
3). 第三個介面會出現RAC 資料庫列表,使用者可以在這個列表中選擇要配置Service 的資料庫
4). 在Serice配置介面中,單擊Add 建立新的Service,輸入service名字。在Instance列表框定義例項角色,選擇那個service1 作為 Preferred(首選例項),Service2 作為availiable(後備例項)。 TAF Policy有三個選項: None, Basic,Pre-connect。 我們選Basic。 最後點選Finish,完成Service 配置。
5)在結束Service配置後,服務會自動啟動。
11g:
用srvctl 命令配置Service
1 建立service
#Srvctl add service -d <database-name> -s <service-name> -r "preferred-instance-list" -a "available-instance-list" -P <TAF-policy>
例如:
srvctl add service -d RAC -s Service2 -r "RAC1,RAC2" -a "RAC3,RAC4" -P basic
注意:srvctl add service中,只有perferred才會建立服務。 即在OCR中註冊一個ora.raw.dmm.rac1.Srv的服務。
2 檢視配置資訊
#srvctl config service -d database-name [-s service-name] [-a]
如果這裡不指定"-s service-name",就會顯示所有Service的配置,這些配置包括preferred 和available instance. 使用-a 選項,還會顯示TAF 相關資訊。
3 是否自動執行service
資料庫啟動時,會自動啟動所有的Service。有時為了為了維護需要,需要禁用這個特性,在維護完成後再啟動這個特性。
#srvctl enable/disable service -d database-name -s service-name -i instance-name
4 啟動service
#srvctl start service -d <database-name> -s <service-name> -i instance-name -o start-option -c connect-string -q
如果不指定service-name, 則所有的service 都會被啟動,可以使用逗號分隔方式,同時啟動多個service。 -i 指定在那個例項上啟動service。
5 停止service
#srvctl stop service -d <database-name> -s <service-name> -i instance-name -c connect-string -q -f
其中-f 選項可以強制關閉service,並中斷了其所有使用者的連線。
6 檢視service 狀態
#srvctl status service -d <database-name> -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;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31383567/viewspace-2134279/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle RAC Failove 之一:Client-Side Connect Time FailoverOracleAIclientIDE
- rac 的Client-side TAF配置clientIDE
- Oracle RAC TAF 無縫failoverOracleAI
- Service-side TAFIDE
- TNSNAMES TAF TEMPLATE , LOCAL_LISTENER RAC FAILOVERAI
- Oracle Failover - TAF 透明應用切換OracleAI
- Oracle RAC 客戶端故障轉移(failover) TAFOracle客戶端AI
- connect-time failover的配置!AI
- 11gr2 RAC配置Service-Side TAFIDE
- Oracle 11gR2 RAC Service-Side TAF 配置示例OracleIDE
- 【TAF】使用Oracle RAC的TAF技術之SESSION型別OracleSession型別
- 關於11G 客戶端連線資料庫 SCAN 和 Transparent Application Failover(TAF)客戶端資料庫APPAI
- Oracle RAC TAF [zt]Oracle
- Jdbc thin not suppot Rac TAFJDBC
- oracle的TAF淺析Oracle
- 【TAF】使用Oracle RAC的TAF技術實現不間斷查詢Oracle
- Multicore processing for client-side Java applicationsclientIDEJavaAPP
- Oracle 10g RAC TAFOracle 10g
- redis_failover - Automatic Redis Failover Client/ServerRedisAIclientServer
- LOAD_BALANCE&TAF總結
- RAC TAF 連線 (tnsnames.ora)
- Oracle RAC Failove 之二:TAFOracleAI
- Flink -- FailoverAI
- 靜態FAILOVERAI
- 關於failoverAI
- ORA-600(kollasg:client-side tmp lob)錯誤clientIDE
- Can the JDBC Thin Driver Do Failover by Specifying FAILOVER_MODE?JDBCAI
- dataguard之物理standby庫failover 切換AI
- 【DataGuard】物理Data Guard之Failover轉換AI
- Oracle LOAD_BALANCE&TAF總結Oracle
- ORACLE RAC TAF 配置(透明故障轉移)Oracle
- Oracle 10g RAC TAF介紹Oracle 10g
- Oracle RAC的TAF簡單測試Oracle
- ASP.NET AJAX 4的Client-Side Template和DataViewASP.NETclientIDEView
- ASA failover配置(A/S)AI
- DG 進行failoverAI
- DataGuard:Physical Standby FailoverAI
- 【DG】DG之Switchover和Failover的區別AI