RAC进程与SCN(原创)

简介:

LMON:GLOBAL ENQUEUE SERVICE MONITOR 
LMON 主要监测群集内的全局队列和全局资源,管理实例和处理异常并对相应的群集队列(enqueues是用来进行串行化行更新的共享的内存结构)进行恢复操作。 监控全局锁定(global enqueues)及其资源,并提供global enqueues资源的恢复操作。
各个实例的LMON进程会定期通信,以检查集群中各个节点的健康状况,当某个节点出现故障时,负责集群重构、GRD恢复等操作,它提供的服务叫做Cluster Group Services(CGS)
集 群中,健康检测是非常重要的,如果健康检测出现问题,那么可能出现”脑裂问题“。但是在关键应用中只靠集群软件的健康软件的健康监测是不够的。比如某个节 点Instance异常挂起,导致其不能对我提供服务。如果单从Network、OS、ClusterWare几个层面看,可能检测不到这种异常。因此, 脱离了应用程序的集群检测是没有意义的,数据库必须有自我监测的机制,而LMON被赋予了自检功能,这个功能是LMON提供的CGS服务,总的来说,这个 服务有以下几个要点。
1、LMON提供了节点监控(Node Monitor)功能,这个功能是用来记录应用层各个节点的健康状况,节点的健康状况是通过一个保存在GRD中的位图(Bitmap)来记录的,每个节点 一位,0代表着关闭,1代表着正常运行。各个节点间的LMON会相互通信,确认这个位图的一致性。
2、节点上的LMON进程会定期进行通信,这个通信可以通过CM层完成,也可以不通过CM层,直接通过网络层。
3、 LMON可以和下层的Clusterware合作也可以单独工作,当LMON检测到实例级别的脑裂时(实例认为对方已经down掉,自己还健 在),LMON会先通知下层的Clusterware,期待借助Clusterware解决脑裂问题。但是RAC并不假设Clusterware肯定能够 解决问题,因此LMON进程不会无尽等待Clusterware层的处理结果。如果发生等待超时,LMON进程会自动触发IMR(Instance Membership Recovery)也叫做Instance Membership Reconfiguration。LMON提供的IMR看作是Oracle在数据库层提供的”脑裂“、”IO隔离“机制。
4、LMON主要也是借助两种心跳机制来完成健康检测。
节点间的网络心跳(Network Heartbeat):可以想象成节点间定时发送Ping包检测节点状态。如果能够在规定的时间内收到响应,就认为对方健在。
通 过控制文件的磁盘心跳(Controlfile Heartbeat):每个节点的CKPT进程每隔三秒更新一次控制文件的一个数据块,这个数据块叫做Checkpoint Progress Record,控制文件是共享的,因此实例间可以相互检查对方是否及时更新以判断状态。

可以通过视图查看这个操作:

SQL> select inst_id,cphbt from x$kcccp;
   INST_ID      CPHBT
---------- ----------
         1  801362227
         1  801340474

 

SQL> /
   INST_ID      CPHBT
---------- ----------
         1  801362229
         1  801340476

LMD:GLOBAL ENQUEUE SERVICE DAEMON 
LMD 进程主要管理对全局队列和资源的访问,并更新相应队列的状态,处理来自于其他实例的资源请求。每一个全局队列的当前状态存储在相应的实例共享内存中,该状 态表明该实例具有相应的权利使用该资源。一个实例(master)的共享内存中存在一个特殊的队列,该队列纪录来自其他远程实例的资源请求,当远程实例的 LMD进程发出一个资源请求时,该请求指向master实例的LMD,当master实例的LMD进程受到该请求后,在共享内存中的特殊队列中监测该资源 是否无效,如果有效则LMD进程更新该资源对列的状态,并通知请求资源的LMD进程该资源队列可以使用了,如果资源队列正在被其他实例使用或者当前无效, 则LMD进程通知正在使用中的实例的LMD进程应该释放该资源,等资源释放变得有效时,MASTER实例的LMD进程更新该资源队列的状态并通知请求资源 实例的LMD进程该资源队列可以使用了。另外LMD进程也负责队列的死锁问题。。。
这个进程负责提供的是GES( Global Enqueue Service), 具体来说,这个进程负责在多个实例之间协调对数据块的访问顺序,保证数据的一致性。 
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进程,该进程数量随着节点间的消息传递的数据的增加而增加。

这个进程是Cache Fusion的主要进程,负责数据块在实例间的传递,对应的服务叫做GCS(Global Cache Service)。这种进程的数量是通过参数GCS_SERVER_PROCESSES来控制,缺省是2个,取值范围是0-9.

LCK:lock process 
负责Non-Cache Fusion资源的同步访问,每个实例有一个LCK进程。 
DIAG:DIAGNOSABILITY DAEMON 
DIAG进程主要用来捕获实例中失败进程的诊断信息,实例出现运行时错误时收集诊断数据包记录到Alter日志中或 生成相应的TRACE文件(该trace文件保存在backupground_dump_dest/cdmp_timestamp目录下),该进程不需要进行配置更不应该被停止。该进程自动启动不需要进行调整,如果该进程失效则自动重新启动。
OSD:Operating System-Dependent 
是指依赖操作系统的一些参数、软件等。RAC通过操作系统相关的软件来访问操作系统和一些于CLUSTER相关的服务进程。OSD软件可能由Oracle提供(windows平台)或由硬件厂商提供(unix平台)。
OSD包括三个自部分:
The Cluster Manager(CM):集群监视器监视节点间通信,并通过interconnect来协调节点操作。同时还提供CLUSTER中所有节点和实例的统一视图。CM还控制CLUSTER的成员资格。
The Node Monitor(节点监视器):节点监视器提供节点内各种资源的状态,包括节点、interconnect硬件和软件和共享磁盘等。
The Interconnect。

SCN

在RAC环境中,每个节点都有自己的SCN发生器,每个节点都会修改数据库。必须有某种机制 保证这些SCN在时间排序上的精确。如果紧靠计算机的系统时钟肯定是不够的。在RAC环境中, 由GCS负责全局维护SCN的产生,一共通过两个算法产生SCN:

Lamport算法:在所有节点间的通信内容中都携带SCN, 每个节点把接收到的SCN和本机的SCN对比,如果本机的SCN 小,则调整本机的SCN和接收的一致, 如果节点间通信不多,还会主动地定期相互通报。 故即使节点处于Idle 状态,还是会有一些Redo log 产生。Oracle9i及10.1 RAC默认采用这种方式。

Commit广播(Broadcast)算法: 在每个Commit操作之后,节点要向其他节点广播SCN, 虽然这种方式会对系统造成一定的负载,但是确保每个节点在Commit之后都能立即查 看到SCN. Oracle10g r2 RAC默认采用这种方式。
上述两种算法可以通过调整初始化参数max_commit_propagation_delay来切换。在
Oracle 9i RAC中 , 该参数的默认值都是700厘秒(centisecond),采用Lamport算法。
如果该值小于100厘秒,Oracle就采用广播算法,并且记录在alert.log文件中。 一 般来说这个参数在9i和10.1的缺省值是700(TRU64除外)也就是7秒钟,实际上这是一个上限了,因为lck每隔3秒钟会有一个例行的信息包交 换,一般情况下,3秒钟肯定会完成一次scn传播。这个参数,如果设置为0-99,那么数据库会选择Broadcast-On-Commit算法,由 LGWR来传播SCN。一般来说我们可以设置为0-99或者保留原有的值不动,没有十分可靠的分析证据的情况下,建议不要设置100-700之间的值。 10.2开始,lgwr传播SCN的算法有了很大的改进,因此10.2缺省使用Broadcast-On-Commit,这个参数的缺省值也变为0.
10g R2 RAC的alert log 类似:
Sun Nov  7 02:07:56 2010
ALTER DATABASE OPEN
This instance was first to open
Picked broadcast on commit scheme to generate SCNs
Sun Nov  7 02:08:01 2010 
LGWR: STARTING ARCH PROCESSES

这两种算法各有优缺点,Lamport算法虽然负载小,但是节点间会有延迟(提交了但是还没有传递给其他节点),commit广播算法虽然有负载,但是没有延迟。 Oracle 10g R2 RAC 缺省选用的是BroadCast算法。

 

参考至:《大话Oracle RAC》张晓明著
                 http://www.jiagulun.com/home.php?mod=space&uid=338&do=blog&id=514
                 http://ysping.itpub.net/post/40024/488905
                 http://www.oraclefans.cn/forum/showtopic_tree.jsp?rootid=8579&showid=8579
                 http://space.itpub.net/35489/viewspace-689333
本文原创,转载请注明出处、作者

如有错误,欢迎指正

邮箱:czmcj@163.com

作者:czmmiao  文章出处:http://czmmiao.iteye.com/blog/1743375
相关文章
|
Oracle 关系型数据库 Shell
|
Oracle 关系型数据库
RAC后台GTX进程
rac数据日志频繁关闭和启动gtx进程 Auto-tuning: Shutting down background process GTX6 Thu Feb 13 13:43:36 2014 Auto-tuning: Shutting down backg...
1308 0
|
Oracle 关系型数据库 安全
11g RAC不能启动ohasd进程
<div class="title" style="border:0px; margin:0px; padding:0px; outline:0px; vertical-align:baseline; word-break:normal; word-wrap:break-word; color:rgb(94,106,114); font-family:'Lucida Sans Unicod
5335 0
|
Oracle 关系型数据库 网络架构
RAC5——11gR2以后GI进程的变化
参考文档: 11gR2 Clusterware and Grid Home - What You Need to Know (Doc ID 1053147.1)诊断 Grid Infrastructure 启动问题 (Doc ID 1623340.
998 0
【原】11GR2 RAC中关于oc4j和gsd进程启停
作者:david_zhang@sh 【转载时请以超链接形式标明文章】 链接:http://www.cnblogs.com/david-zhang-index/archive/2012/07/13/2589726.html 安装完,默认OC4J应该是启动的,GSD默认是关闭的。
895 0
|
3月前
|
运维 Oracle 前端开发
Oracle 11g RAC集群日常运维命令总结
Oracle 11g RAC集群日常运维命令总结
95 2
|
3月前
|
Oracle 关系型数据库
分布式锁设计问题之Oracle RAC保证多个节点写入内存Page的一致性如何解决
分布式锁设计问题之Oracle RAC保证多个节点写入内存Page的一致性如何解决