Oracle rac架构和原理

   

Oracle RAC

  Oracle Real Application Cluster (RAC,实时应用集群)用来在集群环境下实现多机共享数据库,以保证应用的高可用性;同时可以自动实现并行处理及负载均衡,并能实现数据库在故障时的容错和无断点恢复。它是oracle数据库支持网络计算环境的核心技术。它是oracle数据库支持网络计算环境的核心技术。

rac架构和原理" title="Oracle rac架构和原理" width="539" height="224">

 

  共享缓存技术 减少io负担

 多主机共享一个数据库,每个节点宕掉后,通过vip到下一个节点

rac架构和原理" title="Oracle rac架构和原理" width="690" height="484">

rac架构和原理" title="Oracle rac架构和原理" width="690" height="507">

rac架构和原理" title="Oracle rac架构和原理" width="690" height="450">

rac架构和原理" title="Oracle rac架构和原理" width="690" height="433">

rac架构和原理" title="Oracle rac架构和原理" width="690" height="496">

Oracle RAC的原理

    集群环境层面:

  并发控制,健忘症,脑裂,IO隔离;

     共享存储层面:

  存储层,网络层,集群件层,应用层

    数据库实例层面:

  并发访问和控制

 

1、集群环境&共享存储层面

 并发控制

Oracle RAC中,使用Distribute Lock Managerment(DLM)机制进行多个节点间并发访问的控制

   健忘症(一个节点更改,其他人不知道)

整个集群只有一份集群配置信息,Oracle RAC使用OCR(oracle 集群注册器) Disk文件解决

 

     脑裂

  在Oracle RAC中Voting Disk用来记录节点间成员的状态,出现脑裂时,通过投票机制,获得最高票数或者最早达到的获得投票的,幸存,其他节点被踢出。

 

     IO隔离

   Oracle RAC采取直接重启故障节点来限制已剔除节点对共享数据的访问

如果某个节点有故障,则踢出后并重启该节点,达到不让其访问数据的目的,实现自愈

 

 

  共享存储的共享和并发访问

  需要解决存储设备的共享和并发访问问题

 

2、RAC层面

      - 存储层

Cache fusion lock

 

   - 网络层

    共4种网络环境:

 Public网络-对外提供数据查询服务、数据库维护等

 Virtua网络-提供应用连接

 Private网络-用于RAC心跳和cache fusion

存储网络-存储设备、HBA卡、光纤交换机等组成

  

     集群件层

  Oracle clusterware:集群管理软件保证多主机之间的协调工作

 

     应用层

  oracle RDBMS层面:由若干CRS Resourcezucheng

 oracel RAC提供高可用服务:LMON进程监控应用(CRS Resource),应用异常时对其进行重启、切换等;

 

Oracle RAC 的关键技术

  Oracle  RAC的关键技术有:

  •     OCR Disk
  •   votiong
  •   vip
  •   DLM
  •   cache Fushion
  •   Failover
  •   loadbalance
  •   ASM

 

  OCR Disk

 

  OCR Disk主要用来解决集群的“健忘”问题

 在linux系统中信息如下:

rac架构和原理" title="Oracle rac架构和原理" width="530" height="120">

rac架构和原理" title="Oracle rac架构和原理" width="408" height="89">

rac架构和原理" title="Oracle rac架构和原理" width="690" height="258">

不是每个节点都可以操作OCR Disk,每个节点上都有一份其内容的拷贝,在一块叫OCR cache的内存中。

 

OCR master node:

  可以更改OCR Disk的节点

  负责更新本地和其他节点的OCR cache内容

 

OCR Disk每四个小时自动备份一次

 

Voting Disk

   voting Disk用来解决“脑裂”问题,仲裁哪个节点或者partition获得集群的控制权。

  所以做RAC 至少两块盘

 在linux系统中信息如下:

rac架构和原理" title="Oracle rac架构和原理" width="453" height="118">

rac架构和原理" title="Oracle rac架构和原理" width="690" height="139">

VIP

  Oracle RAC引入VIP,解决TCP/IP协议栈超时问题

 VIP和IP的不同是:VIP是浮动的,IP是固定到物理网卡上的。

 节点出现故障,VIP会漂移,保证业务连续性

  VIP故障,应用程序感知快,捕获错误的时间大大缩短。

rac架构和原理" title="Oracle rac架构和原理" width="440" height="172">

rac架构和原理" title="Oracle rac架构和原理">

rac架构和原理" title="Oracle rac架构和原理" width="690" height="272">

VIP 会在安装clusterware的最后阶段由vipca脚本创建,并作为CRS Resource注册到OCR中,会绑定到每个节点的Public网卡上。

 

 DLM

   DLM(Distributed lock)分布式锁管理器,负责协调节点间资源的竞争,保证并发的有效性,保护共享数据的安全性。

rac架构和原理" title="Oracle rac架构和原理">

 cache Fusion

  提供传输的扩展性,在实例间传输block的image,跟踪资源的当前位置和状态,每个实例的sga的目录结构中保存现有传输资源信息。

    Cache fusion模型:

   Global Resource Directory由Global Cache Service来管理记录资源的模式、资源的角色、block在实例中的状态、在各个活动的节点发布资源的master、在必要的时候重新发布master(确如实例的启动和关闭)

   Global Cache Service(GCS):

 三种资源模式:null(默认的),share(查询),exclusive(x)可以block的内容,其他的实例就是null mode)

 

 两种资源角色

    local:第一次请求资源的初始模式:只有一个实例可以有这个block的dirly copy global:当一个block在多个实例中变dirty时,local 就变成了global block,只能由global cacheservice写到磁盘中

 

Cache fusion block的传输:

 例如:有ABCD四个节点,Global Cache Service:GCS

 

1.Read with no transfer

   如果C节点需要向共享磁盘文件上读一个Block,那么它向GCS发送请求,这个时候请求被定向到D,D是这个Block的master(每个资源都有master)。GCS把资源授权为share mode和local Role,在目录中记录下了他的状态(目录在节点D),然后通知C,C把这个资源从Null改成share。C开始I/O,现在C有了这个Block以share模式从磁盘文件读取权限。

  1. Read to write transfer

    B也要这个Block,并且不仅是读,而且还要改变它的内容。B向D(这个Blocak的master)的GCS发出请求,GCS向C发出请求,要求C把这个Block给B,B收到后,告诉GCS,现在B可以修改这个Block了。

   3. Wirte to write transfer 

      A向D节点的GCS发出请求,GCS告诉B节点放弃他的Exclusive锁,并且把当前的image传到A,如果这个请求没有完成,就会放到GCS的队列里,B把这个block传到A,这个时候,要写log,强制log flush,把模式变成null。发送到A,并且告诉它这个exclusive的资源可以用了。A收到了这个Block的image,会通知GCS并且告诉它block的status是exclusive。这个时候,B不能对这个block做操作,虽然他的buffer cache中,它还有这个block的copy

   4.write to read transfer

         C要读这个BLOCAK,先向D(master)发出请求,GCS要求A把它传输到C,A接受到请求完成它的工作,这可能会A写LOG和log flush。在发送这个block之前,A会把它的exclusive锁降低到share模式。C把从A收到的BLOCK的SCN取出来,建设成一个资源Assumption信息为GCS更新global resource directory。

 

 Failover

   Failover 是oracle RAC高可用性的基础,它指集群中任何一个节点的故障都不会影响用户的使用,连接到故障节点的用户会被自动转移到健康节点,用户感知不到节点故障。

 

Failover方式:

   1.Client-side Connect time failover

 2.TAF

 3.Server-side TAF

 

1.client-side connect time failover

  含义:如果用户端tnsnames中配置了多个地址,用户发起连接请求时,会先尝试连接地址表中的第一个地址,如果这个连接尝试失败,则继续尝试使用第二个地址,直至连接成功或者遍历了所有的地址。

特点:只在建立连接那一时刻起作用。连接建立之后,节点出现故障都不会做处理。会话断开、用户程序必须重新建立连接。

启用方法:在客户端的tnsnames.ora中failover=on条目,这个参数默认就是on。tnsnames.ora配置实例如下:

rac架构和原理" title="Oracle rac架构和原理" width="690" height="112">

rac架构和原理" title="Oracle rac架构和原理" width="522" height="404">

rac架构和原理" title="Oracle rac架构和原理" width="529" height="500">

Loadbalance

  

  Loadbalance就是把负载平均的分配到集群的各个节点,从而提高整体的吞吐能。

  分散负载的方法:

1.通过connection balance,按照某种算法把用户分配到不同的节点。也可认为是纯技术的分散均衡

2.通过service 在应用层上进行分散,也可认为是面向业务的分散负载。(需要基于软件开发)

 

Conection Bablancing

 在用户请求建立连接时,根据每个节点的负载决定把连接分配给哪个实例。连接建立后,会话的所有操作就都在这个实例上完成,而不会分派给其他节点了

   1.1 客户端均衡(Client-side LB)

   Oracle 8使用的方法,配置方法是在客户端的insnames。ora文件中加入:LOAD_BALANCE=YES条目。当客户端发起连接时,会从地址列表中随机的选取一个,再使用随机算法把连接请求分配到各个实例。

  缺点:由于随机未考虑节点实际负载,可能出现负载不均衡情况。若在短时间内同时发起多个连接,有可能被分配到同一个节点(更坏:故障节点)

    Connection Balancing

   在用户请求建立连接时,根据每个节点的负载决定把连接分配给哪个实例。连接建立后,会话的所有操作就都在这个实例上完成,而不会分派给其他节点了。

  1.2 服务器端均衡(server-side LB)

     有了PMON的自动注册机制后,集群的每个节点的listener都掌握所有节点的负载情况,当收到客户端连接请求时,就会把连接转给负载最小的节点,这个节点有可能是自己也有可能是其他节点,

   listener的节点选择方法根据用户所请求的连接方式会有所不同:

  1)如果用户请求的Delicate专有连接,listener首先选择负载最小的节点,如果多个节点负载相同,则从节点选择负载最小的实例。

  2) 如果用户请求的是share server共享功能连接,除了做节点负载比较和实例负载比较之外,还要在所选择实例上,选择负载最小的dispatcher进行转发。

    利用Service分散负载

 通过把应用按照功能模拟进行划分分成service,进而把每个service固定在某个RAC节点上,从而从根本上提升系统的性能。这种分散负载的方法不是仅靠DBA进行配置就能完成的,需要DBA和开发人员合作,在了解业务数据特点之后才可能看到效果。

 

  ASM

  ASM:Automatic Storage Managerment,一种面向Oracle的存储解决方案与RDBMS相似,由实例和文件组成,可通过sqlplus工具来维护。

  ASM实例的创建和删除也可以用ASMCA这个命令来操作。ASM实例需要CSS进程。

  ASM实例

 由SGA和后台进程组成。

 1.1 SGA组成

 ASM实例的SGA包括Buffer cache share pool,Large Pool等。需要注意的是share pool,因为extent map要放在这部分的内从中,需要根据数据量来估计extent map的大小做相应的调整。

SQL>show sga

rac架构和原理" title="Oracle rac架构和原理" width="625" height="277">

 ASM

 1.2 后台进程

 ASM实例比RDBMS实例多2个进程:RBAL和ABRn。

 RBAL:Rebalancer进程,负责规划ASM磁盘组的rebanlance活动。

 ABRn:是RBAL进程的子进程,可以有多个,n可取1-9,这组进程负责真正完成rebanlance活动。(可用ps-ef|grep asm 查看ASM相关的进程)

 使用ASM作为存储的RDBMS实例也会多出2个进程:RBAL和ASMB

RBAL:打开每个磁盘的所有磁盘和数据的rebalance。

 ASMB:作为ASM实例和数据库实例之间的信息通道。负责与ASM实例的通信,它先利用Diskgroup Name从CSS获得管理该Diskgroup的ASM实例的连接串,再建立到ASM的持久连接,两个实例之间通过这条连接定期交换信息,同时也是一种心跳机制。

  

  RDBMS实例想要使用ASM作为存储,RDBMS实例必须在启动时从ASM实例获得extent map,以后发生磁盘组的维护操作,ASM实例还要把Extent MAP的更新信息通知给RDBMS实例,这个2个实例间的信息交换就是通过ASMB进程完成的。这也就是为什么:ASM实例必须要先于数据库实例启动,和数据库实例同步运行,迟于数据库实例关闭。

  ASM配置

 ASM可以使用裸设备或者ASMLib方式。

 ASM磁盘组

  直接管理磁盘,而不是文件

   一组磁盘作为一个逻辑单元

  原有的磁盘空间被划分为统一的管理单元

  ASM把文件均匀的分布在所有的磁盘上

  磁盘组中的磁盘可以不断添加和应用类型分组

 

 自动的存储管理

   内置的高性能集群文件和卷管理(专门针对Oracle数据文件)

   有效的分散数据到所有的存储设备上,实现负载均衡,达到最优性能和资源利用

    集成的Mirroring和Strip功能,实现高可靠性和高性能

     简化存储管理的复杂性

    移除对第三方磁盘管理和文件系统的需要

Stripe:

   动态、联机的重组存储资源

  磁盘发生变化时,自动的重新平衡数据分布

  在存储设置过程中,消灭了手工I/O调优的需要

rac架构和原理" title="Oracle rac架构和原理" width="670" height="82">

 Oracle RAC的优缺点

 Oracle RAC是一种高可用集群架构,与其他架构相比:

 1、资源使用

 双机热备:平时有一台服务器闲置

  双机互备:每台服务器都要预留一部分资源,接管备用

   ORACLE RAC:每台服务器资源可以充分利用

2、维护管理

    双机热备:集群层面维护相对简单,数据库维护相同

    双机互备:集群层面维护相对简单,数据库维护相同

    Oracle RAC:集群层面维护相对复杂,数据库维护相同

 3、接管时间

       双机热备:基于操作系统层面,数据库需要重启,接管时间相对较长

       双机互备:基于操作系统层面,数据库需要重启,接管时间相对较长

      Oracle RAC:基于数据库层面,数据库不需要重启,接管时间相对较短

 4、性能状况

       双机热备:数据库相当于单点,数据库性能好

       双机互备:资源需要预留,数据性能相对单点差

      Oracle RAC:并发查询性能好,针对不同业务和配置,事务处理能力不一致,性能表现不一致

 

 Oracle RAC架构的延伸

  Oracle RAC架构的延伸主要在以下几方面:

 Oracle RAC和RMAN(基于数据库还原、备份的工具):两者结合,可更高地保障数据库数据的安全性

  Oracle RAC和Data Guard(基于日志复制技术的数据同步软件):两者结合,解决共享存储出现故障的问题

  Oracle RAC和Streams:两者结合,构成分布式系统,解决Oracle RAC系统负载过高的问题

   Oracle RAC和Golden Gate

rac架构和原理" title="Oracle rac架构和原理" width="690" height="467">

rac架构和原理" title="Oracle rac架构和原理" width="690" height="488">

rac架构和原理" title="Oracle rac架构和原理" width="690" height="433">

rac架构和原理" title="Oracle rac架构和原理" width="690" height="462">

rac架构和原理" title="Oracle rac架构和原理" width="690" height="382">

rac架构和原理" title="Oracle rac架构和原理" width="690" height="415">

rac架构和原理" title="Oracle rac架构和原理" width="690" height="512">

rac架构和原理" title="Oracle rac架构和原理" width="690" height="540">

rac架构和原理" title="Oracle rac架构和原理" width="690" height="634">

你可能感兴趣的:(数据库,运维,操作系统)