RAC理论
RAC 和传统的oracle实例相比,在sga 和 backgrond processor 有着很大的差别,最大的不同指出在于多了一个GRD
GRD(全局目录)
GRD内存块主要是记录该RAC有多少个集群数据库与系统资源。同时也会记录数据块的相关信息,因为在RAC架构中,每个数据块在没有个SGA当中能够有一份副本。而却RAC必须要知道这些数据块的位置,版本,分布以及目前的状态,这些信息就存放在GRD的当中。
GRD只是负责存放这些信息,但是不去负责管理,管理的工作时候GCS和GES进行
一.SCN
SCN是Oracle用来跟踪数据库内部变化先后顺序的机制,可以将其想象成一个高精度的时钟,每一个redo条目,undo data block ,data block 都会有SCN号。在RAC当中,有GCS负责全局维护SCN的产生,有两种同步方法:
Lamport SCN生成算法
缺省用的是Lamport SCN生成算法,在所有的节点间的通信内容当中都携带SCN,每一个节点把接受到的SCN和本机的SCN做对比,如果本机的SCN小,则要调整本机的SCN和接收的一致,如果节点通信不多,还会主动地定期相互通报。
广播算法(Broadcast)
这个算法是在每个commit操作之后,及欸但要向其他的节点广播SCN,虽然这种方式会对系统造成一定的负载,但是确保每个节点在commit之后能够立即查看到SCN。
Lamport 虽然负载小,但是节点之间会有延迟,广播虽然有负载,但是没有延迟,Oracle 10g RAC的缺省值为Broadcast算法,可以从alert.log日志中看到相关的信息。
二. RAC的GES/GCS原理
GES(全局队列服务)
GES叫做全局队列服务,主要负责维护dictionary cache 和 labrary cache 的一致性,dictionary cache是实例的SGA内所存储的对数据字典信息存储在内存中,因而在某个及欸但但上对字典进行的修改立刻被传播到所有的字典缓存。GES负责上述的情况,并且消除实例之间出现的差异。处于同样的元吸引,为了分析影响这些对象的sql语句,数据库内对象上libaray cache 锁会被去掉。这些锁必须在实例之间进行维护,而GES必须确保请求访问相同对象的多个实例间不能出现死锁。
为了实现GES的功能需要LMON,LCK,LMD进程联合工作来完成。
GES在RAC环境中调节节点其他资源的重要服务,保证实例间的同步,并且控制锁的访问。
GES是一个完整的RAC组件。其负责和集群中的实例全局锁进行沟通,每个资源有一个和主节点的实例,这个实例记录了其当前的状态。
GCS(全局内存服务)
GCS叫做全局内存服务,控制对数据块的访问,GES是分布式锁管理器的扩展,其可以用来管理oracle并行服务器的锁和数据块。在一个集群环境中,访问libarary cache和dictionary cache中的资源时,这些对象代表了被全局锁所保护的资源。
GCS是另一个RAC组件,负责协调不同实例间对数据块的访问。对这些数据块的访问以及更新都记录在GRD当中,这个全局目录是一个虚拟的内存,每一个块都有一个master实例,这个实例负责对GSD的访问进行管理,GSD里面记录了这个块的当前状态信息。GCS是oracle用来实施Cache fusion(内存融合)。
此处要注意:被GCS和GES管理的块和锁叫做资源。对这些资源的访问必须在集群的多个实例中进行协调,这个协调在实例才能免和数据库层面都有发生。实例的层次的资源协调叫做本地资源协调;数据库层面的叫做全局资源协调。
私网心跳(保证数据库的完整性)
支持GCS和GES的后台进程使用私网心跳来做实例之间的通讯。这个网络也被oracle的集群组建使用。也有可能被 集群文件系统OCFS所使用。GCS和GES独立于oracle群集组件而运行,但是GCS和GES依靠这些群集组件获得每个实例的状态,如果不能从某个实例中获得,这个实例也就会被关闭,(这里就是所说的脑裂)这个关闭操作的目的library cache锁和dictionary cache的锁,这些资源在RAC当中是全局性的
Clusterware 架构
在单实例当中,数据库是由 OS Kernel 去进行硬件管理,并且提供硬件接口,单实例database 不直接对硬件调用请求,所以single instance是通过 OS Kernel对硬件进行管理。
在RAC当中,OS Kernel只能管理single instance和多个processor的访问,ClusterWare起到了在集群当中的作用,ClusterWare存在于Oracle和OS Kernel之间,他会截获Oracle想OS Kernel 发出的请求,然后和其他节点上的ClusterWare协商,最终完成session的请求。
在ORACLE 10G之前,ORACLE没有这种集群软件,总是依赖hp,sun,在ORACLE 10.1 的时候,推出了自己的集群产品CRS(cluster ready service),在ORACLE 10.2当中改名为 ORACLE Clusterware,在RAC当中一个是由Clusterware软件组成的集群,一个是由Database组成的集群。
注意:clusterware 是为了集群当中将ORACLE下发的硬件调用指令集群同步到各个服务器,从而通知OS Kernel去进行硬件调配。
Clusterware 的主要进程
a> CRSD 负责集群的高可用操作,管理的crs资源包括胡数据库,实例,监听,虚拟ip,ons,gds等,操作包括启动,关闭,监控及故障切换。该进程由root用户管理和启动,crsd如果有故障会导致系统重新启动。
b> CSSD 管理哥哥节点的关系,用于节点间的通信,节点在加入或者离开集群是通知集群。该进程由oracle用户运行管理,cssd故障发生也会重启系统。
c> EVMD 事件检测进程,由oracle用户运行管理。
以下是一些重要的服务
cluster ready service(CRS, 集群准备服务): 是管理集群内高可用操作的基本程序,CRS管理的所有东西叫做资源,可以通过crs_stat -t 进行查看,一般有数据库,监听,实例,vip地址,应用进程,CRS是根据存储于OCR之中的资源配置信息来管理这些资源。包括启动,关闭,监控以及故障切换(start,stop,monitor以及failover )的操作。当一个资源的状态改变的时候,crs进程生成一事件,在发生故障的时候自动启动这些资源组件。默认的情况下CRS进程会进行5次重启操作,如果资源仍然无法启动则不再尝试。
cluster synchronization service(CSS集群同步服务):管理集群的配置,保证了集群环境中进程间通信,css也可以应用在single instance当中的ASM,在集群的环境当中,css提供了组服务,即给各个节点和实力构成集群动态信息,以及节点的名称和节点静态信息。CSS还负责维持心跳。并且监控投票盘的split-brain故障。
此处需要注意一个问题
Voting disk 和ocr 必须保存在存储设备上供各个节点访问。
Voting disk、ocr和网络是安装的过程中或者安装前必须要指定或者配置的。安装完成后可以进行配置修改。
RAC软件结构
RAC软件结构有四部分。
操作系统相关部分
RAC共享磁盘部分
RAC中特别的后台进程和实例进程
全局缓冲区服务和全局队列服务(GCS全局内存服务,全局队列服务)
一. OSD operation system-Dependent
RAC是通过操作OS相关软件来访问OS和一些相关服务进程。
OSD软件可能由Oracle提供,可能由软件厂商提供。
OSD包括三个部分:
the claster manager(CM)
集群监视器监视节点间的通信,通过inerconnect调节节点操作,同时还提供cluster中协调节点操作,cluster所有节点和实例统一视图。CM控制节点成员的资格。
the node monitor(节点监视器)
节点监视器提供节点内各种资源的状态,包括节点,interconnect硬件和软件共享磁盘等。
the interconnect 节点中的心跳
一种是通过network heartbeat ,一种是通过voting disk 的disk heartbeat。
二. real application cluster share disk:
这个部分的存储是RAC专有的,其实和单实例相同,用于存放数据库的控制文件,参数文件,数据文件,密码文件等,11G的RAC当中可以将全局参数和实例特定的参数存储在同一个文件当中。
三. real appliacation cluster_special daemon and instance backgroud process:
GSD:the global service daemon (GSD):在每个节点上都有一个全局服务管理和进程,用来接收客户端的dbca,em等传来的信息,并且完成管理任务。
global cache service processes (LMSn):控制到远端实例的消息的流量,管理全局数据块的访问,用于不同实例缓冲区之间传递block映射。
global enqueue service monitor (LMON):监视全局队列和集群间的资源交互,执行全局队列的恢复操作。
global enqueue service daemon(LMD):管理全局队列和全局资源访问,对于每个实例LMD管理来自远端的资源请求。
lock processes (LCK):管理除cache fusion 以外的非数据块资源请求,比如数据文件,控制文件,数据字典视图,library cache ,dictionary cache的请求。
diagnosability Daemon (diag): 在实例中捕获进程失败的数据诊断。
四. the global cache and enqueue Service
全局缓存服务(GCS)和全局队列服务(GES)是RAC的集成组件,用于协调对共享数据库和数据库内的共享资源同时访问。
GCS和GES包括以下几种特性:
应用透明性
分布式结构
分布式结构的全局资源目录:只要有一个节点存活。其他所有节点当掉,GCS和GES都会保证全局资源目录的完整性。
资源控制
GCS和GES会选择一个实例去管理所有的资源信息,这个实例叫做resource master ,GCS和GES根据数据访问方式阶段性的评估和修改resource master。这种方式会介绍网络流量个资源获取时间。
GCS和GES和CM进行交互:CM向GCS和GES提供节点实例状态信息,一旦无法取得某个实例的信息,oracle会关闭没有响应的实例,从而保证RAC的完整性。
THAT'S ALL
BY CUI PEACE !!!!!!
领取专属 10元无门槛券
私享最新 技术干货