RAC架構之業務分割
我們在前面已經討論到了,RAC實際上是一個執行個體級的冗餘架構,應用可以按照需要任意或者隨機地串連到某個執行個體上進行業務操作。
據我所知,在大多的RAC架構中都是這樣設計的,這樣做有個好處就是實現了執行個體的冗餘,即使某個執行個體DOWN掉了,並不會影響業務的正常操作。
但是我們前面也提到,當資料區塊分布到不同執行個體的記憶體裡時,執行個體之間就會出現資料區塊的複製問題,這裡面涉及一系列的記憶體管理機制,Oracle稱之為Cache Fusion,這種記憶體間資料區塊傳遞的代價也是比較大的,甚至可能出現長時間的等待。
基於這個原因,在有些系統中,為了能夠高效地利用RAC架構,可以通過一種技術,將某類或者幾類的業務分配到某一個或者幾個執行個體上,另外的業務分配到其他的執行個體上。
這樣做的目的就是將操作相似的業務集中起來,資料區塊儘可能地集中在小範圍的記憶體中,避免了由於Cache Fusion導致的等待事件發生。
比如下面的例子,這是一個OLAP系統,有一個RAC,它由4個執行個體(分布在4台伺服器上)組成,這個資料庫主要有兩個功能,即資料載入和資料查詢。
由於這兩種業務彼此幾乎沒有交叉,所以我們考慮將它們分配到不同的執行個體上運行。
RAC架構上實現業務分割用表示11-3所示。
我們讓資料載入業務使用執行個體一和執行個體二,讓資料查詢業務使用執行個體三和執行個體四,這樣就達到了業務分割的目的。
下面我們來示範這種技術的實現。
SQL> select instance_name from gv$instance orderby 1;
INSTANCE_NAME
----------------
rac11
rac12
rac13
rac14
可以看到,當前的RAC是由4個執行個體構成的,執行個體名分別是:RAC11、RAC12、RAC13、RAC14。
我們可以通過使用服務(service)的方式來達到業務分割的目的。我們建立2個服務rac_load和rac_query,每個服務分配2個執行個體,其中rac_load分配RAC11和RAC12;rac_query分配RAC13和RAC14。
可以通過下面的方法來建立這兩個服務。
這是最初crs的狀態:
[oracle@node1 ~]$ crs_stat-t
Name Type Target State Host
------------------------------------------------------------
ora.db601.db application ONLINE ONLINE node3
ora....11.inst application ONLINE ONLINE node1
ora....12.inst application ONLINE ONLINE node2
ora....13.inst application ONLINE ONLINE node3
ora....14.inst application ONLINE ONLINE node4
ora....SM1.asm application ONLINE ONLINE node1
ora....E1.lsnrapplication ONLINE ONLINE node1
ora.node1.gsd application ONLINE ONLINE node1
ora.node1.ons application ONLINE ONLINE node1
ora.node1.vip application ONLINE ONLINE node1
ora....SM2.asm application ONLINE ONLINE node2
ora....E2.lsnrapplication ONLINE ONLINE node2
ora.node2.gsd application ONLINE ONLINE node2
ora.node2.ons application ONLINE ONLINE node2
ora.node2.vip application ONLINE ONLINE node2
ora....SM3.asm application ONLINE ONLINE node3
ora....E3.lsnrapplication ONLINE ONLINE node3
ora.node3.gsd application ONLINE ONLINE node3
ora.node3.ons application ONLINE ONLINE node3
ora.node3.vip application ONLINE ONLINE node3
ora....SM4.asm application ONLINE ONLINE node4
ora....E4.lsnrapplication ONLINE ONLINE node4
ora.node4.gsd application ONLINE ONLINE node4
ora.node4.ons application ONLINE ONLINE node4
ora.node4.vip application ONLINE ONLINE node4
手工加入兩個服務rac_load和rac_query:
[oracle@node1 ~]$ srvctladd service -d rac -s rac_load-r "rac11,rac12"
[oracle@node1 ~]$ srvctladd service -d rac -s rac_query-r "rac13,rac14"
其中,參數-r表示優先使用的執行個體。
我們在建立服務時,可以指定業務優先選擇使用的執行個體和備用選擇的執行個體。
服務首先會使用優先執行個體,當優先執行個體不可用時,將使用可用執行個體。
因為這裡只是將服務進行執行個體分割,在同一組執行個體中並不需要設定優先權,所以將每個服務使用的執行個體都設定為優先使用,那麼用戶端將隨機串連任何一個執行個體上的服務。
[oracle@node1 ~]$ crs_stat-t
Name Type Target State Host
---------------- --------------- -------- -------- -------
ora.db601.db application ONLINE ONLINE node3
ora....11.inst application ONLINE ONLINE node1
ora....12.inst application ONLINE ONLINE node2
ora....13.inst application ONLINE ONLINE node3
ora....14.inst application ONLINE ONLINE node4
ora....load.cs application OFFLINE OFFLINE
ora....011.srv application OFFLINE OFFLINE
ora....012.srv application OFFLINE OFFLINE
ora....uery.cs application OFFLINE OFFLINE
ora....013.srv application OFFLINE OFFLINE
ora....014.srv application OFFLINE OFFLINE
ora....SM1.asm application ONLINE ONLINE node1
ora....E1.lsnr application ONLINE ONLINE node1
ora.node1.gsd application ONLINE ONLINE node1
ora.node1.ons application ONLINE ONLINE node1
ora.node1.vip application ONLINE ONLINE node1
ora....SM2.asm application ONLINE ONLINE node2
ora....E2.lsnr application ONLINE ONLINE node2
ora.node2.gsd application ONLINE ONLINE node2
ora.node2.ons application ONLINE ONLINE node2
ora.node2.vip application ONLINE ONLINE node2
ora....SM3.asm application ONLINE ONLINE node3
ora....E3.lsnr application ONLINE ONLINE node3
ora.node3.gsd application ONLINE ONLINE node3
ora.node3.ons application ONLINE ONLINE node3
ora.node3.vip application ONLINE ONLINE node3
ora....SM4.asm application ONLINE ONLINE node4
ora....E4.lsnr application ONLINE ONLINE node4
ora.node4.gsd application ONLINE ONLINE node4
ora.node4.ons application ONLINE ONLINE node4
ora.node4.vip application ONLINE ONLINE node4
可以看到,一組名稱已經被加入到crs資源中,但是它們的狀態都是OFFLINE的。
可以使用不帶參數的crs_stat,這樣會看得更清楚。
本文節選自《讓Oracle跑得更快2—基于海量資料的資料庫設計與最佳化》一書。
圖書詳細資料:http://blog.csdn.net/broadview2006/article/details/6650914