clusterware启动顺序——CSS
CSS层面
1.ocssd.bin守护进程
该层面最主要的工作就是启动ocssd.bin守护进程。使本地节点能够成功地加入集群。ocssd.bin守护进程的启动过程可以通过以下的图形进行描述。
1) ocssd.bin被cssdagent代理进程启动
2) ocssd.bin访问gpnp profile,以便能获得集群的名称、私网信息、VF搜索路径(Discovery String)等基本信息。
3) ocssd.bin在VF搜索路径中找到足够多的VF,并在VF的租借块中续租本地节点的编号,同时将本地节点的信息添加到VF,并开始和VF进行磁盘心跳。
4) 根据gpnp profile中的信息,和gipcd进程通信,获取集群间通信所需的信息(endpoint)。
5) 向集群的其他节点发送消息,建立连接。
6) 集群重新配置开始。重新配置主节点向集群的其他节点发送消息,通知其他节点有新的节点加入,其他节点接收消息。
7) 重新配置结束,本地节点加入集群。
注意:如果本地节点是第一个被启动的节点,那么重新配置是不会发生的。
在整个过程中,可能导致ocssd.bin启动失败的原因如下。
原因1:cssdagent代理进程没有被启动,这导致了ocssd.bin守护进程没有被启动。
原因2:gpnpd.bin守护进程没有启动成功或者gpnp profile中相关的信息有问题,这导致了ocssd.bin无法读取集群相关的信息,或者读取了错误的信息。
注意:由于ohasd是同时启动集群的所有初始化资源的,所以在gpnpd.bin还没有完全启动成功时,ocssd.log中有无法读取gpnp profile的错误是可以忽略的。只有在gpnpd.bin已经成功启动之后且一直出现上面的错误,才说明ocssd.bin无法访问gpnp profile。
原因3:VF所在的路径无法被访问或者VF无法被正常访问,这导致了ocssd.bin守护进程无法访问VF中的信息。
原因4:gipcd.bin守护进程没有被正常启动,这导致ocssd.bin无法获得和远程节点通信所需的信息。
原因5:集群私网通信出现了问题,这导致ocssd.bin无法和远程节点通信。
对应的解决办法如下:
方法1:确保cssdagent能够正常启动ocssd.bin。
方法2:确保gpnp能够正常工作。
方法3:确保grid用户对VF所在的路径和VF对应的设备有读写权限。
方法4:在操作系统基本重新启动gpicd.bin守护进程(例如:kill -9 <ospid>)
方法5:确保集群私网能够正常工作。
2.启动其他依赖于ocssd的集群初始化资源
(1)ASM实例
ASM实例的启动过程大概有如下几个步骤:
1)$GRID_HOME/bin/oracle文件被调用,并读取ASM初始化参数文件。
2)根据ASM的初始化参数文件启动ASM实例。
3)本地ASM实例和远程实例进行通信,完成实力层面的重新配置。
4)挂载ASM磁盘组。
因此,导致ASM实例无法启动的原因如下。
原因1:$GRID_HOME/bin/oracle文件的权限设置有问题。
原因2:ASM实例的spfile(gpnp profile)/pfile($GRID_HOME/dbs/init<asm实例名>.ora)丢失,或者其中设置了错误的参数。
原因3:由于某些操作系统的参数配置错误,导致ASM实例无法获得足够的资源。
原因4:HAIP没有被正常启动,这导致ASM实例之间无法通过HAIP进行通信。
可以通过ifconfig -a查看,私网网卡是否绑定了HAIP。
原因5:由于节点间的私网配置问题,导致ASM实例之间无法通信,例如私网网卡的MTU配置不一致。
原因6:由于cssd出现问题,导致了ASM实例的LMON的进程无法将自己注册到CSS对应的组当中。对于这种情况,ora-29701或ora-29702错误会出现在ASM的alert.log中。
对于的解决方法如下:
方法1:确保$GRID_HOME/bin/oracle文件的设置正确
[grid@ebsdb1 ~]$ ll $GRID_HOME/bin/oracle
-rwsr-s--x 1 grid oinstall 210020239 Oct 27
09:15 /ebsdb/grid/11.2.0/bin/oracle
方法2:确认ASM实例的spfile(gpnp profile)/pfile($GRID_HOME/dbs/init<asm实例名>.ora)存在而且能够被grid用户访问
[grid@ebsdb1 ~]$ gpnptool get
Warning: some command line parameters were
defaulted. Resulting command line:
/ebsdb/grid/11.2.0/bin/gpnptool.bin get -o-
…..
ProfileSequence="6"
ClusterUId="15bc3d3aaf6e4fdbff170ea43ef3cbf6"
ClusterName="ebsdb-cluster"
PALocation=""><gpnp:Network-Profile><gpnp:HostNetwork
id="gen" HostName="*"><gpnp:Network
id="net1" IP="172.28.1.0" Adapter="eth0"
Use="public"/><gpnp:Network id="net2"
IP="192.168.10.0" Adapter="eth1"
Use="cluster_interconnect"/></gpnp:HostNetwork></gpnp:Network-Profile><orcl:CSS-Profile
id="css" DiscoveryString="+asm" LeaseDuration="400"/><orcl:ASM-Profile
id="asm" DiscoveryString="/dev/mapper/asm*" SPFile=""/>
…..
Success.
ASMCMD> ls -l
+VOTE_DG/ebsdb-cluster/ASMPARAMETERFILE/
Type Redund StripedTime Sys Name
ASMPARAMETERFILE MIRRORCOARSE OCT 26 15:00:00 YREGISTRY.253.926264779
gpnp profile中的中的ASM spfile信息和ASM磁盘组中的信息是一致的
[grid@ebsdb2 ~]$ ls -l $ORACLE_HOME/dbs
total 20
-rw-rw---- 1 grid oinstall 1052 Feb 3 08:15 ab_+ASM2.dat
drwxr-xr-x 2 grid oinstall 4096 Dec 27
15:00 arch
-rw-rw---- 1 grid oinstall 1544 Feb 3 10:42 hc_+ASM2.dat
-rw-r--r-- 1 grid oinstall 2851 Oct 26
15:40 init.ora
-rw-r----- 1 grid oinstall 1536 Oct 26
15:59 orapw+ASM
ASM实例的pfile是存在的,而且grid用户能够访问。
方法3:参考对于平台的Oracle安装指南,确认操作系统的参数和资源限制满足Oracle要求。
方法4:确保集群所有节点的HAIP能够正常启动,而且通信没有问题。如果HAIP问题不能解决,可以设置初始化参数cluster_interconnects,以使ASM实例使用集群私网IP地址进行通信。请确认所有节点的ASM实例都设置了cluster_interconnects参数,以便保证配置的一致性。
方法5:确保所有节点的私网配置一致并且畅通,例如:所有节点的私网都具有相同的MTU值。
方法6:ora-29701错误很多时候都是由Oracle的bug导致的,所以根本的解决办法是应用补丁。如果无法马上应用补丁,重新启动所有的集群节点也可以暂时绕过这个问题。
(2)CTSS
CTSS的启动过程很简单:首先启动ctssd.bin守护进程并和其他节点进行通信,从而找到参考节点(Reference Node),之后决定CTSS运行的模式(active或observer)。最后,定期和参考节点验证(并同步)时间。由于CTSS的工作相对来说比较简单,所以出问题的概率也比较小,比较常见的导致CTSS无法启动的原因是OLR中的信息出现了问题,即OLR corruption。
对应的解决办法就是从正常的备份中恢复OLR。
(3)HAIP
HAIP并不是一个后台守护进程,而是为数据库与ASM实例间通信提供高可用性和负载均衡的一种机制,具体体现为一些IP地址。而HAIP的启动就是由orarootagent代理进程在集群的私网上绑定对应的IP地址。比较常见的导致HAIP无法启动的原因如下:
原因1:OCR中记录的私网信息和操作系统的私网信息不一致。
[grid@ebsdb1 11.2.0]$ oifcfg getif
eth0172.28.1.0 global public
eth1192.168.10.0 global cluster_interconnect
[grid@ebsdb1 11.2.0]$ oifcfg iflist -p -n
eth0172.28.1.0 PRIVATE 255.255.255.0
eth1192.168.10.0 PRIVATE 255.255.255.0
eth1169.254.0.0 UNKNOWN 255.255.0.0
[grid@ebsdb1 11.2.0]$ ifconfig -a
原因2:集群私网存在问题,从而导致HAIP地址无法被绑定。
原因3:Oracle的已知问题。
对应的解决办法如下:
方法1:修改OCR中的信息,确保其和操作系统一致,在大部分的情况下使用命令oifcfg setif即可。例如
oifcfg -setif -global
eth1/10.1.0.0:cluster_interconnect
oifcfg -delif -global eth1/10.1.1.0
方法2:确认私网网卡能正常运行。
方法3:对于Oracle的已知问题。由于11gR2版本中关于HAIP的问题比较多,要具体情况具体分析,不过比较通用的建议是,使用最近的版本(11.2.0.4)并应用最新的PSU补丁包。