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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM