首先先了解oracle11g r2集群各个组件:
对于Oracle 集群来说, 集群私网是非常重要的, 无论是集群的网络心跳、节点间通信还是数据库的cache fusion 都需要通过私网来实现。因此, 读者会在很多的文档中看到Oracle 集群的私网要稳定而且高速地运行, 就要使用交换机, 不能使用直连线。
但是, 在10gR2 和11gR1 版本中, 这需要借助第三方软件来实现, 例如: Linux bonding 、AIXEtherChannel 、HP-UXAPA 等。大部分的网卡聚合软件都会将多个网络接口聚合成为一个逻辑接口。
对于10g 和11g r1 版本的集群, 私网信息是通过以下的OCR 键值来定义的。而所有的集群进程都需要从这里获得集群的私网信息, 这也会对集群的灵活性有一定的影响。由于以上问题的存在, 从11.2.0.2 版本开始(虽然11.2.0.1 版本的GI 中已经出现了gipc资源, 但是它不起任何作用), Oracle 决定由集群自己来管理私网网卡, 集群新特性gipc ( grid inter process communication) 被推出, 这个新特性以守护进程gipcd.bin 的形式存在于集群中。
gipcd 守护进程的主要功能是:
1 . 当集群启动时, 发现集群的私网网卡(当然, 集群私网的信息是从gpnp profile 中获得的), 并对发现的私网网卡进行检查。
2 . 通过集群私网发现集群中的其他节点, 并和其他节点的私网建立联系。
3 . 如果集群配置了多块私网网卡, 当某个节点的某一个/几个私网网卡出现问题时, 离线有问题的私网, 并通知其他节点。同时, 继续监控被离线的私网, 以便在其恢复后能够重新上线私网。
另外, 在这里需要对gipc 和HAIP 的概念、功能做一些解释。
集群私网主要负责两类数据的通信:
第一种是集群层面的数据通信, 例如, ocssd.bin网络心跳、crsd.bin 之间的通信等;
第二种是oracle RAC 通信, 例如, ASM 实例间的通信、数据库实例间的通信等。
gipcd 作为管理集群私网的进程, 它需要向集群中的其他组件提供集群的私网信息, 但是并不负责传递具体的信息, 具体的信息仍然由对应的进程自己传输, 当然这主要针对第一种数据通信。正是由于gipcd 的出现, Oracle 集群具有了管理集群私网的能力, 而且第二种信息的工作负载又很大,同时集群管理的主要资源就是数据库, HAIP 应运而生, 作为Oracle RAC 通信的高可用性/负载均衡的实现方法, 来完成集群第二种信息的传递。因此, 在很多时候, 如果发现只是HAIP出现问题, 则受影响的会是数据库实例和ASM 实例, 而集群层面(也就是NM 层面) 的一致性仍然能够保证, 集群的成员也不会发生改变。
more /u01/app/11.2.0/grid/log/node1/gipcd/gipcd.log
Returning NETDATA: 1 interfaces
# 0 Interface 'eth1',ip='192.168.52.170',mac='00-0c-29-be-f6-a5',mask='255.255.255.0',net='192.168.52.0',use='cluster_interconnect'
gipcdMonitorCssCheck: found node node1
gipcdMonitorCssCheck: found node node2
gipcdMonitorCssCheck: updating timeout node node2
gipcdMonitorCssCheck: updating timeout node node2
Returning NETDATA: 1 interfaces
gipcd尝试访问gpnp profile, 但是没有成功。由于在GI启动时会同时启动所有的初始化资源,这部分信息可以忽略, 原因是gpnpd这时还没有启动成功。
2013-07-17 12:28:29.046: [G P N P) [3041003216Jcl s g p n p ge t Cache dProfileEx: [at
clsgpnp.c:613) Result: (26) CLSGPNP_ NO_PROFILE. Can ’t get offline GPnP service
profile: local gpnpd is up and r u nning. Use getProfile instead.
2013-07-17 12:28:29.046: [GP N P] [3041003216Jcls g p n p g e t Cache dProfileEx: [at
clsgpnp.c:623) Result: (26) CLSGPNP_NO_PROFILE. Failed t。get offline GPnP
service profile.
2013-07-17 12: 28 :29. 066: [GPNP} [3041003216}clsgpnpm_newWiredMsg: [at clsgpnpm.
c:741] Msg-reply has soap fault 10 (Operation returned Retry (error CLSGPNP_
CALL_AGAIN)) [uri ” http://www.grid-pnp.org/2005/12/gpnp-errors# ” l
gipcd发现了本地节点用于私网的网卡信息, 在这个集群中有两块网卡作为集群的私网。
2013-07-17 12:28:39.342: [CLSINET] [3023027088] # 0 Interface ’ eth1’ ,ip= ’ 192.168.
**.**’ ,mac=’ 00 Oc 29-a8 14 65 ’ ,mask= ’ * .* .* .*’ ,net= ’ 192.168.***.0 ’ ,use=’cluster interconnec t ’
2013-07-17 12:28:39.342: [CLSINET] [3023027088] # 1 Interface ’ eth2’ ,ip= ’ 192.168.
***.**’ ,mac=’ 00-0c-29-a8-14-6f’ ,mask= ’ *.*.*.* ’ ,net=’192.168.*.0’ ,use=
’cluster interconnect’
gipcd中用于集群数据通信的地址已经产生:
2013-07-17 12:28:56.767: [GIPCHGEN}[3023027088} gipchaNodeCreate: adding new node
Ox9cl07d8 { host ’test2 ’ , haName ’ gipcd ha name ’ , srcLuid 465fb26d-8b46eb95,
dstLuid 00000000-00000000 numinf 0,contigSeq 0,lastAck 0,lastValidAck 0,
sendSeq [0 : OJ,createTime 797327224,flags OxO }
远程节点被发现:
2013-07-17 12 :28: 58. 415: [GIPCHTHR] [3025128336] gipchaWorkerUpdateinterface:
created remote interface for node ’ test2’ , ha Name ’ gipcd ha name ’ , inf
’udp://192.168.***.**:16663 ’
2013-07-17 12 :28: 58 .415: [GIPCHGEN] [3025128336] gipchaWorkerA ttachinterface:
Interface attached inf Ox9c0bb60 { host ’ test2’ , haName ’ gipcd_ha_name ’ ,
local Oxb4c4e590,ip ’ 192.168.***.**:16663’ , subnet ’ 192.168.254.0 ’ , mask
'*.*.*.*’ , numRef 0,numFail 0,flags Ox6 )
2013-07-17 12: 28: 58. 415: [GI PCHTHR] [ 3025128336 J g ipchaWor ke rUpda te I nterface:
created remote interface for node ’ test2 ’ , ha Name ’ gipcd_ha_name ’ , inf
’ udp://192.168.***.**:17578 ’
gipcd 发现了远程节点私网的网卡信息, 连接被建立:
2013-07-17 12:29:36.120: [GIPCDMON] [3027229584] gipcdMonitorSaveinfMetrics: inf[
。] ethl - rank 99,avgrns 6. 326531 [ 257 I 250 I 245 ]
2013-07-17 12:29:36.120: [GIPCDMON] [3027229584] gipcdMonitorSaveinfMetrics: inf[
l] eth2 - rank 99,avgrns 5.182186 [ 259 I 250 I 247 ]
注意:
gipc 在检查过网卡信息之后会产生一个rank 值(或者叫分数), 通过这个位来反映网卡的健康性。如果这个值为99, 代表gipc 认为网卡健康;如果这个值为0 或- 1, 代表gipc 认为网卡出现了问题。