Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1525109
  • 博文数量: 465
  • 博客积分: 8915
  • 博客等级: 中将
  • 技术积分: 6365
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-30 15:05
文章分类

全部博文(465)

文章存档

2017年(33)

2016年(2)

2015年(4)

2014年(29)

2013年(71)

2012年(148)

2011年(178)

分类: 数据库开发技术

2011-08-01 15:30:30

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的状态:

[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_loadrac_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://blog.chinaunix.net/space.php?uid=13164110&do=blog&id=1991531

阅读(693) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~