本文主要描述了HP C7000刀片服务器系统中的Flex-10 VirtualConnect模块的配置 及VMware vSphere的网络,分析讲解了FlexNIC和vmnic的对应关系,以及如何设计一个高可用高冗余的VMware基础架构。
【C7000刀箱和VMware虚拟机架构的千兆网络设计】
图片来源:P4《HP Virtual Connect for the Cisco Network Administrator 2.3》
HP C7000刀片服务器机箱(以下简称“刀箱”)正面可以插16个半高的服务器,每把半高的刀片服务器最多支持8个物理网络端口(分别为板载2个,Mezz1插槽可插1个双端口卡,Mezz2插槽可以插1个四端口卡)。在刀箱的背面可以插8个半宽的网络模块,每个网络模块一一对应刀片服务器上的一个网络端口。每个网络模块通常都有16个downlink,一一对应正面的16台半高的服务器。刀片服务器上的网络端口和网络模块上的Downlink一一对应,通过刀箱的矩阵背板无阻塞的连接在一起。
上图所示的就是一把半高刀片服务器的网络接口和背部网络模块之间的关系。
·板载的LOM1是刀片服务器上的第一个网络端口,对应于Bay1中的网络模块;(注:LOM是LAN On Motherboard的缩写,意思就是主板板载网卡)
·LOM2是刀片服务器上第2个网络端口,对应于Bay2的网络模块;
·Mezz1插槽插了一个双端口网卡,Mezz1:1是这网卡上的第一个端口,也是服务器第三个网络端口,对应Bay3的网络模块
·Mezz1:2是网卡上第2个端口,是服务器第4个网络端口,对应Bay4的网络模块
·以此类推。。。。。。
·Mezz2:4是Mezz2插槽上插的4端口网卡的第4个网络端口,是服务器的第8个网络端口,对应Bay8的网络模块。(下文有些地方将Mezz1:1简写为M1:1)
这里所说的网络模块可以是一个网络交换机,也可以是一个VC模块。
(注:VC是Virtual Connect的缩写,它不具备网络交换功能,但是可以将downlink端口灵活的映射到uplink端口上,这是HP独有的模块。(Cisco有类似的产品,本文不作介绍)。关于VC的进一步介绍,可以参考HP的官方网站:http://h18000.www1.hp.com/products/blades/virtualconnect/)
网络模块的downlink端口和刀片也是一一对应的。每个网络模块的第一个端口,总是连接到第一把刀片上去的。以此类推,第16个端口肯定是和第16把刀片相连接。
?
因此我们有:
·Bay1网络模块的downlink1 对应于第1把刀片服务器的第1个网口;
·Bay1网络模块的downlink2对应于第2把刀片服务器的第1个网口;
·。。。。。。
·Bay1网络模块的downlink16对应于第16把刀片服务器的第1个网口;
同时
·Bay2网络模块的downlink1 对应于第1把刀片服务器的第2个网口;
·Bay2网络模块的downlink2对应于第2把刀片服务器的第2个网口;
·。。。。。。
·Bay2网络模块的downlink16 对应于第16把刀片服务器的第2个网口;
并且
·Bay3网络模块的downlink1 对应于第1把刀片服务器的第3个网口;
·。。。。。。
·Bay4网络模块的downlink1 对应于第1把刀片服务器的第4个网口;
·。。。。。。
最后
·Bay8网络模块的downlink1 对应于第1把刀片服务器的第8个网口;
·Bay8网络模块的downlink2 对应于第2把刀片服务器的第8个网口;
·。。。。。。
·Bay8网络模块的downlink16对应于第16把刀片服务器的第8个网口。
?
好吧,原谅我这么罗嗦。但是搞清楚这些是非常重要的,因为更晕更复杂的还在后面呢。
再上一个图,这次看懂了么?
图片来源:P5 《HP Virtual Connect for the Cisco Network Administrator 2.3》
?
到了ESX/ESXi主机中,按照LOM – Mezz1 – Mezz2 的顺序,网卡的对应关系是:
原先我们的VMware ESX 主机的配置是这样的:
·LOM1配置为仅用于service console
·LOM2 (vmnic1)和M2 :2 (vmnic5)组合在一起,用于VM Network
·M1:1(vmnic2) 和M2:3(vmnic6)组合在一起,用于存储网络NFS或者iSCSI
·M1:2(vmnic3) M2:4(vmnic7)组合在一起,用于vMotion。将vMotion和存储网络分开,是为了减少网络拥堵。
·M2:1(vmnic4)作为第2个service console,一方面做冗余,另一方面,它位于独立的备份网络中,用于第三方的软件(如Symantec NBU 7)备份虚拟机。
这个设计中,所有2个网络接口的组合都故意分布在不同的物理网卡上,这样可以避免因为某一个板块的物理故障,导致服务下线。
在ESX主机中看出来大概是这样的:
【万兆网络设计】
自从G7系列的服务器开始,HP将Flex-10网卡集成到了自家服务器的主板上,服务器正式进入了万兆时代。Flex-10网卡是很强劲的网卡,配合Flex-10 VC 模块,每个Flex-10网口都可以拆分成4个FlexNIC或者3个FlexNIC+1个iSCSI HBA或者3个FlexNIC+1个FC HBA。是的,这块卡不是一块普通的以太网卡,它是虚拟化时代的产物,一卡多用,既可以作为以太网卡,也可以作为HBA卡。
HP VC Flex-10 Enet模块和前面所说的网络模块一样,也是插在HP c7000刀箱背部的半宽的网络模块,同样具有16个downlink,通过背板和刀片服务器网卡相连通。在HP VC Flex-10 Enet模块的面板上有8个SFP+插槽(分别标记为x1到x8),可以最多连接8个万兆光纤上联。不过要注意的是,尽量不要使用x1、x7和x8,这3个端口通常用作VC模块之间的堆叠。在水平方向上的2个VC模块之间,通过x7和x8端口以背板通道内部接通。而x1端口则和一个CX4的铜缆接口共用,用于垂直方向上的堆叠。
配合了VC Flex-10 模块,每个刀片服务器上的万兆端口都可以灵活的根据需要,变身为带宽各不相同的最多4个端口。
有了VC Flex-10 Enet模块和Flex-10网卡之后,不仅ESXi主机的带宽大大提高,而且还可以根据实际情况 的需要安排带宽的分配,同时兼顾到物理链路、物理板块和模块的冗余。
这样,我的刀片服务器网卡部分的设计就变成这样。
同样,你可以观察到,上图这样的设计也是为了避免物理网卡或VC模块损坏造成的单点失败。
【FlexNIC】
关于FlexNIC有个常见的误区,(在没接触实物之前我也一直没能理解正确)就是此时并非每个万兆端口可以最多分成4个FlexNIC,而是必须不多不少分成4个FlexNIC。就算你只划分了1个FlexNIC,并且把所有10G带宽都分配给了这第一个FlexNIC,后面3个FlexNIC甚至都没出现在VC管理器的列表中,这3个带宽为0的FlexNIC还是存在的,还能被主机操作系统认出来。只不过此时,网卡的表现为Disconnect状态(Windows下,相当于一个没插网线的物理网口),或Down的状态(ESXi下)。?
下图说明的是VC中,Flex-10物理网卡和FlexNIC的对应关系。每个Flex-10端口都被分成 了a、b、c、d四个FlexNIC端口,例如:LOM:1就分解成了LOM:1-a、LOM:1-b、LOM:1-c和LOM:1-d。
结合前面的VMware网卡设计中带宽的分配,就变成了这样。
注意这里每个FlexNIC前面的序号,这是在VC Manager (一个Web GUI管理界面)中配置的时候生成FlexNIC时候的顺序,这个顺序是固定的。第1个端口必然是在LOM:1上划分出来的a,第2个端口是LOM:2上划出的第a口,第3个端口则是Mezz1:1上的第a口,依次类推。
出于对几台老的刀片服务器的兼容考虑,我们多配置了2个GBE2C交换机模块在刀箱网络模块的Bay5和Bay6。也意外多配置了一个双端口千兆网卡在Mezz2插槽(注:这个千兆网卡其实是没有必要的)。让我们来看看混插了千兆网卡和Flex-10的网卡的情况下,网络端口是怎样的情况。
最终我们的刀片服务器是这样的:
安装完ESXi后,在vSphere Client配置界面中看出来的情况却是这样的
细心的同学可能已经发现了,vmnic的编号是从0开始的,但是和VC Manager中的顺序不同,是先依次编排完第一个双端口板载物理网卡再去编排Mezz1卡,然后再编排Mezz2卡的。因此对应关系如下表:
看到这里,大家是不是有点晕呢?好吧,建议你先去休息几分钟,抽支烟或者喝杯咖啡。然后再接下去看。因为搞懂网卡的对应关系对于设计出一个好的方案并且正确的实施起来,真的真的非常重要。
下面我们通过具体的操作进一步加强大家的理解。
?
【划分FlexNIC的操作】
划分FlexNIC的工作是通过VCM(Virtual Connect Manager)完成的,VCM可以通过刀箱的OA访问到,也可以直接通过VC模块的iLO地址访问到。
在最近的Virtual Connect Manager版本3.51中,具体的做法如下:
从菜单中选择Define—> Server Profiles。起个Profile名称,选择将应用到哪一把刀片服务器上,然后依次添加Ethernet Adapter Connections (也可以添加1个iSCSI HBA或1个FC HBA,不过本文不讨论这2种情况)。这里添加Ethernet Adapter Connections的过程就是划分FlexNIC的过程。
默认已经分配好了2个端口,它们是无法被删除的。之后可以依次添加新的网络端口,每个可以配置单个VLAN(此时服务器网络端口为untagged)或者多个VLAN(tagged)。
·要使得当前网络接口只支持一个VLAN,选择Select a network,然后从列表中选择想要的那个VLAN。
·要支持多个VLAN,则选择Multiple Networks,并从列表中选择多个VLAN,拖拽添加到右侧列表中。
·如果你想分配一个带宽为0的端口,则选择Unassigned。
下图显示的是选择Multiple networks时添加多个网络的界面,可以多选并同时拖拽。
此外,端口的速率是可以自定义的。选择CUSTOM就可以分配给当前端口一定的带宽。最小100M,最大10G,粒度为100M。
点击Apply以后,就会给这些端口分配好MAC地址并且映射一个FlexNIC。前面我们说过,一个物理Flex-10网卡将产生4个FlexNIC,这4个FlexNIC的命名规律是<物理网卡名>后面跟上a/b/c/d,例如Mezz1:1就分成了Mezz1:1-a、Mezz1:1-b、Mezz1:1-c和Mezz1:1-d。如下图所示。
玩过几次以后,你就会发现,新添加的虚拟端口和FlexNIC之间的添加顺序是有规律可寻的。那就是先是第1个物理网口(LOM:1)的第1个FlexNIC(LOM:1-a),然后是第2个物理网口(LOM:2)的第1个FlexNIC(LOM:2-a),然后是第3个物理网口(Mezz1:1)的第一个FlexNIC,等所有的物理网口都轮过一次之后,再从第1个物理网口(LOM:1)开始分配第2个FlexNIC(LOM:1-b)。
另外,你会发现,delete只存在一处,只能从最后一个开始删,不能从中间删。因此这些端口是有严格顺序的。
这里的MAC地址是VC自动生成的,配置给了Server Profile。而不是和物理网卡相关的。换句话说,当物理的刀片服务器出现故障的时候,我们只需要简单的插入备用服务器并重新将Server Profile应用起来,所有的MAC地址(如果配置过HBA的话也包括HBA的WWN地址)都会维持原样,一丝一毫都不会影响到网络(例如交换机中的快速转发表、负载均衡设备上的均衡算法等等)。
接下去让我们来看看这些VC模块上联是怎么设计的。
?
【SUS的设计】
考虑到冗余,上联链路的设计如下图所示。每4个端口组成一个SUS,这4个端口2个和核心交换机1相连,另外2个和核心交换机2相连。每2个端口都捆绑在一起形成一条802.3ad LACP的20G聚合链路。
·Shared_Uplink_Set_1上主要运行生产网络
·Shared_Uplink_Set_2上主要运行存储网络。(这里的存储网络可以是iSCSI SAN或者NFS)
(注:在运行SAN的环境中,存储网络也可以连接到独立的SAN交换机)
下图是另外一个放大的背部VC模块示意图:
图中红线是堆叠线。HP VC Flex-10模块的CX4铜缆x1端口和SFP x1端口是共享的,CX4端口连接后SFP模块就会失效。下图中红色垂直联系连接的就是CX4端口。所以,上联端口避开了SFP 的x1端口,选择了x2和x3端口。
这里要着重指出的是,虽然水平方向VC之间默认已经通过背板连在了一起,垂直方向上则必须使用外部堆叠线连通。只有全部连通后形成一个完整的VC Domain,任一downlink端口的数据包才能从任一uplink的端口转发出去。
我起初就没有配置外部堆叠连接线,VC Manager就一直报错。
Vendor工程师告诉我说,既然VC Manager能认到这4个VC模块,配置SUS的时候也能够选择任一VC上的任一上联端口,这说明VC Domain其实是通的,不需要垂直的外部连线。我做了一个测试,将SUS1只留下bay1-x2端口和bay3-x2端口,然后在刀片服务器上配置LOM1网卡,用ping 外部地址 -t 来确保网络可以连通外部网络。此时断开bay1上的vc模块,网络立刻就中断了,重新启动bay1的vc后恢复连接。这说明LOM1没能通过内部的链路,把数据包传送到Bay3上的uplink口上。这个测试证明了之前vendor工程师的说法是不对的,垂直方向上没有内部的通道。
此外,由于堆叠线已经将4个VC Flex-10模块连在了一起,因此上联端口并不需要分散在4个模块上。例如我们完全可以把上图Bay1上x2/x3这2条上联链路连接到Bay3模块的x4/x5端口上。(大拿Kenneth的例子就是这么设计的,文章在此 http://virtualkenneth.com/2009/11/04/understanding-hp-flex-10-mappings-with-vmware/)。我这么设计是考虑在模块故障的时候,尽量减少受影响的上联端口数量,分散风险。
添加一个新的SUS时候的要点如下图所示:
(1) 给SUS起一个名字
(2) 选择连接模式:Auto或Failover,我们因为要做LACP链路聚合,所以选Auto
连接模式如果要做链路聚合,那么必须在这里选择Auto,并且请你的网管协助,对应的交换机端口必须设成LACP Mode Active或者LACP Mode Passive。
(3) 添加端口
(4)添加相关的vNet。在这里可以忽略,vNet和SUS的关联的配置可以在下一步vNet的配置中完成。
【vNET设置】
这里的设计采用Simple network的模式,也就是一个vNet对应一个VLAN。
点击加号添加新的网络。
我的设计是每个vNet的名字都用VLAN号表示,这样显得一目了然。
勾选上Smart Link。Smart Link的意思是,当该vNet的所有Uplink都失效的时候,VC会自动禁用downlink,这样主机操作系统就会意识到某个物理端口掉线了,从而引导数据流量走向备用的端口,以保证网络的持续畅通。
由于VMware的主机服务器会位于不同的子网,因此主机的VM Network肯定对应了多个VLAN,要在主机上配置多少个VLAN,就必须在这里添加多少个vNet。
【故障检验】
第一种情况:VC模块出现故障。例如图中Bay1的VC模块 故障,此时LOM1的网卡也完全失效,并且Bay1 VC模块上的上联到Core1的网络也中断了。由于vmware中我们每个vSwitch都设计了2个互为备份的上联端口,而且这2个上联端口分布在2块物理网卡上,因此LOM1故障时,Mezz1:1的端口承担了上联的任务。同时,SUS1链路中还有2条通道是激活状态的,因此上联也不会中断。
我们可以通过在OA中断开VC模块的电源来模拟这种故障的发生,测试冗余是否真正生效。
第二种情况,物理网卡故障。同样,互为备份的端口位于LOM上,因此LOM上的网卡将承担起主机上联的任务,VMware还是能正常运行,不会收到任何中断。
第三种情况,上联交换机发生故障。由于SUS中另外还有两条链路是通往另外一个核心交换机的。因此网络也不会产生任何中断。
当然,对于VMware来说,还有一种情况,就是主机本身整个坏掉。这时候就要靠VMware HA来保证高可用性了。