本文共 2365 字,大约阅读时间需要 7 分钟。
RAC上的DDL
多节点的RAC,每个节点上都可能有引用表a的游标,无论在任意节点对表a做DDL,都需要把所有节点上的引用对象置为invalid;
此时每个节点上的LCK0进程,会对本实例library cache的对象加shared-mode的IV(invalidation) instance lock,用户修改是需要获取相应的exclusive的IV锁,
此时会通知本地的LCK0释放shared-mode锁,本地LCK0释放锁之前,会通知其他节点上的LCK0,其他节点的LCK0收到通知后会把本地library cache中的相关对象置为无效。
Oracle实例新增进程
LMS—负责数据块在实例间的传递,对应的服务为GCS(global cache service),通过参数GCS_SERVER_PROCESSES控制
LMD—提供GES(global enqueue services),负责多个实例间协调对数据块的访问顺序
LCK—负责non-cache fusion资源的同步访问
LMON—各实例之间的LMON会定期通信,检查集群中各节点的健康状态,负责集群重构、GRD恢复等操作
集群软件的健康检测必须还要从数据库层面进行,如某个instance挂掉,但从network、OS、clusterware层面是检查不到的
1、 提供节点监控,节点的健康状态通过保存在GRD中的位图记录的,1代表正常;各节点间的LMON相互通信,确保位图的一致性
2、 LMON检测到实例级别的脑裂时,先通知下层的clusterware,期待集群解决;一旦超时,自动触发instance membership recovery
3、 LMON借助两种心跳机制:节点间的网络心跳;控制文件的磁盘心跳(每3秒更新一次)
GCS负责维护全局SCN的产生,采用broadcast算法:每个commit后,节点向其他节点广播,确保每个节点commit后,都能立刻看到SCN。
RAC和Clusterware的交互
Clusterware层:所有节点的clusterware组成一个集群,并选出一个master node;每个稳定的集群状态称为cluster incarnation number;RAC instane启动时会把LMON、DBWR等需要操作共享存储的进程作为一个组注册的clusterware层,并获取一个node id;
RAC集群和节点集群是两个层次的集群,各有脑裂、I/O隔离等问题;
若RAC检测到节点故障,则暂停对外服务;通知clusterware异常,并等待其完成集群重构;clusterware完成重构后,会通知上层RAC集群,RAC集群收到消息开始重构;
RAC层:由LMON进程负责维护,提供CGS和NM;RAC实例的所有进程被当成一个组NM注册到clusterware中;
重构触发类型:
1、 有节点加入或离开集群,由NM触发
2、 Network heartbeat异常,LMON/GCS/GES通信超时;由_cgs_send_timeout控制,缺省值为300秒
3、 Controlfile heartbeat异常,每个实例的CKPT每隔3秒更新控制文件的checkpoint progress record,每个实例对应一个;create database …max instance决定了会创建多少个这种记录;由_controlfile_enqueue_timeout控制,默认900秒
Hangcheck-timer
--linux内核级的IO-Fencing模块,监控Linux的运行状态,若长时间挂起,则会自动重启系统;需要参数hangcheck_tick和hangcheck_margin,此外CRS本身还有一个MissCount参数;
Clusterware在重构时,必须确保故障节点是dead状态,因此misscount > hangcheck_tick + hangcheck_margin,确保节点重构时,节点已经被hangcheck-timer重启
CSS有两种心跳机制:
1、 通过私有网络的network heartbeat,叫做misscount
2、 通过voting disk的disk heartbeat,叫做I/O timeout
Failover
1、 client-side connect time
tnsname中配置多个地址,用户发起请求时,会遍历地址列表直至成功
2、 TAF(transparent application failover)
在tnsname中添加failover_mode配置
A、method 分为basic/preconnect B、type分为session/select
3、 Service-side TAF
在数据库服务器端配置fail_mode,
Loadbalance
1、 connection balancing
客户端均衡:tnsnames配置中添加load_balance=yes
服务器均衡:PMON收集系统的负载信息,并登记到listener中,由local_listener/remote_listener决定,其中remote_listener需要tnsname设置
2、通过service,在应用层面上分散
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15480802/viewspace-703715/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/15480802/viewspace-703715/