RAC环境与单实例最主要的区别是
- RAC的每个实例都有属于自己的SGA、后台进程。
- 由于数据文件、控制文件共享于所有实例,所以必须放在共享存储中。
- 联机重做日志文件:只有一个实例可以写入,但是其他实例可以在恢复和存档期间读取。
- 归档日志:属于该实例,但在介质恢复期间,其他实例需要访问所需的归档日志。
- alert和trace日志:属于每个实例自己,其他实例不可读写。
RAC的主要组件包括:
- 共享磁盘系统
- Oracle集群件
- 集群互联
- Oracle内核组件
Oracle 11G RAC体系结构图:
Oracle集群件 clusterware
Oracle集群件能使节点能够互相通信,构成集群,从而这些节点能够像单个逻辑服务器那样整体运行。构成Oracle集群件的后台进程和服务是 crs(cluster ready service)--crsd、ocssd(oracle clusterware synchronization service daemon) 、oprocd(process monitor daemon)、evmd(event management daemon)和ons(oracle notification service)。Oracle集群件由CRS服务使用OCR(oracle cluster registory)和voting disk进行管理。
OCR记录和维持集群及节点的成员资格信息,而voting disk在通信故障时充当一个仲裁者。在集群运行期间,来自所有节点的一致性心跳信息都会发送给voting disk。
CRS(Cluster Ready Service)的组件包括,在linux系统可以通过ps -ef来查看以下进程
- crs守护进程crsd
- Oracle集群同步服务守护进程ocssd
- 事件管理器守护进程evmd
- Oracle通知服务ons
集群就绪服务CRS---CRSD
crsd为Oracle集群提供了高可用性的框架,并管理集群资源的状态:启动、停止、监视集群资源,并把发生故障的集群资源重定位到集群中的可用集群节点。集群资源可以是网络资源,如虚拟IP、DB实例、侦听器等。在对集群资源采取任何动作之前,crsd进程都会获取OCR中存储的集群资源配置信息。crsd还使用ocr来维护集群资源配置文件和状态。每个集群资源都有一个资源配置文件,它存储在OCR中。
集群同步服务CSS ---CSSD
ocssd提供节点之间的同步服务。它提供对节点成员关系的访问,并支持基本集群服务,包含集群组服务和集群锁定。ocssd的故障会导致计算机重新启动,以避免”脑裂“(如出现脑裂情况,集群的处理机制请看下面的votingdisk)。
注: ”脑裂“ -- 集群环境网络链路不能互通,但这些实例仍然正常运作,每个实例都认为其他实例已经挂掉,并尝试接管所有权。在共享存储环境下,如果出现此现象就会发生数据不一致的严重情况。
事件管理进程
Event Management (EVM):
A background process that publishes events that Oracle Clusterware creates.
一个发布Oracle集群事件产生的进程。
The background process that publishes Oracle Clusterware events. EVM scans the designated callout directory and runs all scripts in that directory when an event occurs.
发布oracle集群事件的后台进程。EVM扫描指定的目录,运行该目录中发生事件时所有的脚本。
Oracle通知服务 ONS
在crs启动时会在每个集群节点上启动该进程。只要集群资源的状态发生改变,每个集群节点上的ons进程就会互相通信,并交换HA事件信息。crs触发这些HA事件,并将他们传到ons进程,然后ons进程将这一HA事件信息发布到中间层。为了在中间层使用ONS,对于任何一台主机,只要上面有需要与FAN集成的客户端应用程序,就需要再这台主机上安装ONS。应用程序会出于各种不同原因而使用这些高可用性事件,特别是用于快速检测故障。解决和发布高可用性事件的整个过程称为“快速应用程序通知FAN”。高可用性(HA)事件也可称为FAN事件。
Oracle 11g r2的集群件启动进程
在R2中Oracle引入了“Oracle高可用性服务”守护进程OHASD(oracle high availability service daemon),它启动所有其他Oracle集群件守护进程。在安装GI期间,Oracle向/etc/inittab文件配置内容:
/etc/init.d/init.ohasd run >/dev/null 2>&1 </dev/null
Oracle集群注册表(ocr)
OCR文件是二进制文件,OCR存储Oracle集群件中所定义的全部集群资源的元数据、配置和状态信息。OCR必须能够给集群所有节点访问,所以在安装集群时需要配置好相关的权限。OCR用于引导css(cluster synchronization service),提供端口信息等集群中的节点配置信息(可以理解为windows的注册表)。多数情况下OCR只提供只读操作,其他例如在节点新增和删除期间CSS用新的信息更新OCR。
OCR每4个小时会自动备份一次并保存一周,会循环进行覆盖。备份路径为$ORACLE_HOME/cdata/。
表决磁盘(voting disk)
Votingdisk是一个共享磁盘,在操作期间可提供集群中的所有节点访问。votingdisk用作节点的集中引用,保存了节点之间的心跳信息。如果有任何节点不能ping表决磁盘,那么集群立即确认通信故障,将该节点从集群中剔除,以防止数据丢失。Votingdisk管理集群成员资格,并在节点之间发生通信故障时判断集群的所有权关系。对Votingdisk的管理应当对其进行镜像操作。
虚拟IP(vip virtual-IP)
vip的作用
当一个节点停机时,vip会被自动故障转移到其他节点之一,在此期间,获得vip的节点将重新向外部进行地址解析,指示vip的新mac地址,连接到这个vip的client将会立即发送一个重置数据包,这样客户端会获取这个错误消息,而不需要等待TCP超时。
单一客户端访问名称(scan) scan-IP
Oracle RAC 11g release 2 (11.2) introduces the Single Client Access Name (SCAN). SCAN is a domain name registered to at least one and up to three IP addresses, either in DNS(domain network service) or GNS. When using GNS and DHCP(dynamic host configuration protocol), Oracle Clusterware configures the VIP addresses for the SCAN name that is provided during cluster configuration.
ORACLE RAC 11g版本介绍了 SCAN。SCAN是一个注册到至少一个最多三个IP地址的域名,包括在DNS或者GNS。当使用GNS和DHCP时,oracle集群软件在集群配置期间,为SCAN名配置VIP地址。
The node VIP and the three SCAN VIPs are obtained from the DHCP server when using GNS. If a new server joins the cluster, then Oracle Clusterware dynamically obtains the required VIP address from the DHCP server, updates the cluster resource, and makes the server accessible through GNS(global network service).
当使用GNS时,VIP节点和三个SCAN VIP节点从DHCP服务器中被获取。如果一个新的服务器加入到集群,那么oracle集群软件从DHCP服务器中动态获取需要的VIP,来更新集群资源,使得服务器能够通过GNS来访问服务器。
Oracle内核组件
OracleRAC环境中的Oracle内核组件是每个实例中的附加后台进程集合。缓冲区缓存和共享池在Oracle RAC环境中变为全局的,需要特殊处理才能做到无冲突、无损坏地管理资源。
全局缓存服务GCS(global cache service)和全局队列服务GES(global enqueue service)
在这里可以回想在写Oracle体系结构的文时在单实例情况下Oracle对数据缓存和写入的过程,在RAC环境下,每个实例都有属于自己的SGA,那在这种情况下应该如何对数据进行有效管理呢,在rac中,一个节点的缓冲区缓存中可能包含了经常被另一个节点请求的数据,数据共享和交换的管理工作是由全局缓存服务(GCS)完成的。
全局资源目录GRD(global resource directory)
集群组中的所有资源构成一个集中的资源仓库,称为GRD,所有实例的资源加起来构成了GRD。GRD由两个服务管理,这两个服务分别为:GCS和GES,在Oracle并行服务器中这称为DLM(Distribute Lock Management)。
Oracle RAC后台进程
OracleRAC进程包括oracle实例进程之外,还有RAC的进程。这些进程使节点之间的缓存保持一致。维持缓存一致性是RAC的重要部分。缓存一致性技术用于在不同节点上的不同oracle实例之间保持缓冲区多个副本的一致性。GCS管理确保在访问一个缓冲区缓存中某个数据块的主副本时,会与另一个缓冲区缓存中的数据块副本进行协调。这样就确保了一个缓冲区缓存中某个数据块的最新副本包含了系统中另一个实例对该数据块所做的全部修改而无论这些
修改是否已经进行事务提交。
GRD管理所有资源的锁定或所有权,这些资源在OracleRAC中并不仅限于单一实例。GRD中GCS处理数据块,GES处理队列和其他全局资源。GCS和GES使用以下进程来管理资源,RAC特有的这些进程和GRD协作,以支持缓存融合(cache fusion):
- LMS 全局缓存服务进程
LMS(lock manager server 锁管理服务器 )是 缓存融合 中使用的一个进程。可以从数据块所在实例的缓冲区向请求实例的缓冲区缓存中传递数据块的一致性副本,而不需要进行磁盘写入。它还可以从LMD建立的服务器队列中获取请求,以执行所请求的 锁操作 。LMS进程管理对GCS资源的“锁管理服务器”请求,并将他们发送到一个由LMS进程处理的服务队列和全局锁的死锁检测,并 监控锁对话的超时 。
LMS是缓存融合中使用的一个进程。每个实例最多可以有10个LMS进程,可以使用lm_lms或者_lm_lms参数控制LMS进程的数量,默认情况下自动启动的LMS进程数就是该节点的CPU_COUNT函数的值。LMS进程还可以由系统动态调整,由_lm_dynamic_lms参数控制,默认情况下此参数被设置为FALSE。
- LMON 全局队列服务监控器(LMON(lock monitor)是一个锁监控器进程,管理GES。)LMON是一个“锁监控器”进程,负责管理“全局队列服务(GES)”。
它在进程死亡时维持GCS内存的一致性。LMON还负责在有实例加入或离开集群时进行集群重新配置和锁重新分配。它还检测实例死亡并监听本地消息。LMON进程还生成一个详细的跟踪文件,用于跟踪实例重新配置。后台的LMON进程监控整个集群,以管理全局资源。LMON管理实例死亡以及任意故障实例的相关恢复。具体来说,LMON处理与全局资源有关的恢复部分。LMON提供的服务业称作“集群组服务(CGS)”。
- LMD 全局队列服务守护进程(LMD(lock monitor daemon)是为GCS管理GES请求的守护进程。)
LMD是为GCS管理“队列管理服务”请求的守护进程。它管理对资源的请求,以控制对数据块的访问。LMD进程还负责死锁检测和来自其它实例的远程资源请求。
LMON和LMD进程与远程节点上的合作进程通信。其他进程可能与其它节点上的对等进程交换信息。
- LCK0 实例队列进程(LCK0管理实例资源请求和对共享资源的跨实例调用操作。)
LCK进程管理实例资源请求和对共享资源的跨实例调用操作。它还构建一个无效锁元件列表,在恢复期间验证锁元素。一个实例只能使用一个LCK进程,因为主要功能是由LMS进程处理的。
- DIAG 诊断守护进程(DIAG(diagnose)用于RAC环境中一个实例的所有诊断需求。)
DIAG是一个轻量级的守护进程,用于满足Oracle RAC环境中一个实例的所有诊断需要。 为解决与集群有关的调试,随DIAG守护进程一起引入了DIAG框架。这个框架不会干扰或影响系统的正常运行,DIAG的工作与实例无关,仅依赖于由底层操作系统提供的服务。这个框架使用oradebug工具实现集群范围内的调试。如果DIAG进程死亡,PMON会重新启动一个 新的DIAG进程,以继续其服务。DIAG守护进程还会监控本地Oracle RAC实例的健康状况,当一个基本进程发生故障时,本地实例中的DIAG进程可以捕获系统状态和其他有用信息,供以后诊断使用,然后通知其它实例上的DIAG进程捕获类似信息,这就提供了整个集群环境的一个快照视图。DIAG将负责监控本地Oracle RAC实例操作的活跃程度,并在检测到操作挂起时执行任何必要的恢复操作。