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

Oracle rac架构和原理的更多相关文章

  1. Oracle RAC架构图和常用命令

    转至:https://www.cnblogs.com/yaoyangding/p/15596308.html Oracle RAC(实时应用集群)是Oracle数据库完全高可用体系解决方案中的一个关键 ...

  2. Oracle RAC cache fusion原理測试

    Oracle RAC cache fusion是RAC最核心的工作机制.他把全部实例的SGA虚拟成一个大的SGA区,每当不同的实例请求同样的数据块,这个数据块就须要在实例间进行传递. 那究竟什么时候传 ...

  3. 关于Oracle RAC中SCN原理和机制的探索

    今天看书时看到了关于RAC中SCN的问题,为了进一步搞清楚其内部原理和机制,对该问题进行了广泛的查阅和搜索,遗憾的是,可以参考的资料很少,网上大部分是人云亦云的帖子,其中,详细介绍其内部原理和机制的资 ...

  4. oracle rac理解和用途扩展

    Oracle RAC的优势在于利用多个节点(数据库实例)组成一个数据库,这样在保证了数据库高可用性的情况下更充分的利用了多个主机的性能,而且可以通过增加节点进行性能的扩展.实现Oracle RAC需要 ...

  5. 《Oracle RAC性能优化》

    一 RAC环境 RAC架构,2节点信息 节点1 SQL> show parameter instance NAME                                 TYPE    ...

  6. Oracle RAC 并发与架构

    10g RAC进程总概 一. RAC 并发 RAC 的本质是一个数据库,运行在多台计算机上的数据库,它的主要任务是数据库就是事务处理,它通过 Distributed Lock Management(D ...

  7. [转帖]万字详解Oracle架构、原理、进程,学会世间再无复杂架构

    万字详解Oracle架构.原理.进程,学会世间再无复杂架构 http://www.itpub.net/2019/04/24/1694/ 里面的图特别好 数据和云 2019-04-24 09:11:59 ...

  8. Oracle架构实现原理、含五大进程解析(图文详解)

    目录 目录 前言 Oracle RDBMS架构图 内存结构 系统全局区SGA 高速缓存缓冲区数据库缓冲区 日志缓冲区 共享池 其他结构 进程结构 用户连接进程 用户进程User Process Ser ...

  9. oracle rac 学习(转载)

    一. RAC 并发 RAC 的本质是一个数据库,运行在多台计算机上的数据库,它的主要任务是数据库就是事务处理,它通过 Distributed Lock Management(DLM:分布式锁管理器)  ...

随机推荐

  1. Zabbix监控websphere和weblogic

    本节内容 zabbix java gateway 配置和运行java gateway 配置zabbix server使用java gateway 调整java gateway的日志级别 监控weblo ...

  2. Cocos2d-x for Windows Phone 用法总结

    鉴于诺基亚(微软移动这个没人用的手机)开发者比较少,cocos2dx移植方面更是少的问题,总结一下WP8移植方面的资料,希望对大家有用,自己也当作笔记留念. 1.WP8方面有两种方式创建项目,Hell ...

  3. 用 Java 实现一个插入排序算法

    有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法:插入排序法.插入排序的基本操作就是将一个数据插入到已经排好序的有序 ...

  4. Django实战(4):scaffold生成物分析

    在上一节用一个插件生成了类似rails的scaffold,其实无非就是URLconf+MTV.让我们看看具体都生成了哪些东西. 首先是“入口”的定义即URLconf,打开urls.py: from d ...

  5. VPS开启Google BBR

    前言:系统环境为Ubuntu 18.04 修改系统变量: echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf ec ...

  6. PHP程序员未来路在何方

    PHP 从诞生到现在已经有20多年历史,从Web时代兴起到移动互联网退潮,互联网领域各种编程语言和技术层出不穷, Node.js . GO . Python 不断地在挑战 PHP 的地位.这些技术的推 ...

  7. 取得项目的 Git 仓库

    有两种取得 Git 项目仓库的方法.第一种是在现存的目录下,通过导入所有文件来创建新的 Git 仓库.第二种是从已有的 Git 仓库克隆出一个新的镜像仓库来. 在工作目录中初始化新仓库 要对现有的某个 ...

  8. CSUOJ 1018 Avatar

    Description In the planet Pandora, Jake found an old encryption algorithm. The plaintext, key and ci ...

  9. Java8Lambda表达式

    “Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个 ...

  10. Entity Framework Core(3)-配置DbContext

    设计时 DbContext 配置 EF Core 设计时工具如迁移需要能够发现和创建的工作实例DbContext以收集有关应用程序的实体类型以及它们如何映射到数据库架构的详细信息的类型. 此过程可以为 ...