首先先了解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=