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个实例构成的,实例名分别是: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.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_load和rac_query:
[oracle@node1 ~]$ srvctl add service -d rac -s rac_load -r "rac11,rac12"
[oracle@node1 ~]$ srvctl add 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://space.itpub.net/?uid-13164110-action-viewspace-itemid-703707
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13164110/viewspace-703711/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/13164110/viewspace-703711/