题目部分
在Oracle中,RAC的脑裂和健忘分别指的是什么?
♣
答案部分
(一)脑裂(SplitBrain)
在集群中,节点间通过心跳来了解彼此的健康状态,以确保各节点协调工作。假设只有“心跳”出现问题,但各个节点还在正常运行,这时,每个节点都认为其它的节点宕机了,自己才是整个集群环境中的“唯一健在者”,自己应该获得整个集群的“控制权”。在集群环境中,存储设备都是共享的,这就意味着数据灾难。简单点说,就是如果由于私有网络硬件或软件的故障,导致集群节点间的私有网络在一定时间内无法进行正常的通信,这种现像称为脑裂。在发生脑裂情况后,集群的某些节点间的网络心跳丢失,但磁盘心跳依然正常,集群根据投票算法(Quorum Algorithm)将不正确的节点踢出集群。磁盘心跳的主要目的是当集群发生脑裂时可以帮助指定脑裂的解决方案。
私网网络不能正常通信有一个超时时间,称为MC(Misscount),默认为30s(通过命令“crsctl get css misscount”查询)。该时间允计集群节点间不能正常通信的最大时间为30s,如果超过30s,那么Oracle认为节点间发生了脑裂。在出现脑裂后,集群的重要任务就是保证错误节点与正确节点间的I/O是隔离的,这样才能避免对数据造成不一致的损坏。处理这个问题的方法就是:踢出错误节点执行修复过程。
(二)健忘(Amnesia)
集群环境的配置文件不是集中存放的,而是每个节点都有一个本地副本,在集群正常运行时,用户可以在任何节点更改集群的配置,并且这种更改会自动同步到其它节点。健忘是由于某个节点更新了OCR(Oracle Cluster Registry,Oracle集群注册)中的内容,而集群中的另外一些节点此时处于关闭、维护或重启阶段,OCR Master进程来不及将其信息更新到这些异常节点缓存而导致的不一致。譬如,A节点发出了添加OCR镜像的命令,在这个时候B节点处于重启阶段。重启后A已经更新完毕,而此时B并不知道已经为OCR增加了一个新的镜像磁盘,健忘由此而生。OCR用于解决健忘问题。
& 说明:
Oracle Clusterware把整个集群的配置信息放在共享存储上,这个存储就是OCR Disk。在整个集群中,只有一个节点能对OCR Disk进行读写操作,这个节点叫作Master Node。所有节点都会在内存中保留一份OCR的拷贝,同时有一个OCR Process从这个内存中读取内容。当OCR内容发生改变时,由Master Node的OCR Process负责同步到其它节点的OCR Process。
有关OCR的备份和恢复可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-2121470
本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗