1. 程式人生 > 實用技巧 >RAC架構之業務分割

RAC架構之業務分割

RAC架構之業務分割

我們在前面已經討論到了,RAC實際上是一個例項級的冗餘架構,應用可以按照需要任意或者隨機地連線到某個例項上進行業務操作。

據我所知,在大多的RAC架構中都是這樣設計的,這樣做有個好處就是實現了例項的冗餘,即使某個例項DOWN掉了,並不會影響業務的正常操作。

但是我們前面也提到,當資料塊分佈到不同例項的記憶體裡時,例項之間就會出現資料塊的複製問題,這裡面涉及一系列的記憶體管理機制,Oracle稱之為Cache Fusion,這種記憶體間資料塊傳遞的代價也是比較大的,甚至可能出現長時間的等待。

基於這個原因,在有些系統中,為了能夠高效地利用RAC架構,可以通過一種技術,將某類或者幾類的業務分配到某一個或者幾個例項上,另外的業務分配到其他的例項上。

這樣做的目的就是將操作相似的業務集中起來,資料塊儘可能地集中在小範圍的記憶體中,避免了由於Cache Fusion導致的等待事件發生。

比如下面的例子,這是一個OLAP系統,有一個RAC,它由4個例項(分佈在4臺伺服器上)組成,這個資料庫主要有兩個功能,即資料載入和資料查詢。

由於這兩種業務彼此幾乎沒有交叉,所以我們考慮將它們分配到不同的例項上運行。

RAC架構上實現業務分割用示意圖表示如圖11-3所示。

我們讓資料載入業務使用例項一和例項二,讓資料查詢業務使用例項三和例項四,這樣就達到了業務分割的目的。

下面我們來演示這種技術的實現。

SQL> select instance_name from gv$instance order by 1;

INSTANCE_NAME

----------------

rac11

rac12

rac13

rac14

可以看到,當前的RAC是由4個例項構成的,例項名分別是:RAC11RAC12RAC13RAC14

我們可以通過使用服務(service)的方式來達到業務分割的目的。我們建立2個服務rac_loadrac_query,每個服務分配2個例項,其中rac_load分配RAC11RAC12rac_query分配RAC13RAC14

可以通過下面的方法來建立這兩個服務。

這是最初crs的狀態:

[[email protected] ~]$ 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.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

手工加入兩個服務rac_loadrac_query

[[email protected] ~]$ srvctl add service -d rac -s rac_load -r "rac11,rac12"

[[email protected] ~]$ srvctl add service -d rac -s rac_query -r "rac13,rac14"

其中,引數-r表示優先使用的例項。

我們在建立服務時,可以指定業務優先選擇使用的例項和備用選擇的例項。

服務首先會使用優先例項,當優先例項不可用時,將使用可用例項。

因為這裡只是將服務進行例項分割,在同一組例項中並不需要設定優先順序,所以將每個服務使用的例項都設定為優先使用,那麼客戶端將隨機連線任何一個例項上的服務。

[[email protected] ~]$ 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://bvbroadview.blog.51cto.com/3227029/628543

轉載於:https://blog.51cto.com/bvbroadview/628551