关于RAC interconnect之bond

原文链接:http://www.dbaleet.org/about-rac-interconnect-os-bonding/

 

对于维护mission critical的高可用系统的DBA而言,SPOF(单点故障)永远是无法回避的话题,因为它会影响到SLA (服务等级协议), 对于任何一个设计良好的系统都应该尽量避免出现单点故障。

RAC的私网,我们有时称其为心跳线,可见其迁一发而动全身的作用。上一篇我们讲述了Oracle自带的一种防止私网单点故障的方式HAIP。 限于其局限性,本篇主要讲用途更为广泛的操作系统级别的网卡绑定。

绑定,简单的说就是使用多块物理网卡捆绑成逻辑上的一块网卡,它对于操作系统之上的应用程序是完全透明的,以提供故障转移或者负载均衡,消除单点故 障的隐患。 这看上去是一件非常简单的工作。但实际上远远不是像它看上去的,其中涉及到很多有关的网络方面的概念和细节,当然这些细节超出了本文的范畴,在此不做详细 的论述。

绑定(bond)是Linux平台的叫法,它还有其它的各种名字例如port trunking(端口汇聚,常见于交换机领域),Link aggregation(链路聚合, 事实上,这个才是业界的标准IEEE 802.3称谓, LACP——link aggregation control protocol),  NIC teaming (网卡组合, 常见于HP和Microsoft的称法),Ethernet Channel(以太网通道, Cisco/IBM的叫法)。当然这里面会存在一些细微的差异,例如绑定本身与交换机的概念无关,整个过程不需要交换机主 动参与,而链路聚合则需要交换机厂商本身的聚合协议支持。例如并不是所有交换机都支持IEEE 802.3ad(现在主流厂商基本都支持)。至于支持PAGP,则是Cisco的私有协议,国内厂商huawe和ZTE都有其对应的协议,这里就不一一赘 述了。

各主流的操作系统平台都提供各自的绑定方法。IBM AIX为Ethernet Channel, HP-UX上为APA(顺便提一下,这个功能是收费的。), Linux为bond, Solaris平台IPMP 。 这些绑定技术通常都可以配置为Active-Active, 或者是Active-Standby的方式。 需要注意的是Active-Active并不意味着能提供双向负载均衡的能力。以IBM AIX上的Ethernet Channel(此Ethernet Channel并不依赖于Cisco的交换机的Ethernet Channel协议)为例, 对于负载均衡只是针对操作系统所管辖的网卡outgoing(发送)的流量而言,而对于网卡Incoming(接收)的流量则是取决于交换机端配置使用的 算法。在绝大多数情况下,outgoing可以负载均衡,但incoming使用的总是同一个设备,也就是说是单向负载均衡。(HAIP可以提供双向负载 均衡)

对于interconnect,除Linux以外,其它Unix厂商绑定的配置和选项相对比较简单,私网配置错误的可能性较小。Linux平台由于 其复杂性和模式过于复杂需要在这里单独罗列出来。Linux的绑定模式一共分为7种:Mode 0: Round Robin,Mode 1: Active-Standby, Mode 2: XOR,Mode 3: Broadcast, Mode 4: LACP,Mode 5: Transmit Load Balancing, Mode 6: Adaptive Load Balancing。(在Linuxfoundation上提供了一篇关于这些模式的详细说明)其中私网心跳是不支持使用mode 0——round robin算法的。在MOS文档中提到应该尽量避免使用Mode 3和Mode 6.具体的文档如下:

Potential Disadvantages Using Broadcast Mode 3 For Bonded Devices (Doc ID: 730796.1)

Linux: ARP cache issues with Red Hat “balance-alb (mode 6)” bonding driver (Doc ID: 756259.1)

事实上,真正可供选择是只有mode 1和mode 4, 也就是Active-Standby和LACP。Active-Standby为Oracle推荐采用的方式。因为它稳定,可靠并且与交换机厂商无关,唯 一的“不足”是只能提供failover却无法提供load balance。mode 4也是可以采用的,但是前提是你的交换机需要支持802.3ad。在我的印象中,Oracle ACE director, Dell TechCenter的Kai Yu曾经在一个best practice的文档中推荐使用mode 4, 当然目前我无法找到此链接,如果找到我会尽快提供链接。(更新: 请点击这里,不过需要帆墙)

就我个人而言,建议不要使用mode 4, 理由如下:

1) 私网的load balance实际上意义不大。 假定一种前提就是私网的global cache的流量过大,需要使用负载均衡,试想这个时候其中一个网络回路出现问题,另外一个回路进行接管,那么原本在两个回路的数据量需要全部转移到一个 回路中,在切换的瞬间必然导致另外一个回路出现大量的拥塞,由于雪崩效应,虽然网络拓扑结构上并不存在单点,但是最终结果却与单点故障相差无几。
2) RHEL的早期版本4和5均存在一些bug,系统在负载均衡模式下,只要一个回路发生故障,系统会误以为所有回路都出现问题,当然通常是闪断,但是对于rac的心跳而言,这也是不可接受的。
3) 如果担心私网的带宽不足造成性能瓶颈, 基本的思路应该是尽量使用较大带宽的心跳网络,例如10Gbps的以太网或者infiniband,而不是使用多路1Gbps的以太网做负载均衡。

在Oracle的工程系统Exadata上,私网使用的是Active-Standby模式的infinband接口,一来提供了40Gbps的高 带宽,二来实现了故障转移。连接到生产的公网则使用1Gbps/10Gbps的以太网接口(默认是1Gbps, 如果要使用10Gbps,则需要单独购买光纤模块),也是使用Active-Standby的模式,当然公网绑定是允许用户修改为其它模式的。

 

附:如何配置对应的网卡绑定属于操作系统自身的范畴,但是你依然能在MOS上找到对应的配置文档,当然如果需要深入了解一些个性化的设置,则需要参考操作系统厂商提供的详细文档。以下列出MOS文档的标题和文档号供参考。

Configuring the HP-UX Operating System for the Oracle 10g and Oracle 11g VIP (Doc ID 296874.1)

Configuring the IBM AIX 5L Operating System for the Oracle 10g VIP (Doc ID 296856.1)

Linux Ethernet Bonding Driver (Doc ID 434375.1)

How to Analyze Problems When Trying to Configure Solaris IP Multipathing (Doc ID 1020085.1)

Comment

*

沪ICP备14014813号-2

沪公网安备 31010802001379号