2.3.3 Cisco Nexus 1000V交换机
Nexus 1000V(NX1KV)属于分布式软件交换机,能够跨越在运行VMware ESX/i 4.0的多个主机之间。它克服了vSS或vSwitch的缺点。NX1KV包括两个主要部分:
·虚拟监视器模块(Virtual Supervisor Module,VSM):此模块组成了交换机的控制平面,是一个运行NX-OS的VM。
·虚拟以太网模块(Virtual Ethernet Module,VEM):此模块组成了交换机的数据平面,通常系统中会部署1个或多个VEM。VEM本质上是一个虚拟线卡,被嵌入到每个ESX/i 4.0主机中,由它实现L2转发功能。每个ESX服务器主机只能安装一个单独的VEM。
这两个模块完成了对物理交换机的抽象:监视器模块是VSM,而线卡是每个ESX/i 4.0主机中运行的VEM。所有的配置都在VSM上进行,并传播给所有属于同一个域(更多细节,请参考后面“域ID”小节相关内容)的VEM。图2-6展示了NX1KV的组件。
在物理交换机中,监视器模块及线卡共用一个内部交换光纤来进行通信,在NX1KV中的监视器模块及线卡从物理上被分离开来,尽管它们在逻辑上看起来还像在同一个交换机中工作,但却是使用外部光纤(外部DC网络)而非内部光纤来完成彼此间通信。VEM上的物理NIC是通往外部光纤的上行链路,从VM vNIC到本地虚拟以太网端口间的数据传输由VEM负责转发,但是VEM并不会直接将数据转发给其他VEM。相反,源VEM将包发往上行链路,然后通过外部光纤将这些包转发给目标VEM。VSM不在数据路径中,并不参与实际的数据包转发。
虚拟接入层是服务器虚拟化的前端,可以使用NX1KV来构建虚拟接入层。更多有关使用NX1KV进行虚拟接入层设计的案例,请参考9.1节的相关内容。
图 2-6 Nexus 1000V(NX1KV)组件
说明:为了遵守NX1KV VSM/VEM的惯例及术语,“包”与“帧”两个术语在本节及它的子章节中可以互换使用。
虚拟监视器模块
VSM建立了NX1KV的控制(管理)层,它为网络管理员提供了跨越多个VEM的单点配置管理。与传统交换机将控制平面集成到硬件中不同,VSM被部署成一个运行NX-OS的VM,也就是一个OS。即可以使用IOS文件也可以使用公开虚拟化格式模板(Open Virtualization Format,OVF)来安装VSM。
说明:作为在VM上运行VSM的替代,VSM也有一个物理设备实体——NX1010,用户能够使用Nexus 1010同时运行最多4个NX1KV VSM。
安装了VSM/NX-OS的VM与其他OS拥有相似的基本系统需求。VSM要求有一个单独的虚拟CPU,2GB的指定RAM,以及3个vNIC,这3个vNIC需具备以下功能:
·控制接口:控制接口属于L2接口,VSM使用该接口与VEM进行通信。该接口负责处理低级别控制包,包括心跳以及任何需要在VSM及VEM之间进行交换的配置数据。控制接口通常是VEM的第一个接口,在VM网络属性中以“网络适配器1”身份进行注册。
·管理接口:在常见的Cisco交换机中,管理接口通常为mgmt0端口。为了便于管理,会为mgmt0分配一个IP地址。该接口负责建立并维护VSM与VMware vCenter服务器之间的连接。管理接口一般都是VSM上的第2个接口,在VM网络属性中以“网络适配器2”身份进行注册。
·包接口:包接口也是一个L2接口,只负责两种类型的控制流传输:Cisco发现协议(Cisco Discovery Protocol,CDP)及Internet组管理协议(Internet Group Management Protocol,IGMP)。当VEM接收到一个CDP包,VEM会将该包重新转发给VSM,VSM对包进行分析后,会将包转送到CDP入口。包接口同时还负责协调多个VEM间的IGMP。例如,当一个VEM接收到一个IGMP请求时,该请求将被发送给VSM,由VSM负责协调交换机上所有VEM之间的请求。包接口通常为VSM上的第三接口,在VM网络属性中以“网络适配器3”的身份进行注册。
说明:VSM VM的vNIC要求Intel e1000网络驱动,e1000网络驱动并不是建立VM时的默认驱动,因而有可能当定义VM时,OS并不一定能够支持它。不过,用户可以手动改变VM参数文件中的驱动器。使用“Other Linux 64-bit”作为OS,就可以激活e1000驱动器,并且将其设置成默认驱动。
NX1KV使用了虚拟机箱的概念来模仿一个66槽模块化以太网交换机,该交换机具有一些冗余功能:
·槽1是为活动VSM保留的。
·槽2是为双工监视器系统的从VSM保留的。
·当主机都接入到NX1KV交换机时,槽3~66以顺序方式分别分配给相应的VEM。换句话,一个VSM最多可以管理64个VEM。
说明:用户可以通过改变“host vmware id”配置顺序来更改VEM-到-槽-序号的映射关系,更多有关该命令的详细内容,请参考2.3.3节的内容。
高可获得性及VEM
一个VSM可以扮演如下角色:
·active:active角色负责系统控制,在mgmt0接口上进行配置。
·standby:standby角色监控active VSM的状态,如果发生交换机切换,则取而代之。
·standalone:standalone角色是没有其他active-standy配置时,VSM端默认配置模式。
说明:调用“system redundancy role{standalone/primary/secondary}”命令可以控制
VSM角色类型,调用“show system redundancy status”命令可以验证VSM的系统冗余状态。要记得执行“copy running-config startup-config”命令来保存配置信息,维持系统重启后的一致性。更多有关这些命令的细节信息,请参考2.3.3节的相关内容。
NX1KV交换机的高可获得性(High Availability,HA)部署更像是在物理机箱中配置双工监视器。在虚拟机箱中,两个VSM以active-standby方式配置,槽1留给active VSM,而槽2留给standby VSM。第一个VSM将承担active VSM角色,而其他VSM将默认为standby VSM。在固定间隔内,将对两个VSM的状态及配置信息进行同步,来保证在active VSM发生故障时,能够进行透明和稳定的交换机切换(Stateful Switchover,SSO),将工作移交给standby VSM。
VMware vCenter及Nexus 1000V
NX1KV交换机的实例在VMware vCenter服务器中被表示成vDS。借助vDS,一个虚拟交换机能跨越多个ESX主机的虚拟交换机。在建立VSM与vCenter服务器之间的链路时,可以使用VMware虚拟基础架构方法体系(Virtual Infrastructure Methodology,VIM)应用程序接口(Application Programming Interface,API)在vCenter服务器上构建NX1KV交换机。
说明:VMware的管理体系被分隔成两个主要模块:DC和集群。DC包括了所有VMware部署组件,如主机、VM以及网络交换机,像NX1KV。在VMware DC内,一组主机与VM所组成的CPU及内存资源池构成了一个集群,用户可以创建一个或多个集群,然后在集群内创建VM或在属于该集群的主机间任意迁移VM。主机和VM不一定必须是集群的一部分,它们也可以驻留在DC上。
Nexus 1000V vCenter服务器扩展
vCenter服务器支持第三方管理插件对vCenter服务器功能及它的图形化用户界面(Graphical User Interface,GUI即vSphere客户端进行扩展。NX1KV交换机使用vCenter服务器扩展来展示NX1KV及其在vSphere客户端的主要组件。NX1KV扩展是一个小的XML文件(cisco_nexus_1000v_extension.xml),可以使用Web浏览器从VSM的管理IP地址上下载,插件必须在VSM之前安装,才能建立一个到vCenter服务器的链路。
Opaque数据
Opaque数据包含了一组NX1KV配置参数信息,由VSM进行维护,当VSM与vCenter服务器之间的链路成功建立后,将传播给vCenter服务器。Opaque数据还包含了每个VEM所需的配置信息,当安装VEM时,VEM可以利用这些配置信息建立与VSM间的连接。这些信息包括:
·交换机域ID
·交换机名称
·控制及包VLAN ID
·系统端口属性文件
当一个新的VEM加入后,无论是初始化安装后还是当ESX主机重启后,VEM均类似于一个未编程线卡。vCenter服务器将自动向VEM发送opaque数据,随后VEM将利用这些信息与VSM建立连接,然后下载正确的配置数据。
VSM到vCenter的通信
VSM与vCenter之间的链路负责保持vCenter服务器内的NX1KV交换机定义,同时负责传播端口参数文件(参见后面的“端口参数文件”的内容)。当NX1KV vCenter服务器插件安装完毕,链路也随之定义成功。连接包括了以下参数:
·vCenter服务器IP地址
·通信协议——HTTP之上的VMware VIM
·ESX主机驻留的VMware DC名称
当连接建成后,除了链路外,还在vCenter服务器内创建了一个NX1KV交换机。每个VSM都通过一个唯一的扩展键连接到vCenter服务器。在创建交换机实例的过程中,VSM将把之前定义好的所有端口参数文件及opaque数据传播给vCenter服务器,opaque数据向VEM提供了规定好的配置信息,使得VEM安装后就能与VSM通信。
如果VSM和vCenter服务器之间的连接发生故障,一旦连接恢复,VSM将必须确保故障期间所有配置更改信息都必须及时告知vCenter服务器,VSM与vCenter服务器之间的链路也将负责在连接建成后,传播新的端口参数文件以及任何对现有系统的更改信息。
虚拟以太网模块
VEM的作用类似模块化交换平台中的线卡,从转发的角度来看,每一个VEM都是一台独立的交换机。不同于VSM,VEM将作为核心组件,按照在每一个ESX主机而非VM上。VEM的存储空间是固定的(大约需要6.4MB的磁盘空间),而它的RAM使用是可变的。
常规配置方案中,每一个VEM需要10~50MB的RAM,而如果要求能够充分发挥VEM的扩展性,则最多需要150MB空间。每一个NX1KV实例交换机包括66个槽——2个留给VSM,剩下的64个留给VEM。最低配置是一个VSM(无法实现VSM高可获得性)加一个VEM,而最高配置是2个VSM(一个为active,一个为standby)加64个VEM。
VEM交换机端口分类
VEM能够支持如下类型的交换机端口:
·虚拟以太网(Virtual Ethernet,vEth):该端口负责连接到VM的vNIC上,或者是某个指定类型接口,诸如vswif或vmknic接口。vEth接口属于没有关联物理组件的虚拟端口,vEth接口可以表示成vEth Y,这里的Y代表具体的端口序号。借助VMotion,标注对VM是透明的,即不论相关联的VM的具体位置,接口名称都是一样的。当创建好一个新的VM后,与该VM所关联的vNIC的vEth接口也相应被创建。vEth接口与VM拥有同样的生命周期,如果某个VM被临时性关闭(用户OS关闭了),vEth接口将仍然保持活动状态,并且映射到原来的VM上,如果删除该VM,系统将释放与之连接的vEth接口资源,以便它能够为新加入的VM提供服务。
·以太网(Ethernet,Eth):接口代表了某个VMNIC(物理NIC),可以表示成EthX/Y,其中X代表模块序号,而Y代表模块上的端口序号。这些Eth接口分别对应着特定的模块。
·端口通道(PortChannel,Po):端口通道是同一VEM的多个Eth接口汇聚之处,它不能由系统默认生成,必须显式说明。
端口参数文件
NX1KV提供了一个名为端口参数文件的功能特性,这是一些网络协议,VMware使用它来简化网络服务。端口参数文件是一组接口级配置命令,被加工整理成一个完整的网络协议。VSM负责制定端口参数文件,并通过VMware-VIM API将它传播(输出)到vCenter服务器,在NX1KV上配置好的端口参数文件看起来就像分布在vSphere客户端的一个VMware分布式虚拟端口组,类似一个标准的vDS。一个新加入或现有的VM能够拥有独立的vNIC,并分配到正确的虚拟端口组,这些端口组继承了端口参数文件的设置。
当认可一个新加入的VM后,系统将选择合适的端口参数文件,NX1KV会基于该端口参数文件定义的协议创建一个新的交换机端口,可以通过重用端口参数文件来降低类似VM服务的工作量。当新开通的VM启动后,NX1KV交换机将为VM带有的每个vNIC都创建一个vEth接口,这些vEth继承了之前所选定的端口参数文件的定义。代码清单2.1给出了一个vNIC端端口参数文件配置模板的样例。
代码清单2.1 vNIC端数据参数文件配置模板
端口参数文件属于动态协议,当网络需求发生改变时可以对其进行修改,对主端口参数文件的更新将被应用到使用该参数文件的每个交换机端口上。端口参数文件同样也负责管理ESX主机上的物理NIC(physical NIC,VMNIC),这些参数文件也称为上行链路端口参数文件,将分配给物理NIC,这一信息也包含在ESX主机安装VEM的工作中。当添加某个ESX主机到交换机中后,上行链路参数文件会同样分配给新加入VEM的物理NIC。代码清单2.2展示了一个VMNIC末端的端口参数文件配置模板样例。
代码清单2.2 VMNIC端上行链路参数文件配置模板
说明:如果配置某个参数文件为上行链路(调用可选“capability uplink”命令),就只能把它分配给物理端口(physical port,Eth),而不能再用它来配置虚拟端口(virtual prot,vEth)。
VM的整个生命周期中,都将通过端口参数文件来强化网络协议,而不论该VM是否会从一个服务器迁移到另一个服务器上,或者是挂起、休眠还是重启。在VM迁移中,诸如端口计数器以及流统计信息,所有VM所参与的网络传输检测活动,包括NetFlow、封装远程交换端口分析器(Encapsulated Remote Switched Port Analyzer,ERSPAN),在有了VMotion后都能不受干扰地执行。而这一点正是云IaaS操作所需要的关键可管理性。
该谁了:服务器还是网络管理员
在典型的DC操作环境中,服务器管理员通常负责管理OS以及应用,而网络管理员则控制交换机以及相关协议。NX1KV交换机保留了网络管理员与服务器管理员不同的功能角色,同时还创建了一个新的角色,该角色综合了网络及服务器管理员的功能,这一点也是通过端口参数文件完成的(更多细节请参见本章的“端口参数文件”的相关内容)。
网络管理员负责定义端口参数文件,并将它们输出给vCenter服务器,端口参数文件在vCenter服务器中类似普通的VMware端口组。当系统为新加入的VM提供服务时,服务器管理员将挑选合适的端口参数文件,NX1KV将基于该参数文件创建新的交换机端口,服务器管理员也可以通过重用该参数文件来简化对其他类似VM的服务。
VEM到VSM的通信
类似VSM,每一个VEM都拥有一个控制和包接口。这些接口是不可控的,终端用户不能直接配置接口。VEM借助vCenter提供的opaque数据在合适的VLAN上完成对这些控制及包接口的配置工作,并将这些正确的上行链路参数文件应用到控制及包接口,以便和VSM之间建立连接。当VSM识别出VEM后,一个新模块将被虚拟地插入到NX1KV交换机的虚拟机箱中,VEM随后将被分配得到一个3~66中最小可得的模块序号,VEM首次启动时,VSM将会分配该模块序号给VEM,并在ESX服务器上使用全局唯一ID(Universally Unique ID,UUID)对该VEM进行追踪。UUID能够确保即使发生连接超时或电力故障使得ESX主机掉线,在故障解除后,VEM也能够保留它的模块序号。
VSM负责维持与它相关的VEM之间的心跳信号,信号每次传输间隔为2秒,如果VSM在8秒内没有接收到应答消息,VSM将认为该VEM已经被移除到虚拟机箱之外。如果VEM是因为连接问题而无法进行应答,VEM将在它最后的正常状态时间段中坚持转发包,当运行中的VEM与VSM之间的连接恢复后,VEM就不需要再次被重新编程。
系统VLAN
系统VLAN是端口参数文件中的可选部分,如果采用系统VLAN,该参数将把端口参数文件变成特定系统端口参数文件,然后包含在opaque数据中。使用系统端口参数文件的接口都是系统VLAN的成员,即使是ESX重启后VEM与VSM间还未建立起连接,接口也将被自动激活。这样一来,在ESX主机重启后还未与VSM建立连接也能保证关键VMNIC的可用性。可以手动地将控制及包VLAN也定义成系统VLAN,用在vswif以及vmknic的VLAN也可以看成系统VLAN。不过,传递普通VM数据的VLAN不能被当做系统VLAN处理。代码清单2.3给出了一个关键端口的端口参数配置模板。
代码清单2.3 关键端口的系统参数配置模板
域ID
由于多个VSM及VEM之间可以共享相同的控制及包VLAN,因此系统必须要能够确定此VSM应与哪个VEM连接,使用域ID则可以将VSM绑定到VEM中。NX1KV交换机使用域ID参数用来确定VSM及其相关联的VEM,当系统首次安装VSM后,将创建一个域ID,并作为opaque数据的一部分传送给vCenter服务器,VSM向其关联的VEM所发出的每一条命令都带有域ID标识。
当VSM和VEM共享同一个域ID时,VEM将接受并响应该VSM的命令。VEM会自动忽略那些未包含正确域ID标识的命令或配置请求。如图2-7所示,域ID18“连接”了两个属于同一VSM的VEM,它们均属于同一个vDS,域28也属于相同情况。
交换转发
与带有集中转发引擎的物理交换机不同,每一个VEM都维护着一张单独的转发表,不同VEM之间的转发表不需要同步。此外,也不存在从一个VEM的端口转发到另一个VEM的端口这样的概念,转发给非本地VEM的设备的包将首先被转发至外部网络交换机,然后再被转发给不同的VEM。
图 2-7 域ID样例
MAC地址学习
无论是静态方式还是动态方式,在一个NX1KV交换机中MAC地址都可能被多次学习。当VM运行在VEM上时,系统将自动生成静态入口,这些入口不会随时间失效。对于那些没有运行在VEM上的设备,VEM能够通过ESX主机上的物理NIC动态学习到MAC地址。换句话,与本地附加的VM有关的入口可以静态习得,而与上行链路有关的MAC入口地址可以动态习得。来自其他ESX主机的VEM都维护了一个单独的MAC地址表,因此,同一NX1KV交换机可能多次学习到同一给定MAC地址——每VEM一次。例如,某个VEM是直接连接到VM,VEM将静态得到该VM的MAC地址,而另外一个VEM,也属于同一NX1KV交换机,可能就是通过动态学习得到VM的MAC地址。
回路预防
NX1KV交换机不支持生成树协议(Spanning Tree Protocol,STP),也无法响应及生成桥接协议数据单元(Bridge Protocol Data Unit,BPDU),NX1KV交换机会丢弃所接收到的BPDU包。
NX1KV交换机使用一种简单的不需要STP的方法来预防回路产生。在以太网(Ethernet,Eth)接口所接收到的每个汇入包都需要检查其目的地址,以确保所有包的目标MAC地址都是指向VEM内部,如果目标MAC地址属于VEM外部范围,NX1KV交换机将丢弃这样的包,以防止指向物理网络的回路产生。
NX1KV交换机无须使用STP就能够防止VEM及第一跳接入层交换机之间的回路,不过,接入层交换机仍然需要激活STP,以防止物理拓扑上其他地方产生回路。