关于RAC Interconnect之HAIP

Oracle 从11.2.0.2开始引入了一个新特性叫做Redundant Interconnect,简称HAIP。HAIP的目的用来代替操作系统级别的网卡绑定以实现Active-Active的模式进行数据传输。一来可以实现传统操作系统网卡绑定带来的故障转移的功能,另一方面则可以更加充分利用其负载均衡的特性最大程度的减少因为gc等待带来的性能问题。

HAIP的历史可以追溯到Oracle 10g时代,那个时候CRS中就已经包含了HAIP的雏形. 在安装10g安装CRS的时候,在选择私有网络的时候可以选择多个私有网卡, 虽然官方文档中没有提及,但是很多Oracle的销售甚至工程师都宣称其可以提供高可用性,但实际测试中却往往不尽如人意。

从11.2.0.2这一功能开始得到完善,最终形成了HAIP。 我们可以看到在GI升级到11.2.0.2以后,会自动生成一个叫做ora.cluster_interconnect.haip的资源(这也是haip名字的来历),管理这个资源的是ohasd.bin进程。其对应的log位于$GRID_HOME/log//ohasd/ohasd.log 以及GRID_HOME/log//agent/ohasd/orarootagent_root/orarootagent_root.log这两个位置。在HAIP资源online以后,通过操作系统命令ifconfig -a就能查看到多了类似与eth0:1的虚拟网卡,HAIP地址为169.254.X.X, 当然也可以在数据库级别查看V_$CLUSTER_INTERCONNECTS视图HAIP的地址。HAIP对应的地址由系统自动分配,无法由用户手工进行指定。

由于HAIP使用的是169.254.X.X的地址段,所以在GI准备升级到11.2.0.2+以前都需要检查此地址段是否已经被占用,否则可能会遇到一些意想不到的情况,最终导致GI无法启动而整个升级则不得不失败告终。一个比较典型的情况是在IBM的IMM web interface就是使用这个地址段的。那么Oracle为啥偏偏要选择这个地址段呢?简单的回答就是因为169.254.X.X地址段是预留的ip地址段。 此地址段用于ip地址的autoconfiguration以及link localaddress, 并且早已经被RFC标准化——RFC3927。对这个感兴趣的读者可访问Zero configuration networking, Link local address和RFC3927来获取更多相关信息。

HAIP对于Oracle Clusterware以及RDBMS的要求很严格。这两者的版本都需要在11.2.0.2以上。简单的举个例子,有这么一种组合: GI的版本在11.2.0.3, RDBMS的版本在10.2.0.5。这种模式下虽然心跳网卡上会生成169.254.X.X地址段的虚地址,但实际上低于11.2.0.2的RDBMS是无法感知到这个地址的存在的,所以也无法使用HAIP提供的高可用特性。另外请注意在早期的HAIP的文档中并没有强制要求使用HAIP的私有网卡地址必须在同一个子网,结果导致了很多问题——尤其是在AIX平台,现在新版的文档/MOS已经对此明确要求。

值得一提的是早期的HAIP存在不少bug。在MOS note 11gR2 Grid Infrastructure Redundant Interconnect and ora.cluster_interconnect.haip [ID 1210883.1] 上提供了大多数已知的HAIP,请读者自行阅读,我这里简单的Bug号方便由于某些原因暂时无法登录MOS的读者:(注意其中两个note虽然并非HAIP本身的bug,但是同样与HAIP相关)

bug 12674817
Bug 10332426
Bug 10363902
Bug 10357258
Bug 10397652
Bug 10253028
Bug 9795321
Bug 11077756
Bug 12546712
Note 1366211.1
bug 10114953
Note 1447517.1

HAIP无法被禁用,当然某些不支持HAIP的平台例如Microsoft Windows除外。如果用户使用的是操作系统级别的绑定或者没有使用私网的绑定,则可以通过在rdbms和asm的init.ora/spfile中设置CLUSTER_INTECONNECTS指定私网地址将HAIP覆盖(如果有多个私网地址,请用英文:分隔),虽然说HAIP本身依然存在,但是ASM实例和RDBMS实例以后就不会使用HAIP。

就鄙人看来,HAIP到目前为止还太新,仅仅是一个“看上去很美”的特性,Oracle总是幻想实现一切不依赖于操作系统的内建高可用特性。但是和Oracle大多数看上去很诱人新特性一样,想法很好, 实现很糟糕。当然在11.2.0.4出来以后HAIP Bug基本会修复完,到时候再去使用HAIP也不迟,目前推荐使用操作系统级别的绑定理由只有一个——因为它更稳定可靠。下一篇将主要介绍OS级别的故障转移。

你可能感兴趣的:(Oracle,Rac)