Oracle rac架构和原理

时间:2023-03-08 17:42:04
   

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">