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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- LOAD_BALANCE&TAF總結
- ASA failover配置(A/S)AI
- Oracle LOAD_BALANCE&TAF總結Oracle
- openGauss主備切換之switchover與failoverAI
- 19c TAF 配置及測試
- Performing a Failover to a Physical Standby DatabaseORMAIDatabase
- Oracle dataguard failover 實戰OracleAI
- 【UCP】理解TAF和FCF(重點是UCP)
- Oracle:Failover 到物理備庫OracleAI
- PostgreSQL DBA(118) - Develop(Seamless Application Failover)SQLdevAPPAI
- SQL Server Availability Group Failover 測試SQLServerAI
- Oracle Dataguard故障轉移(failover)操作OracleAI
- 解密數倉高可用failover流程解密AI
- PostgreSQL DBA(127) - Develop(JDBC failover&load balance)SQLdevJDBCAI
- Oracle 11g dg broker自動failoverOracleAI
- PostgreSQL 13 同步流複製+failover(#2.6)-202104SQLAI
- 在思科ASA上部署Failover例項演示-上AI
- 物理DataGuard客戶端無縫切換--客戶端TAF 配置客戶端
- 從TAF到TAC,業務連續性的追求永無止境
- 想列印k8s資源YAML結果搞懂了Client-Side & Server-Side ApplyK8SYAMLclientIDEServerAPP
- MySQL高可用之MHA切換測試(switchover & failover)MySqlAI
- ORA-16649: possible failover to another database prevents this database from beiAIDatabase
- Bug 12725963 - New database connection fails with ORA-12541 after vip failoverDatabaseAI
- ORA-19909(一次DataGuard Failover導致的故障AI
- Configure multiple-subnet Always On Availability Groups and failover cluster instances by modifying CIBAI
- PostgreSQL 13 非同步流複製+failover切換(#2.3)-202104SQL非同步AI
- oracle 19c使用dgmgrl來執行switchover和failover切換OracleAI
- oracle 11g dg broker 開啟fast-start failover自動故障切換OracleASTAI
- 【ASK_ORACLE】手動配置DataGuard的自動化Client Failover(故障轉移)的serviceOracleclientAI
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:FAILOVER_MODE引數SQLServerAI
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:DB_FAILOVER引數SQLServerAI
- 精心設計的 DNS Failover 策略在 Go 中竟然帶來了反效果,發生了什麼?DNSAIGo
- Oracle 19C Data Guard基礎運維-07 failover後閃回恢復dg架構Oracle運維AI架構
- oracle 12c主機徹底掛機用failover把備機設定為主機OracleAI
- 【恩墨學院】深入解析:一主多備DG環境,failover的實現過程詳解AI
- Go之time包用法Go
- rac 正常關閉例項service不會自動漂移,只有在例項異常abort才會發生自動failoverAI
- Python之time模組詳解Python
- Swoole 原始碼分析——Client模組之Connect原始碼client