oracle rac理论知识

oracle数据库高可靠性高性能的特性是很多企业需要的,这些年一直给各大政府企业做oracle咨询与规划,实施安装以及维护,回头看看,自己已经忘记大部分oracle rac的整体具体架构理论知识,现在回头再复习一次,感觉很清晰。

1.集群相关理论概述

一个集群(cluster)由2个或多个节点(nodes)组成。一般集群对外都会有统一的服务接口(集群地址),对内需要(集群内部通信)不断确定集群内部节点可用,一旦发生异常,可以通过(集群仲裁)驱逐问题Partition,使得集群能够不影响整体对外提供服务。

集群系统的设计一般都需要考虑2个经典问题:健忘和脑裂。

健忘:集群的配置文件,集群中各节点需要保证集群配置文件的一致性;
Oracle Clusterware集中记录这些信息到OCR,且整个集群只保留一份配置,各节点共用这份配置,解决了健忘的问题。
脑裂:集群内节点心跳通信故障时,集群需要决定具体哪个partition被踢出集群。
Oracle Clusterware采用两种心跳机制:网络心跳和磁盘心跳;当通过私有网络的网络心跳故障,需要使用voting disk的磁盘心跳来仲裁Partition剔除。
脑裂问题紧接着还涉及一个IO Fencing问题,即需要保护数据不被故障节点所修改破坏。RAC使用oprocd进程实现IO Fencing。

为了便于学习和理解,将RAC环境分为 存储层、网络层、集群层、应用层 4层来分别学习。

存储层
由SAN组成的存储层,由于RAC架构是共享存储,常规场景下只需要有一个存储。
但如果预算充足,为了进一步提高可用性,我们完全可以在存储层考虑使用2个存储,在存储层构建一个存储层面的集群。比如使用EMC的vplex,HDS的GAD(Global-Active Device)等。
这种存储级别的集群,在extended RAC架构中很常见。这一块基本都偏向于底层存储层面的知识,与RAC本身关系不大,不再多说。

网络层
public IP:集群各节点真实IP地址,和其他应用服务器连接在一个交换机上。
10g RAC VIP:在Public IP所在网卡上绑定一个VIP。
优点是:VIP是浮动的,使用VIP,可以避开对TCP协议栈超时的依赖。
11g RAC SCAN IP:在 VIP 基础上 再引入的scan IP,也有对应的scan IP的监听。
优点是:使用scan IP配置客户端连接,以后集群内部添加删除节点,不需改动客户端的tns配置。

private IP:集群内部互联IP,大数据量、低延迟要求,预算低用G级以太网,预算高用infiniband。
网络心跳(Network Heartbeat)使用这个private IP网络。
缓存融合(Cache Fusion)也是通过这个private IP网络进行传输。

集群层
集群层是在OS kernel和应用之间的一层。用来统一协调集群内各节点正常调度有序工作。
10g RAC 通过Oracle Clusterware来实现这一层的功能。
11g RAC 改名clusterware为GI。
GI除了名字上的不同,还有很多改变,比如将ASM安装的集成到GI中,比如GI的安装一般建议单独用户(grid)安装,而之前clusterware一般都是和数据库在同一用户(oracle)安装的等等,可以简单认为GI比clusterware更加完善细化了。

应用层
应用层是指在集群件之上的具体应用和资源。
RAC 按照用途主要把应用层分为2大类:nodeapps(节点应用) 和 database-related resource(数据库资源)。
nodeapps:GSD、ONS、VIP、Listener等。
database-related:Database、Instance、Service等。

2.Oracle Clusterware

Oracle Clusterware是Oracle自己开发的能支持所有平台的集群件,现在市场上还主要是用于RAC。
它的运行环境由两个磁盘文件、若干后台进程以及网络元素组成。

2.1 磁盘文件
两个磁盘文件,即OCR和Voting disk。
在10g RAC中,这两个文件必须放在真正的裸设备上,不可以放在ASM中。
在11g RAC中,这两个文件可以放在ASM上。

OCR:
负责维护整个集群的配置信息,包括RAC以及Clusterware资源,包括节点成员、数据库、实例、服务、监听器、应用程序等。

Voting disk:
存放在共享存储上,在集群出现“脑裂”时,仲裁哪个Partition最终获得集群的控制权。

2.2 后台进程
大家都知道的Clusterware最重要的进程:
CSS:管理集群内节点
CRS:管理集群资源
EVM:管理事件通知

我们具体来看clusterware中的主要后台进程:
ocssd: 用来管理集群内节点的加入/踢除。这个进程是clusterware中最关键的进程,如果该进程出现异常,会导致系统重启。
oprocd: 用来实现IO Fencing,早期Linux平台,使用hangcheck-timer模块来实现IO Fencing,从10.2.0.4开始,Linux平台也使用oprocd进程。
oclsomon: 用来监控css进程,如果发现进程挂起,会重启节点。
crsd: 用来管理集群内资源,是实现HA的主要进程。负责管理注册应用的start、stop、monitor、failover。
racgwrap脚本:CRSD会使用这个脚本来启动、关闭、检查实例的状态。
evmd: 负责发布CRS产生的各种事件。
racgimon: 用来监控集群健康状态,负责Service的启动、停止、故障转移。

2.3 网络元素
Oracle TAF是建立在VIP技术之上的。
TAF(Transparent Application Failover):对应用透明的故障转移。

文章前面在网络层概述提到过:VIP是浮动的,使用VIP,可以避开对TCP协议栈超时的依赖。
原因是:
TCP/IP实际的四层模型从下到上依次为:网络接口层(MAC)、网络层(IP)、传输层(TCP)、应用层(Listener)。
Public IP 和 VIP都属于网络层。
而当节点异常,对应的VIP会飘到其他节点,而其他节点没有该VIP地址的监听。VIP利用应用层的立即响应,避开对TCP协议栈超时的依赖。

3.Oracle RAC 原理

抛砖引玉:
GCS、GES、GRD、PCM这些东西是如何堆砌在一起的?
RAC的HA、LB、Cache Fusion...

3.1 数据库基本原理
数据库基本原理:同时保证并发和数据一致性。

1) 隔离级别
SQL-92标准中定义了四个隔离级别:Read Uncommitted、Read committed、Repeatable、Serializable。
Oracle 默认实现read committed隔离级别而不影响并发;这也曾是Oracle比较得意的地方。

2) 锁
数据库系统使用“锁”来控制“并发”。

Lock:代表一种控制机制,Lock框架包含3个组件:Resource Structure(资源)、Lock Structure(锁)、Enqueue(排队机制)。

Row-Level Lock:对于“数据记录”这种细粒度资源,Oracle使用的是行级锁。

行级锁共涉及以下4种数据结构:
ITL:块头ITL,用于记录哪些事物修改了这个数据块的内容,可以把它想成一个表格,每行记录一个事物,包括事物号、事物是否提交等重要信息。
记录头ITL索引:每条记录的记录头部有一个字段,用于记录ITL表项号,可以看作是指向ITL表的指针。
TX锁:这个锁代表一个事物,属于Lock机制。
TM锁:属于Lock机制,用于保护对象的定义不被修改。
无论一个事物修改多少个表的多少条记录,该事物真正需要的只是一个TX锁,每个表一个TM锁,内存开销非常小。而所谓的“行级锁”只是数据块头、数据记录头的一些字段,不会消耗额外资源。
因此,对于Oracle的“行级锁”必须要有正确的理解,它不是Oracle中通常意义上的“锁”,虽然有锁的功能,但是没有锁的开销。

Latch: Latch请求,获得,释放等操作是原子操作,一般几个硬件指令就可以完成。是一种低级锁,主要用于保护数据结构。
也就是说如果请求Latch得不到,不会释放CPU资源,而会不断尝试请求,只有在一定次数还不能获得时,才释放CPU。这就是Latch的spin机制。

锁模式:

--官方文档中v$lock中LMODE取值
0 - none
1 - null (NULL)
2 - row-S (SS)
3 - row-X (SX)
4 - share (S)
5 - S/Row-X (SSX)
6 - exclusive (X) 

--手工加锁语句语法参考
lock table &table_name in [ROW] SHARE, [[SHARE] ROW] EXCLUSIVE, SHARE UPDATE

--2 - row-S (SS)
lock table t_second_p in row share mode;
lock table t_second_p in share update mode;
--3 - row-X (SX)
lock table t_second_p in row exclusive mode;
--4 - share (S)
lock table t_second_p in share mode;
--5 - S/Row-X (SSX)
lock table t_second_p in share row exclusive mode;
--6 - exclusive (X)
lock table t_second_p in exclusive mode;

--查看被锁的对象
select * from v$locked_object;

3) SQL语句执行过程:
用户发出一条SQL语句,将主要经过解析、优化、产生执行计划、返回执行结果几个阶段。
如果解析后发现,在shared pool中已经有对应的执行计划,就可以直接拿来使用,相当于跳过了中间优化、产生执行计划2个步骤,这就是软解析。
这个过程中对Lock和Latch的使用:

前三个阶段目的就是产生执行计划,所谓“执行计划”就是对应shared pool中一个复杂的数据结构。

a. 为了产生这个数据结构,Oracle要计算SQL语句的哈希值,根据这个值确定要检索的“桶“(Hash Bucket),然后遍历这个桶中的”链表“,看是否有相同的SQL语句。如果没有,就要进行硬解析。
进程要从shared pool空闲空间中申请一块空间,用来存放编译后的执行计划。这就需要检索另一个”空闲链表“,从中申请一个大小合适的空闲块,申请成功后要更新这两个链表。在这个过程中,至少
涉及两个数据链表的访问,这个访问是”排他“(exclusive)的,不允许其他进程同时修改乃至访问,这就需要对”链表“加锁,这种锁用的就是Latch机制。

b. 在语句编译和执行过程中,“引用对象”的结构不能被更改。在编译前,需要把表的”元数据“加载到内存,在随后编译和执行过程中,这个内容保持不变,也就是不能让其他用户改变这个表的结构。
这里使用的就是TM Lock。

c. 执行阶段,要在buffer cache中定位到数据块,同样根据数据块地址查找“桶”中的“链表”找到最终的数据块。在这个过程中,链表数据结构也不能被修改,同样是使用latch保护。访问数据块
中的记录时,也要限制其他进程的访问,使用的是行级锁进行保护。

3.2 RAC环境并发控制
1) DLM、Cache Fusion、Non-Cache Fusion
由于要解决多个节点的并发,所以额外引入了DLM(Distribute Lock Management)。
DLM在Oracle发展的不同时期,名字也不相同,在OPS时期,叫做PCM;而在RAC时期叫做Cache Fusion。
在RAC中,DLM是以数据块作为粒度单位进行协调。

DLM协调集群各节点对资源使用的功能就叫做同步。在DLM中,根据资源数量、活动密集程度将资源分成了两类:PCM Resource、Non-PCM Resource。[也称Cache Fusion Resource、Non-Cache Fusion Resource]
对应两种资源,DLM提供的锁也是两种:PCM Lock、Non-PCM Lock。[也称Cache Fusion Lock、Non-Cache Fusion Lock]
在RAC数据库中共有两大类四种锁:
Local Lock:用于本地进程的并发控制,就是与传统单实例一样的,Latch 和 Lock。
Global Lock:用于集群间的并发控制,就是 PCM Lock 和 Non-PCM Lock。

典型的Non-Cache Fusion资源就是row cache和library cache。

PCM Lock 有三种模式,分别对应SGA中数据块的状态如下:

PCM Lock Mode    Buffer state
X                        XCUR
S                        SCUR
NULL                     CR

2) GRD
Cache Fusion要解决的首要问题是:数据块拷贝在集群节点间的状态分布图。RAC是通过GRD来实现的。
GRD位于每个实例的SGA中,所有实例的GRD汇总在一起才是一个完整的GRD。
GRD中记录的是PCM Lock信息,这种锁有三个属性:Mode、Role、PI。
Mode:X、S、NULL。
Role:L和G。
PI:Past Image主要能够加速Crash Recovery的恢复过程。

书中模拟一个场景:4节点RAC,针对一个数据块,这个数据块的Master node是节点2。PCM Lock用ModeRolePastimage格式描述,比如SL0代表Share Mode、Local Role、0个Past Image。
分别对并发读、读并发写、写并发写、写入磁盘、写并发读等情形,描述了集群相关节点的GRD、PCM Lock的变化过程,体会到Cache Fusion具体是如何工作的。限于篇幅,这里不再赘述。
总之,无论是单实例还是RAC,实例要修改数据块,必须获得这个数据块的当前版本。

3.3 RAC架构
1) SGA的变化
多了一个GRD(Global Resource Directory)部分,GSD的功能前面已经说过。

2) 后台进程的变化

LMSn GCS(Global Cache Service),这个进程是Cache Fusion的主要进程,负责数据块在实例间的传递。
LMD GES(Global Enqueue Service),这个进程负责在多个实例之间协调对数据块的访问顺序。它与LMSn进程的GCS服务还有GRD共同构成RAC最核心的功能Cache Fusion。
LCK 这个进程负责Non-Cache Fusion资源的同步访问。
LMON 各个实例等LMON进程会定期通信,检查集群中各节点的健康状态。负责集群重构、GRD恢复等操作,它提供的服务叫做CGS(Cluster Group Services)。
LMON提供节点监控功能:通过一个保存在GRD中的位图来记录(0代表节点关闭,1代表节点正常);
LMON检测到实例级别的“脑裂”时,会通知clusterware解决,如果等待超时,LMON进程会自动触发IMR(Instance Membership Recovery)。
LMON进程提供的IMR功能可以看作是Oracle在数据库层提供的“脑裂”,“IO隔离”机制。(LMON也借助两种心跳:网络心跳、控制文件的磁盘心跳)。
DIAG DIAG监控实例的健康状态,并在实例运行错误时收集诊断数据到Alert.log日志中。
GSD GSD进程负责从客户端工具,比如srvctl接收用户命令,为用户提供管理接口。

3) 文件
spfile 需要被所有节点访问,存放在共享存储上。
redo thread 每个实例都需要自己的一套redo log。需要被所有节点访问,存放在共享存储上。
archived log 建议存放在共享存储上。当然也有其他设计方式。
undo tablespace 每个实例都需要有一个单独的回滚表空间。存放在共享存储上。

4) SCN
在RAC中,由GCS负责全局维护SCN的产生,ORACLE 10g RAC 缺省使用的是Broadcast算法,可以从alert.log中看到。

5) Cache Fusion、GCS、 GES
GCS负责数据块在实例间的传递;
GES负责锁管理。

3.4 RAC和Clusterware的交互
RAC集群和节点集群是两个层次的集群,两个集群都有脑裂、IO隔离等问题。
两个集群有各自的故障检测机制,二者之间的机制可以有重叠也可以不同。
在RAC这一层出现节点故障时,首先会通知clusterware这种异常,等待clusterware完成集群重构,完成后再通知RAC,RAC集群再开始自己的重构,但是RAC并不完全依赖于clusterware解决问题,如果发生等待超时,RAC的LMON进程会自动触发IMR执行节点排除。

原文地址:https://www.cnblogs.com/zywu-king/p/8550181.html

时间: 2024-10-07 16:38:41

oracle rac理论知识的相关文章

Oracle RAC + Data Guard 环境搭建

国庆之前就准备做这个实验了. 后来时间不够,就没搞了. 6天的长假一放,都散漫的不成样子了.懒散了很多. 今天7号. 上班也没啥精神,但是该做的实验还得继续. Oracle 高可用性的三个主要体现是: RAC, Data Guard 和 Stream.  所以熟练掌握这些技术就是评价DBA的标准一个. RAC + Data Guard 主要用在灾备或者报表服务器上. 比如用RAC+ 逻辑standby 做报表,从而减轻RAC 系统的压力. 关于Data Guard 的一些原理知识可以参考: Or

深入理解Oracle RAC 12c

深入理解Oracle RAC 12c(顶尖专家权威指南唯一最新版数据库著作 Oracle第一社区技术大牛翻译 Amazon五星推荐) [美]Syed Jaffar Hussain(赛义德 贾法尔 侯赛因),Tariq Farooq(塔里克 法鲁克),Riyaj Shamsudeen(瑞亚吉沙姆斯丁),Kai Yu(于凯) 著   赵燚 梁涛 程飞 李真旭 译 ISBN 978-7-121-24066-9 2014年10月出版 定价:99.00元 488页 16开 编辑推荐 <深入理解 Oracl

JDBC编程理论知识(1)

1.SUN公司为统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC 2.JDBC全称为:Java Data Base Connectivity(java数据库连接),它主要由接口组成. 组成JDBC的2个包: (1)java.sql.*; (2)javax.sql.*; 3.JDBC在程序中的位置: 4.JDBC的六个固定步骤 1,注册数据库驱动[利用反射] 2,取得数据库连接对象Connection 3,创建SQL对象 4,执行SQL命令,并返回结果集 5,处理结果集 6,

数据库入门理论知识介绍

数据库入门理论知识介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 前言: 1.目前90%以上的公司面临的运维的瓶颈都在后端 最常见的2大瓶颈就是: 1>.数据库(极难扩展): 2>.存储: 所以说做互联网的运维工程师要是把以上两点问题解决就可以轻松的搞定整个架构 2.什么是数据库: 查百度上有长篇大论了一下数据库特点,我们可以简单的理解: 数据库就是一个存放数据的仓库,这个仓库按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来组织,存储的,我们可以通过数

【Oracle 集群】Linux下Oracle RAC集群搭建之Oracle DataBase安装(八)

Oracle 11G RAC数据库安装(八) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体系的总结,一则进行回顾复习,另则便于查询使用.本图文文档亦源于此.阅读Oracle RAC安装与使用教程前,笔者先对这篇文章整体构思和形成进行梳理.由于阅读者知识储备层次不同,我将从Oracle RAC安装前的准备与规划开始进行整体介绍安装部署Oracle RAC.始于唐博士指导,对数据库集群进行

商业智能BI-基础理论知识总结 ZT

因为要加入一个BI项目,所以最近在研究BI相关的知识体系,由于这个方面的知识都是比较零散,开始都很多概念,不知道从何入手,网上找的资料也不多,特别是实战案例方面更少,这里还是先把理论知识理解下吧,分享给大家,一起学习.下次再把实战的一一分享出来. 一.什么是商业智能BI BI(Business Intelligence)即商业智能,它是一套完整的解决方案,把企业的运营数据转化为信息或知识,辅助企业做出明智的业务经营决策的工具.将无序.零散.孤立的数据转换成整合的.规律的.有价值的数据资产,将其以

Oracle Rac 11.2.0.3迁移OCR和VOTEDISK

环境:AIX7.1+Oracle Rac 11.2.0.3 迁移描述:今天在装Oracle Rac的时候,错误的将500G的数据盘用作OCRDG了,遂后续比较麻烦,只能讲ocr和votedisk迁移到新建的OCRDG上,并把DATADG删除并格式化该盘.(OCRDG为normal 冗余) 操作如下: [email protected]:/home/grid>/oraapp/grid/gridhome/bin/ocrcheck Status of Oracle Cluster Registry i

下载Grid方法(Oracle RAC)

如何下载RAC所需的grid软件 注册账户后登陆OTN网站 到下载选项处找到"服务器和存储系统"项 下拉菜单找到,Grid Infrastructure 进入后,记得点击"接受许可"才可以从OTN下载软件 点击允许后,如下图所示: 下拉菜单,找到你所需要的软件包,如下图所示: ***********************************************声明***********************************************

TestNG学习-001-基础理论知识

此 文主要讲述用 TestNG 的基础理论知识,TestNG 的特定,编写测试过程三步骤,与 JUnit4+ 的差异,以此使亲对 TestNG 测试框架能够有一个简单的认知. 希望能对初学 TestNG 测试框架的亲们有所帮助.若有不足之处,敬请大神指正,不胜感激! TestNG是什么?TestNG是一个灵感来自于 JUnit 和 NUnit 的一个设计用来简化广泛的测试需求的开源自动化测试框架,其引入了一些新的功能,使其功能更强大,而且易于使用,但是 TestNG 不是 JUnit 的扩展.它