大话ORACLE RAC 笔记之RAC与Clusterware

    RAC与Clusterware的交互
    Clusterware要决定集群组成 、成员身份、成员状态,Clusterware并不关心上一层应用到底是数据库或是WEB应用。它 只负责收集集群节点状态 完整视图,并向上层提供这个视图。而RAC要依赖于Clusterware,它需要 从Clusterware获得这个视图,根据这个视图调整自己。但是RAC也不完成 依赖于Clusterware,很多时候RAC是两腿走路:先看Clusterware能不能解决问题, 如果不能,RAC自己 进行IMR (instance membership recover)
   Clusterware层
    所有节点的Clusterware组成一个集群,并构成一 个集群成员列表(Cluster membership list)第个节点会分配一个成员ID(Node Id)这些Clusterware 之间互相通信 以了解彼此的状态, 并从中选出一个节点作为Master Node,Master Node负责管理集群状态的 变迁。当有节点加入或离开集群时,集群的状态会发生变迁 ,最终达到一个新的稳定状态。每个集群的稳定状态用一个数值表示,这个数值叫做Cluster Incarnation Number。达到新稳定状态时,这个数值会改变。
    RAC 中的各个实例也构成了 一个实例成员列表 (Instance membership list) , 每个实例也使用Clusterware 层的node id作为身份标 识,这个ID在集群生命周期内是不会变的。RAC Instance在启动时会把LMON、DBWR等需要操作共享存储的进程 作为一个组注册 到Clusterware中,并从Clusterware获得node id作为组ID。
    RAC集 群与节点集群是两个层次的集群,两个集群都 有脑裂、IO隔离等问题。这两个集群都有各自的故障检测机制。如果在RAC这一层检测到节点故障,RAC集群会做如下工作
    (1)暂停对外服务
    (2)RAC通知Clusterware, 并等待Clusterware完成集群重构 ,达到新的稳态。
    (3)Clusterware完成重构后,会通知上层的RAC集群,RAC集群收到这个信息后开始自己的重构。
    RAC层
    RAC的集群状态是通过LMON进程提供的,这个进程提供了CGS(Cluster Group Service)和NM(Node Management)两个服务。最 底层的是NM服务,它是RAC集群和Clusterware集群的通信通道,通过它把本节点的资源(Cluster Resource)状态登记到本地的Clusterware,然后由后者提供给其它节点的Clusterware,NM还要从Clusterware获得其它节点的资源状态。
    1、NM组
    第个RAC 实例都有许多进程在工作,比如DBWR,LGWR,LMON等 ,其中任何一个进程出现故障,这个节点的其它活动进程都应受到限制, 否则有可能破坏共享磁盘上的数据。因此,RAC实例的所有进程都是作为一个组(NM GROUP)注册到Clusterware中的,其中的LMON作为组里的Primary Member注册并获得Member ID,而其它进程作为这个组的Slave Member并以相同的Member ID注册到Clusterware。
    整个集群的节点成员信息是通过一个位图Bitmap来维护的。每个节点对应一个位bit,0代表节点DOWN,1代表UP,整个有一个有效/无效标志位。这个位图在整个集群作为一个全局资源被永久记录 ,当有新的节点加入集群时,该节点需要读入这个位图,找到自己对应的位bit,把值从0设为1,并且把位图的无效标识设为1 ,这时虽然位图的内容是正确的 ,但状态是无效的 ,其它 节点会定时读入这个位图,一 旦发现这个位图的状态是无效 ,就会触发集群的重构。达到新的稳定状态后,再把位图状态 置为有效。当集群重构完成后,NM会把这个事件传递给CGS层,CGS负责同步所有节点间的重构。正常实例的启动、关闭过程中,Clusterware、NM都 会获得通知。但如果是 实例异常关闭,Clusterware,NM就会不知道,这时就需 要CGS提供的IMR功能进行感知。然后进行重构。
    IMR是由CGS提供的重构机制,用于确认实例之间的 连通性、快速地排除故障节点以减少到数据的损害。这个过程中,每个实例都要作出投票 ,投票的内容就是它所认为的整个集群现在状态,然后由一个实例根据这些投票,重新规划出一个新的集群(最大的sub group) 并把这个投票结果(voting result)记录到控制文件,其它节点读取这个结果,确认自己是否属于集群,如果不属于,就要自动退出。如果属于,则参与执行重构过程。投票过程中,所有的成员节点都尝试获得控制文件中的一个字段(CFVRR,Control File Vote Result Record)进行更新,但只会有一个成员获得,这个成员会记录其它成员的投票内容。
  比如 一个3节点的RAC,如果实例3的LMON异常,这时CFVRR记录如下:
  seq#     inst#    bitmap
    2           0           110
    2           1           110
    2           2           001
这时 实例3无法获得其它两个节点的状态,最终重构的结果就是实例1、2组成新的集群,节点3被赶出集群。
    如果IMR发现出现split-brain,即集群中出现两个group,这时IMR先会通知CM,然后等待CM解决这个脑裂 ,等待时间是_IMR_SPLITBRAIN_RES_WAIT, 缺省600 毫秒 。超时后IMR自己执行节点排除 。 在CGS完成节点的重构之后,GCS、GES才进行数据层面的重构,也就是Crash Recover。
    2、重构触发类型
    (1)有节点加入或离开集群而触发重构 ,由NM触发。
    (2)Network Heartbeat异常:因为LMON或者GCS、GES通信异常 ,由IMR触发。
    (3)Controlfile Heartbeat异常:第个实例的CKPT进程 每3 分钟都会更新控件文件的一个数据块 ,叫做Checkpoint Progress Record ,并且是每个实例对应一个 ,因此不会出现 争夺现象。由IMR 触发。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9683969/viewspace-676453/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9683969/viewspace-676453/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值