oracle RAC使用service管理連線
一、 service連線介紹
1.1傳統連線方式
RAC利用vip或者scan ip漂移實現資料庫故障轉移的高可用性,應用連線到資料庫通常是連線vip(10g)或者scan ip(11g)並指定服務名為db_unique_name,連線會根據負載均衡自動分配到RAC叢集的任一節點,某節點出現故障時vip漂移,實現應用連線透明切換。
這種連線方式的好處是在節點間實現負載均衡,將資料庫壓力分攤,不會導致某個節點因為連線過多而出現壓力過載的問題。而缺點則是會增大節點間的通訊和傳輸壓力。
RAC架構實現資料一致性需要在節點間同步快取,稱為快取融合。例如在節點1插入的資料,在節點2查詢時,資料庫會先在本地快取查詢,沒找到則會到其他節點的快取查詢,再沒找到才會去讀取磁碟資訊。應用的連線隨機在某個節點,當查詢時節點間的快取同步將增多,當業務的操作很頻繁時,這樣的傳輸往往很耗效能。
1.2 service連線方式
service連線主要是在不同的節點設定不同的service名,指定不同的應用連線到固定的節點,方便連線管理,資源分配,減少節點間的快取同步帶來的開銷。
使用service連線的好處在於,資料庫正常情況下可以使應用總是連線到固定節點,可以設定service的首選節點和備用節點,資料庫正常情況下,service執行在首選節點,通過該服務連線的應用會話就在該節點,這樣就會很大程度的減少節點間的快取傳輸。當資料庫出現故障時,service可向備用節點進行漂移,服務不中斷。
二、service配置
2.1 新增service
語法:srvctl add service -d db_unique_name -s service_name -r preferred_list
[-a available_list] [-P TAF_policy]
在叢集的各個節點新增不同名稱的service,例如在節點1新增testsv1,節點2新增testsv2
$ srvctl add service -d dbname -s testsv1 -r rac1 -a rac2 -P basic
$ srvctl add service -d dbname -s testsv2 -r rac2 -a rac1 -P basic
引數解釋:
-d,叢集資料庫名
-s,需要新增的服務名
-r,首選節點,正常情況下該服務執行在該節點上
-a,備用節點,異常情況服務可漂移到該備用節點
-P,服務切換策略
2.2 配置TAF
叢集的Failover(故障轉移)功能,分為3種,分別為Client-Side Connect time Failover,TAF,service—side TAF。
2.2.1 Client-Side Connect time Failover
其中Client-Side Connect time Failover為預設配置,在應用發起連線時感知到節點故障,則在tnsname裡的地址表中嘗試下一個,只在連線發起時才會起作用,當連線建立後如果節點故障,則會話會斷開,需要重新進行連線。
2.2.2 TAF(Transparent Application Failover)
在應用執行過程中如果節點故障,則連線到該節點的使用者會自動切換到其他節點,對應用而言,這個過程是透明的,僅是未提交事務回滾。
實現該功能,在客戶端的tnsnames.ora檔案新增FAILOVER_MODE的配置項即可,該選項有的配置有4個引數需定義:
1、METHOD
basic:感知到節點故障時建立到其他例項的連線,切換有時間延遲
preconnect:連線建立時即在其他節點也建立一個不活動的連線,故障時可立即切換到其他例項,但不活動的連線也佔用資源。
2、TYPE
定義故障發生時對select語句的處理。
select:故障時正在執行的select語句不中斷,繼續在其他例項上返回剩餘的結果集
session:故障時正在執行的select語句中斷,轉移後需重新執行select語句
3、DELAY
重試間隔時間
4、RETRIES
重試次數
2.2.3 service-side TAF
與客戶端的TAF類似,只是在伺服器端配置而已,Service-Side TAF 通過結合Service,在資料庫裡儲存FAIL_MODE的配置,把所有的TAF配置儲存在資料字典中,從而省去了客戶端的配置工作,現在客戶端的TNS檔案就不需要任何TAF的配置選項了。
使用srvctl 建立service時,service-side TAF配置選項需要通過dbms_service包來配置。
Begin
Dbms_service.modify_service(
Service_name='>testsv1',
Failover_method=>dbms_service.failover_method_basic,
Failover_type=>dbms_service.failover_type_select,
Failover_retries=>180,
Failover_delay=>5
);
End;
2.3 啟動service
語法:srvctl start service -d db_unique_name -s service_name
在叢集任一節點啟動服務,service會根據首選節點配置在對應節點啟動
$ srvctl start service -d dbname -s testsv1
$ srvctl start -d dbname -s testsv2
說明:在資料庫啟動初期,service會根據節點上例項的啟動先後順序,在先啟動的節點上自動啟動,無論是不是首選節點,而當首選節點上的例項啟動時,service不會自動漂移回首選節點,需手動切換。
例如:testsv1的首選節點是rac1,當叢集重啟時,節點rac2先啟動完成,則testsv1會在rac2上啟動,當rac1後啟動時,testsv1不會自動切換回到rac1,需手動切換。
2.4 其他service管理命令
通過srvctl 對service的管理十分方便,包括起停增刪改等。
srvctl config service:檢視service配置
srvctl stop service:停止指定的service
srvctl remove service:刪除service,如果刪除不掉,可以加上-f引數
srvctl disable service:使service不可用
srvctl enable service:使service可用
srvctl modify service:修改service配置
srvctl relocate service:重新載入service
srvctl status service:檢視service狀態
三、客戶端tnsnames配置
客戶端使用tnsnames.ora檔案配置來解析oracle的連線資訊,通過指定service name來連線,其中service_name引數需與新增的service名稱相同。
tnsnames.ora配置引數如下:
TESTSV1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hostname1-vip)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = hostname2-vip)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = testsv1)
四、總結
使用service管理連線,可以方便對應用進行分類和管理,同時,使用service來配置TAF(Transparent Application Failover),應用客戶端的故障轉移可以統一配置,在需要對服務端連線資訊進行微調時,只需配置伺服器端的tnsnames,而不需要對客戶端一一進行配置。將應用正常連線時固定在同一節點,也能提高應用連線的效能。
引用地址:http://blog.chinaunix.net/uid-31401119-id-5779832.html