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模式从磁盘文件读取权限。
- 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">