原文转载自:rac后台进程说明及一些概念_ITPUB博客
1.GSD global services daemon
GSD与rac的管理工具dbca srvctl oem进行交互,用来完成实例的启动关闭等管理任务。为了保证这些管理工具运行正常必须在所有的节点上先start gsd,并且一个GSD进程支持在
一个节点的多个rac.gsd进程位于$ORACLE_HOME/bin目录下,其log文件为$oracle_home/srvm/log/gsdaemon.log
例如:
假设使用oem工具来启动一个实例,oem把该任务传递给相应的智能引擎,该智能引擎生成一个包含SRVCTL命令的脚本文件,GSD进程读取该脚本文件并且执行该脚本,最后GSD把
执行结果返回给智能引擎,近而智能引擎返回给OEM.又例如假设使用srvctl工具关闭所有的实例,GSD进程接受来自SRVCTL工具发出的请求,并在本地节点上执行该请求,然后把执行结果返回给SRVCTL会话。
2.LMON:GLOBAL ENQUEUE SERVICE MONITOR
LMON主要监测群集内的全局队列和全局资源,管理实例和处理异常并相应的群集队列进行恢复操作。监控全局锁定(global enqueues)及其资源,并提供global enqueues资源的恢复操作。enqueues是用来进行串行化行更新的共享的内存结构。
[@more@]
3.LMD:GLOBAL ENQUEUE SERVICE DAEMON
LMD进程主要管理对全局队列和资源的访问,并更新相应队列的状态,处理来自于其他实例的资源请求。每一个全局队列的当前状态存储在相应的实例共享内存中,该状态表明该实例具有相应的权利使用该资源。一个实例(master)的共享内存中存在一个特殊的队列,该队列纪录来自其他远程实例的资源请求,当远程实例的LMD进程发出一个资源请求时,该请求指向master实例的LMD,当master实例的LMD进程受到该请求后,在共享内存中的特殊队列中监测该资源是否无效,如果有效则LMD进程更新该资源对列的状态,并通知请求资源的LMD进程该资源队列可以使用了,如果资源队列正在被其他实例使用或者当前无效,则LMD进程通知正在使用中的实例的LMD进程应该释放该资源,等资源释放变得有效时,MASTER实例的LMD进程更新该资源队列的状态并通知请求资源实例的LMD进程该资源队列可以使用了。另外LMD进程也负责队列的死锁问题。。。
4.LMSn:GLOBAL CACHE SERVICE PROCESS(n 0~9)
LMS进程主要用来管理集群内数据块的访问,并在不同实例的BUFFER CACHE中传输块镜像。LMS进程跨集群管理数据库的请求,并保证在所有实例的BUFFER CACHE中一个数据块的镜像只能出现一次。LMS进程靠着在实例中传递消息来协调数据块的访问,当一个实例请求数据块时,该实例的LMD进程发出一个数据块资源的请求,该请求只向MASTER数据块的实例的LMD进程,MASTER实例的LMD进程同时正在使用的实例的LMD进程释放该资源,这时拥有该资源的实例的LMS进程会创建一个数据块镜像的一致性读,然后把该数据块传递到请求该资源的实例的BUFFER CACHE中。LMS进程保证了在每一时刻只能允许一个实例去更新数据块,并负责保持该数据块的镜像纪录(包含更新数据块的状态FLAG),RAC提供了10个LMS进程,该进程数量随着节点间的消息传递的数据的增加而增加。
5. lock process(LCK)
LCK进程主要用来管理实例间资源请求和跨实例调用操作,调用操作包括数据字典等对象的访问;并处理非CACEH FUSION的CHACE资源请求(例如:DICTIONARY CACHE或row cache的请求)
6.DIAG:DIAGNOSABILITY DAEMON
DIAG进程主要用来捕获实例中失败进程的诊断信息,并生成相应的TRACE文件(该trace文件保存在backupground_dump_dest/cdmp_timestamp目录下),该进程不需要进行配置更不应该被停止。该进程自动启动不需要进行调整,如果该进程失效则自动重新启动。
7、Operating System-Dependent(OSD):
是指依赖操作系统的一些参数、软件等。RAC通过操作系统相关的软件来访问操作系统和一些于CLUSTER相关的服务进程。OSD软件可能由Oracle提供(windows平台)或由硬件厂商提供(unix平台)。
OSD包括三个自部分:
The Cluster Manager(CM):集群监视器监视节点间通信,并通过interconnect来协调节点操作。同时还提供CLUSTER中所有节点和实例的统一视图。CM还控制CLUSTER的成员资格。
The Node Monitor(节点监视器):节点监视器提供节点内各种资源的状态,包括节点、interconnect硬件和软件和共享磁盘等。
The Interconnect。
8、Real Application Cluster Shared Disk Component:
RAC中这部分组件和单实例Oracle数据库中的没有什么区别。包括一个或多个控制文件、一系列联机重做日志文件、可选的归档日志文件、数据文件等。
在RAC中使用服务器参数文件会简化参数文件的管理,可以将全局参数和实例特定的参数存储在同一个文件中。
9、Real Application Cluster-Specific Daemon and Instance Processes:
包含两部分:
The Global Service Daemon(GSD):在每个节点上都运行一个全局服务后台进程,用于接收客户端如DBCA、EM等发出的管理消息,并完成相应的管理任务,比如实例的启动和关闭。
RAC中特别的实例进程:
Global Cache Service Processes(LMSn):控制到远端实例的消息的流量,管理全局数据块的访问。还用于在不同实例的缓冲区之间传递BLOCK的映射。
Global Enqueue Service Monitor(LMON):监视全局队列和集群间的资源交互,执行全局队列的恢复操作。
Global Enqueue Service Daemon(LMD):管理全局队列和全局资源访问。对于每个实例,LMD管理来自远端的资源请求。
Lock Processes(LCK):管理除Cache Fusion以外的资源请求,比如library和row cache的请求。
Diagnosability Daemon(DIAG):在实例中捕获进程失败的诊断数据。
10、The Global Cache and Global Enqueue Service:
全局缓存服务(GCS)和全局队列服务(GES)是RAC的集成组件,用于协调对共享数据库和数据库内的共享资源的同时访问。 GCS和GES(它们都是基本的RAC进程)发挥了关键作用。GCS确保数据的单个系统图像,即使数据被多个实例访问。GCS和GES是实时应用集群的集成组件,它们协调对共享数据库的同时访问,还协调对数据库和数据库缓存内共享资源的同时访问。GES和GCS共同维护全局资源目录(Global Resource Directory,GRD)来记录有关资源和队列的信息。GRD保存在内存中,存储在所有实例上。每个实例都管理部分目录。分布式特性是RAC容错的关键点。协调共享缓存服务器内的并发任务称为同步。同步使用私有互连和大量消息传输。下面这些类型的资源需要同步:数据块和队列。GCS整体维护数据块模式,并负责实例间的数据块传输。LMS进程处理GCS消息,并完成大多数GCS处理。队列是一种共享内存结构,它串行化对数据库资源的访问。它可以是局部的,也可以是全局的。Oracle在3种模型中使用队列:①空(N)模式;②共享(S)模式;③独占(X)模式。数据块是读写入和读写出缓冲器的基本结构。它通常是最经常被请求的资源。GES维护或处理字典缓存、库缓存、事务锁定和DDL锁定的同步。换句话说,GES管理队列而不是数据块。为了同步访问数据字典缓存,需要在独占模式和单节点集群数据库中使用闩锁。在集群数据库缓存中使用全局队列。
GCS和GES包括以下特性:
应用透明性;
分布式结构的全局资源目录:只要还存在一个节点,即使出现一个或多个节点失败,GCS和GES仍然可以保证全局资源目录的完整性;
资源控制:GCS和GES会选择一个实例来管理所有的资源信息,这个实例叫做resource master。GCS和GES会根据数据访问方式阶段性的评估和修改resource master。这种方式会减少网络流量和资源获取时间;
GCS和GES与CM之间的交互:GCS和GES独立于CM。但同时GCS和GES依赖于CM提供的各个节点上实例的状态信息。一旦无法取得某个实例的信息,则Oracle会马上关闭没有响应的实例,来保证整个RAC的完整性。
11、缓存熔合和资源协调:
因为实时应用集群中的每个节点都有自己的内存(缓存)(不与其他节点共享),所以RAC必须协调不同节点的缓存,同时减少可能降低性能的其他磁盘I/O。缓存熔合这种技术使用高速互连来提供集群中实例之间从缓存到缓存的数据块传输。缓存熔合功能允许脏数据块的直接内存写,从而不需要强迫磁盘写和重读(或ping)提交的数据块。然而,这不是说不会发生磁盘写。缓存取代和出现检查点时仍然需要磁盘写。缓存熔合解决了涉及实例间并发性的问题:多个节点上的并发读操作、不同节点上的并发读写、不同节点上的并发写操作。
如果数据块不一定总是在实例的缓存中,那么Oracle只从磁盘读取它们。因为推迟了数据块的写,所以它们通常包含来自多个事务的修改。只有当出现检查点时,修改过的数据块才会被写到磁盘。进一步讨论之前,我们需要熟悉Oracle 9i RAC中引入的一些概念:资源模式和资源角色。因此相同数据块可以同时存在于多个实例中,所以有两个标识符可以帮助协调这些数据块:
资源模式。模式有空模式、共享模式和独占模式。数据块可以用不同模式保存,取决于资源占有者是要修改数据还是只读它们。
资源角色。这些角色可以局部管理和全局管理。
全局资源目录(GRD)不是数据库。它是内部结构的集合,用来查找数据块的当前状态。当数据块传输出本地缓存之外,并传输到另一个实例的缓存中,就更新了GRD。在GRD中可用下面有关资源的信息:
数据块标识符(Data Block Identifier,DBA)
大多数当前版本的位置
数据块的模式(N、S、X)
数据块的角色(局部或全局)
下表中带(r)的进程表示需要以root用户运行
表1:ClusterWare相关进程列表
Clusterware组件 | Linux/unix进程 | Windows服务 | Windows进程 |
Process Monitor Daemon | oprocd(r) | OraFenceService | |
RACG | racgmain racgimon | racgmain.exe racgimon.exe | |
Oracle Nonification Service(ONS) | ons | ||
Event Manager | evmd(r) evmd.bin evmlogger | OracleEVMService | evmlogger.exe evmd.exe |
Cluster Ready | crsd.bin(r) | OracleCRSService | crsd.exe |
Cluster Synchronization Services | init.cssd(r) ocssd(r) ocssd.bin | OracleCSService | ocssd.exe |