1. 程式人生 > 其它 >oracle RAC使用service管理連線

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