一、 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