oracle 集群包含两个技术栈:上层栈由CRS服务控制,下层栈由OHAS控制。这两个栈分别有几个processes来完成集群服务。下面分别介绍之。
1. GI 进程列表
2. RAC服务进程
2.1. CRS-集群资源服务(cluster ready services)
管理集群内高可用操作的基本程序。CRS管理的任何事务被称之为资源:数据库、实例、监听、虚拟IP、应用进程等等。CRS是根据存储于OCR中的资源配置信息来管理这些资源,当某个资源的状态改变时,CRS进程生成一个事件,操作包括启动、关闭、监控及故障切换,该进程由 root 用户管理和启动,CRSD如果有故障会导致系统重启。
2.2. CSS-集群同步服务(Cluster Synchronization Service)
管理集群节点的成员资格,控制哪个节点为集群的成员、节点在加入或离开集群时通知集群成员来控制集群配置信息,此进程发生故障会导致集群重启,提供心跳机制监控集群状态(DISK HEARTBEAT 和 NETWORK HEARBEAT),该进程由 oracle 用户运行管理。
2.3. EVMD事件管理服务(Event Management)
事件管理守护进程,发布CRS创建事件的后台进程。
2.4. ONS-事件的发布及订阅服务(Oracle Notification Service)
负责通过快速应用框架发布事件的主要后台进程。
2.5. OCR- Oracle Cluster Register
集群注册文件,记录每个节点的相关信息 保存RAC集群的各种资源信息,类似于windows注册表,存储于共享磁盘上,所有实例共享。默认有2个互备磁盘。OCR中保存整个集群的配置信息,配置信息以“key-value”的形式保存。
2.6. Voting Disk 表决磁盘
Voting Disk 这个文件主要用于记录节点成员状态,在出现故障时,决定哪个partion获得控制权,其他的partion必须从集群中剔除。在安装集群组件时也会提示指定安装位置,可以通过crsctl query css votedisk
查询集群的仲裁盘信息。
failover流程如下:
(1)crs在检测到rac2节点异常后,会触发集群组件重构,最后把rac2节点剔除集群,由节点1组成新的集群。
(2)rac的failover机制会把节点2的vip转移到节点1上,这时节点1的public网卡上就有3个ip地址:vip1,vip2,public ip
(3)用户对vip2的连接请求会被IP层路由转到节点1.
(4)因为在节点1上只有vip2的地址,所有数据包会顺利通过路由层,网络层,传输层。
(5)但是,节点1上只监听vip1和public ip1的两个IP地址,并没有监听vip2,故应用层没有对应的程序可接受这个数据包,这个错误会立即被截获。
(6)客户端能够立即接收这个错误,然后客户端会重新发起vip1的连接请求。
2.7. Cluster Time Synchronization Service (CTSS)
CTSS服务是一个可选项,通过网络时间协定服务器为集群提供时间同步,这个时间同步对RAC很重要。它可以运行在两种模式下:观望或者活动。当NTP被激活的时候,它运行在观察模式,若没有启动NTP,它将根据主节点同步所有节点的时间。
2.8. OPROCD(Process Monitor Daemon)
检测 CPU hang(非 Linux 平台使用),集群进程管理 —Process monitor for the cluster. 用于保护共享数据 IO fencing。
3. RAC后台进程
- LMON:LOCK Monitor Processes 也被称为Global enqueue service monitor
监控整个集群状况,维护GCS的内存结构 监控非正常终止的进程和实例 当实例离开和加入集群时,锁和资源的重新配置 管理全局的锁和资源 监控全局的锁资源、处理死锁和阻塞
- LCK:Lock Process
LCK进程主要用来管理实例间资源请求和跨实例调用操作,调用操作包括数据字典等对像访问,并处理非
CACEH FUSION的CHACE资源请求,(例如dictionary cache或row cache的请求) 由于LMS进程负责主要的锁管理功能,所以每个实例只有一个LCK进程
- LMD:Lock Monitor Deamon Process
LMD进程主要管理对全局队列和资源的访问,并更新相应队列状态,处理来自于其它实例的资源请,每一个全局队列的当前状态存储在相应的实例共享内存中,该状态表明该实例具有相应的权利使用该资源,一个实例master的共享内存中存在一个特殊的队列,该队列记录来自其它远程实例的资源请求,当远程实例的LMD进程发出一个资源请求时,该请求指向master实例的LMD,当master实例的LMD进程受到该请求后,在共享内存中的特殊队列中监测该资源是否有无效,如果有效LMD进程更新该资源对列的状态,并通知请求资源的LMD进程该资源队列可以使用了,如果资源队列正被其它实例使用或当前无效,则LMD进程通知正在使用中的实例的LMD进程应用释放该资源,等资源释放变得有效时,master实例的LMD进程更新该资源队列的状态,并通知请求资源实例的LMD进程,该资源队列可以使用了
全局队列服务(GES):主要负责维护字典缓存和库缓存内的一致性。字典缓存是实例的 SGA 内所存储的对数据字典信息的缓存,用于高速访问。由于该字典信息存储在内存中,因而在某个节点上对字典进行的修改(如DDL)必须立即被传播至所有节点上的字典缓存。GES 负责处理上述情况,并消除实例间出现的差异。出于同样的原因,为了分析影响这些对象的 SQL 语句,数据库内对象上的库缓存锁会被去掉。这些锁必须在实例间进行维护,而全局队列服务必须确保请求访问相同对象的多个实例间不会出现死锁。LMON、LCK 和 LMD 进程联合工作来实现全局队列服务的功能。GES 是除了数据块本身的维护和管理(由 GCS 完成)之外,在 RAC 环境中调节节点间其他资源的重要服务。
- LMSn:Lock Monitor Services也称作GCS(Global Cache Services)processes
LMS进程主要用来管理集群内数据库的访问,并在不同实例的buffer cache中传输块镜像,当在某个数据块上发生一致性读时,LMS负责回滚该数据块,并将它copy到请求的实例上 每个RAC节点至少有2个LMS进程。
全局缓存服务(GCS):要和 Cache Fusion 结合在一起来理解,全局缓存要涉及到数据块。全局缓存服务负责维护该全局缓冲存储区内的缓存一致性,确保一个实例在任何时刻想修改一个数据块时,都可获得一个全局锁资源,从而避免另一个实例同时修改该块的可能性。进行修改的实例将拥有块的当前版本(包括已提交的和未提交的事物)以及块的前象(post image)。如果另一个实例也请求该块,那么全局缓存服务要负责跟踪拥有该块的实例、拥有块的版本是什么,以及块处于何种模式。LMS 进程是全局缓存服务的关键组成部分。
- DIAG:Diagnostic Deamon
oracle10g新的后台进程 例行对实例的健康情况进行监控,同时也监控实例是否挂起或者出现死锁 收集实例和进程出错时的关键诊断信息 这个进程会更新alert日志文件,写入一些重要告警信息