Oracle rac集群环境中的特殊问题

发布于:2021-09-23 04:03:30

??? 备注:本文摘抄于张晓明《大话Oracle RAC:集群 高可用性 备份与恢复》


?


因为集群环境需要多个计算机协同工作,要达到理想状态,必须要考虑在集群环境下面临的新挑战。


1.并发控制


??? 在集群环境中,关键数据通常是并发存放的,比如放在共享磁盘上。而集群内各个成员的生身份是对等的,所有节点对数据有相同的访问权利。这时就必须有某种机制能够控*诘愣允莸姆梦


?? 在Oracle rac中,是利用DLM (Distribute Look Management)机制来进行多个实例间的并发控制。


?


2.健忘症 (Amnesia)


????这个问题发生在集群配置文件不是集中存放,而是每个节点都有一个本地副本。在集群正常运行时,用户可以在任何节点更改集群的配置,并且这种更改会自动同步到其他节点。


??? 但考虑这样一种场景:两个节点的集群,节点1因为正常的维护需要被关闭,然后在节点2修改了某些配置,然后关闭节点2,启动节点1。因为之前在节点2做的配置修改没有同步到节点1,所以节点1启动后,它仍然是用旧的配置文件工作,这时就会造成配置丢失,也基于是所谓的"健忘症"。


?? 解决"健忘症"最简单的办法是,整个集群使用一个集群配置文件,无论哪个节点修改了配置信息都是同一分,配置信息对每个节点都是一样的。


?? Oracle RAC使用OCR DISK 文件来解决这个问题。


?


3.脑裂 (Split Brain)


???? 在集群里,节点间需要通过某种机制(心跳)了解彼此的健康状况,以确保各节点协调工作。假设只是"心跳"出现故障,但各个节点还在正常运行。这时,每个节点都认为其他节点宕机,自己是整个集群环境中的"唯一健在者",自己应该获得集群的"控制权"。在集群环境中,存储设备都是共享的,(都来控制独享,势必会破坏数据的完整性和一致性)这就意味着数据灾难,这样一种状况就是"脑裂"。


??? 解决这个问题的通常办法是使用投票算法(Quorum Algorithm),这个算法的原理如下:


??? 集群中各个节点需要心跳机制来通报彼此的"健康状况",假设每收到一个节点的"通报"代表一票。对于三个节点的集群,正常运行时,每个节点都会有3票(自己和另外两个节点的通报)。假设节点1的心跳出现故障,但是节点1还在运行:这时整个集群就会分裂为两个小的Partition。节点1自己是一个Partition,节点2和节点3是一个Partition。这时就必须剔出一个Partition,应该剔出哪个Partition呢?


???这时节点2和节点3组成的Partition,每个节点有两票;节点1自己是一个partition,节点1只有一票。安装投票算法节点2和节点3组成的小集群获得了控制权,而节点1被踢出,由节点2和节点3组成的新的集群继续对外提供服务。


?? 如果集群只有两个节点,则上面的算法就没有用了,因为每个节点只有一票,没有办法比较。这必须要引入第3个设备Quorum Device。


??? Quorum Device通常采用的是共享磁盘,这个磁盘也叫Quorum Disk,这个Quorum Disk也代表一票。当新跳出现故障时,两个节点同时去争取Quorum Disk这一票,最早到达的请求被最先满足,后到达的这个节点就无法获得这一票。这时,最先获得Quorum Disk的节点就获得两票,而另一个节点只有一票,就会被踢出集群。


?? 在ORACLE RAC中Voting Disk用来记录节点间成员的状态,当出现脑裂时,仲裁哪个partition获得控制权,其他的partition被踢出。


?


4.IO隔离 (IO Fencing)


????? 这个问题是脑裂问题的延伸,当集群出现"脑裂"时,必须要能够判断出哪个节点应该获得集群的控制权,哪些节点要被赶出集群,这就是"投票算法"要解决的问题,前一部分已经做了解释。


???? 但仅仅这样做是不够的,还必须保证被赶出来的节点不能操作共享数据。因为这时该节点可能还在运行中,如果不加限制很有可能会修改共享数据。这是IO隔离(IO Fencing)要解决的问题。


??? IO Fencing实现有硬件和软件两种方式。对于支持SCSI Reserve/Release命令的存储设备,可以使用SG命令实现。正常节点使用SCSI Reserve命令"锁住"存储设备,故障节点发现存储设备被锁后,就知道自己被赶出集群了,也就是说知道自己出现了异常状况,就要自行*簦曰指吹秸9ぷ髯刺飧龌埔步凶鰏uicide (自杀),Sun和Veritas使用的是这种机制。


??? STONITH (Shoot The Other Node In The Head)是另一种实现方式,这种方式直接操作电源开关。当一个节点发生故障时,另一个节点如果能够侦测到,就会通过串行口发出命令,控制故障节点的电源开关,通过暂时断电,而后又上当的方式使得故障节点被*舳U庵址绞叫枰布С帧


??? Oracle Rac采用的是软件方式,直接*艄收辖诘恪N蘼鄄捎媚闹址绞剑IO Fencing目的都是相同的,为了保障故障节点不能再继续访问共享数据。


?


??????????????????????????????? ------摘抄于张晓明《大话Oracle RAC:集群 高可用性 备份与恢复》


?


5.安装RAC对网络和时间的要求


RAC安装的时候对网络和时间同步的要求非常高。


在rac环境中,会要求各个节点之间的时间差不能超时。一般如果超过30秒,节点很可能会*簟 所以要同步各节点的时间。例如,我们需要配置一个ntp时钟服务器,来给rac的各个节点进行时 间同步。或者让节点之间进行时间同步,保证各节点的时间同步,但无法保证rac数据库的时间的准确性。


节点间的时间同步方法: ?????? ?


方法一:建立ntp时钟服务器,各节点与ntp server同步时间 ???????


方法二:利用定时任务,让节点间时间同步(用rdate或ntpdate)


在RAC环境中需要两种网络,一种是公共网络,另一种是私有网络。其中,公共网络用于提供客户端的访问,而私有网络用于节点间的通信,比如每个节点通过私有网络探测其他节点的状态,两个数据库实例通过私有网络对事务进行协调等。


?


对于公共网络的要求是:必须支持TCP 协议,而且必须使用每个节点上名称相同的网卡,比如在所有节点上都使用en0 ,而不能在一个节点上使用en0 ,在另外一个节点上使用en1 。这些网卡的IP 地址必须属于同一个子网。


对于私有网络的要求是:必须支持UDP协议,尽量使用每个节点上名称相同的网卡,节点之间需要通过网络交换机相连,不能使用TOKEN-RING网络,也不能使用直线连接两个节点,这些网卡的IP 地址应该属于同一个子网。RAC中的所有节点都需要通过私有网络连接在一起。私有网络应该只用于节点间的通信,而不应该有其他的用途。私有网络在物理上也应该与其他 网络分开。


?


?


6.10G RAC网段的配置注意(10.2.0.1.0)


在Oracle10G(10.2.0.1.0) RAC的安装中,Oracle默认认为10网段开头和192网段开头的都是私有网络,有时安装的时候我们的*惯会把192网段的配置成公共网络,这样有可能会报错。


在安装的时候要注意给网卡配置网关,不配置网关有可能vip启不来。


?


7.RAC的命令及启动关闭顺序


crsctl (使用root)主要是管理操作系统的一写进程


crs_*(root/oracle都可以)主要是管理在集群上的资源的


srvctl(oracle)主要是针对RAC上的DB,主要管理RAC上的DB


?


遵循以下步骤启动和停止单独的应用程序资源。


srvctl start nodeapps -n


srvctl start nodeapps -n


srvctl start asm -n


srvctl start asm -n


srvctl start database -d


srvctl start service -d -s


crs_stat -t


?


srvctl stop service -d -s


srvctl stop database -d


srvctl stop asm -n


srvctl stop asm -n


srvctl stop nodeapps -n


srvctl stop nodeapps -n


crs_stat -t


?


?


8.Votedisk的"多数可用算法"


在RAC中需要注意的是,Votedisk使用的是一中"多数可用算法"。如果有多个Votedisk,则必须一半以上 votedisk同时可用,Clusterware才能正常工作。比如配置了4个votedisk,如果有一个votedisk被破坏, 集群不受影响正常工作。如果有两个votedisk被破坏,剩下的两个votedisk在数量上不满足一半以上,集群 会立即宕掉,所有节点立即*簟K匀绻砑觱otedisk,尽量不要只添加一个,而应该添加两个以上,这一点和ocr 不一样。 ??


添加和删除votedisk的操作比较危险,必须在停止数据库、停止ASM、停止CRS Stack后操作,并且操作时必须使用-force参数。


?注意:即使在CRS关闭后,也必须通过-force参数来添加删除votedisk。并且-force参数只有在crs关闭的场合下使用才安全。

?


9.OCR磁盘

?? 可以使用 ocrconfig -showbackup命令查看ocr自动的备份信息


?


?


10.RAC中当遇到一个节点*簦颐歉萌绾稳胧址治鲈


尽管可能会有各种原因造成节点*簦还颐钦饫镏还刈⒂蠴racle Clusterware所造成的节点*簟 对于Oracle Clusterware来说,可能导致节点*舻慕逃腥簅cssd进程、oprocd进程、oclsomon进程。


<1>oprocd:如果在UNIX*台上,并且没有使用厂商的clusterware,就会有这个进程出现。在LINUX*台上, 从10.2.0.4开始也是用这个daemon(守护进程、后台进程),这个daemon进行一个无穷的循环,如果超过1.5秒没有激活,就会*艚诘恪


<2>cssd:这个daemon通过私有网络以及表决磁盘(Voting Disk)去ping集群中的其他节点。如果在规定时间内(Misscount和Disktimeout) 没有收到响应,就会*艚诘恪


<3>oclsmon:这个进程内是监控CSSD的进程,保证CSSD的健康,如果发现任何问题,这个进程都会*艚诘恪


不论是哪种原因造成的系统*簦淠康闹挥幸桓,就是提供IO Fencing的功能。因此,要想分析系统*舻脑颍涫稻褪且页龅降 是哪个进程造成的系统*簦缓笤俜治鼍咛逶颍庵址治鲋荒芡ü痰娜罩纠唇小


--参考P184



转载于:https://www.cnblogs.com/myrunning/p/4012978.html






相关资源:基于VHDL的正弦波发生器

相关推荐

最新更新

猜你喜欢