一直很想写这篇博客,与你们探讨交流这项技术, Hyper-V Converged Network,中文我将它翻译为融合网络,后来老王又发现这项技术彷佛没有群集的话意义不大,因此加上了群集二字,以前不多看到国内有人写过这方面的博客,可是在国外从2012开始已经有很多人对这项新技术进行了尝试,到Windows Server 2016,Converged Network模型更是支援了RDMA,所以决定写这篇博客,但愿可以让更多中国的微软ITpro们知道这项技术,为你们抛砖引玉,内容不对之处欢迎探讨指正ios
在介绍融合网络以前,我想先和你们探讨下Windows上面群集网络的规划,以前几年老王有幸参与过一些项目的实施,发现国内实施微软群集的工程师们彷佛都并不太在乎群集网络方面的规划,一些小型的场景,甚至就放了一块网卡,承载群集的全部流量,有的有良心一点会放两快卡,一些大型企业实施的时候会把管理,VM,心跳,存储,四种分开,这彷佛是国内大中型企业作群集时候的网络标配,土豪一点的会为每种类型的网络配置Teaming或者MPIO,多通道等技术shell
按照微软的最佳实践来说,微软建议切割五种群集网络,管理,VM,迁移,心跳,存储,微软将迁移流量也建议单独隔离出来,实际上我是理解微软这种考虑的,我猜测微软总部这样考虑,也许是考虑到大型场景下,多是一个私有云,或者托管不少虚拟机的虚拟化架构,可能会频繁进行大规模迁移的场景下,同时VM也面临着业务上面的大并发访问,这时候可能一组网络难以支撑,会致使某些场景下的性能降低,但其实根据老王的观察,目前国内使用Hyper-V的企业不多会达到微软这种场景的设想,一般状况下一组LACP teaming 20GB的流量怎么也hold住VM访问+迁移流量了,所以国内不多看到单独独立出迁移网络的群集架构数据库
因此国内用户可能比较常见的就是这种,管理,VM+迁移,心跳,存储的架构,有的公司可能一组LACP teaming 直接把管理,VM,迁移三种放在一块儿,而后,心跳,存储,一共三个群集网络,这也是一种国内常见的群集网络架构。windows
这里老王想格外与你们进行探讨的是里面“心跳” 这种群集网络,国内对于这种类型的群集网络一般都叫它心跳网络,彷佛这个网络只是用作心跳检测,其实并非这样,严格来说,这种类型的网络应该叫作群集通讯网络,国外也有人叫它CSV网络。服务器
群集通讯网络其实承担着3种功能的流量,在2012以后开始发生了一些变化网络
1.运行情况检测网络,群集你们都知道,全部节点须要访问同一个共享存储,在群集建立群集角色或群集功能,角色产生的数据会存在共享存储,而后群集之间会作运行情况检测,为何要作这个检测呢,就是为了知道其它节点如今活不活着,例如群集当前两个节点,他们每隔一秒都会经过3343端口和对方执行一次实际的握手检测,每次发送一个134 byte的包,除了确认对方在线,对方也会确认你在线,双方确认完成一次检测结束,当检测达到必定阈值,例如默认状况下同一子网内每隔一秒全网检测一次,若是一个节点五次检测均没有回应则视为该节点下线,群集其它节点会检查自身群集注册表查看该节点承担角色功能,而后进行迁移出来,跨子网默认也是每隔一秒全网检测一次,五次失效视为该节点下线。若是群集节点启用了Hyper-v角色,默认本地子网每隔一秒全网检测一次,十次失效视为该节点下线,跨子网每隔一秒全网检测一次,二十次次失效视为该节点下线。在2016里面新增了跨站点的检测模式,若是检测到群集设置了站点,则当跨站点,跨子网或不跨子网的状况下,跨站点的检测策略会优于跨子网的检测模式执行。架构
如上所述,运行情况检测网络是群集里面很重要的内容,经过检测结果来确认一个节点是否存活,所以对于该网络的质量要求极高,能够带宽不高,但必定要确保质量,确保不会被其它流量干扰,确保不会出现丢包,不然若是出现丢包或者流量干扰的状况就会致使群集的运行情况检测失去准确性,自己存活的节点却由于检测不许确而被下线。并发
所以,老王建议,作群集,至少至少应该分为两种网络,一块承担管理VM迁移存储等流量,一块用于承担群集通讯网络的流量,请注意这种运行情况检测是群集内的一个全网检测,每一个节点发送检测时会发给全部节点,确保群集每一个节点与节点之间都可以知道对方的状态。app
2.群集内数据库同步流量负载均衡
上面讲到当一个节点下线时,群集会触发故障转移操做,其它节点检查自身的群集数据库,查看下线的节点,承载了什么角色,而后上线该角色,并挂载上该角色依赖的群集组,而后客户端从新访问,这是群集最简单的一个故障转移原理,你们可能会注意到里面有一个群集数据库,这个数据库和SQL的数据库,exchange的数据库都不要紧,是群集用来存放各个节点的状态,以及各节点hosting角色状态的一个数据库,该数据库主要存在于各群集节点自己的注册表上,若是有磁盘见证的话那么磁盘见证里面也会存放一份,例如节点1当前在线,它上面运行了DHCP角色和文件服务器角色,当前状态是在线,或节点1上面承担了HyperV角色,如今上面跑了十台虚拟机,五台在线,五台离线。
群集数据库主要就是记录这种数据,群集配置,群集成员配置,群集资源的添加,建立,启动,删除,中止,下线等状态变化,而后与其余节点进行同步,带宽使用并不会很大,但必定要准确,每一个节点之间的群集数据库必定要一致,这是最重要的要求,所以,群集之间各个节点须要实时的去同步群集数据库,确保每一个节点的数据库内容一致,这样当有节点出现下线操做,其它节点才能够准确的承担他的工做,当咱们在群集中执行添加角色,删除角色,新增群集资源的时候都会触发数据库的同步操做,所以必定要确保这个同步操做是及时的,准确的到达各个节点,一样,这种类型的流量对网络的质量要求也很高,它并不须要多高的带宽,但必定要保证网络质量。
3.CSV元数据更新
CSV是个好东西,之前2008时代没有CSV,一个hyper-v集群上面要迁移只能把绑定到群集硬盘的虚拟机一块儿迁移,后来有了CSV就方便多了,CSV不像传统群集磁盘那样,一次挂载在一个节点,故障转移时须要离线,卸载NTFS保留,再上线,挂载,时间长,并且还很不方便。有了CSV以后全部节点上面均可以访问到被建立好的CSV卷,按照CSV编排器的顺序进行访问就能够,当一个节点断电关机,另外节点直接开机VM就能够上线,不须要再执行群集磁盘的卸载上线工做,由于CSV卷始终是挂载着的。所谓元数据更新,便是说,当咱们在单个节点上面对CSV卷里面内容进行增删改的时候,后台CSV会把咱们增删改的操做进行同步,由东向西,或由北向南,同步的不会是具体的文件内容,只是元数据,一样这种类型的流量对于质量要求很高,并不须要多少带宽,一旦出现延迟,可能致使的状况就是咱们在CSV上面更新一个文件执行起来很慢才会进行同步,须要额外注意,2012中CSV严重依赖于SMB,若是您使用CSV功能,请必定不要禁止SMB相关服务。
上述三种流量,其实都包括在咱们已知的“心跳网络”中 ,不看不知道,一看吓一跳,一直被咱们忽略的心跳卡居然也承担着这么多工做,并且还很重要,经过个人介绍相信你们已经有个基本的了解,对于群集网络规划时,必定要把这种类型的群集通讯网络单独出来,确保它能够得到最高的质量,防止被其它流量干扰,尤为是要和迁移流量隔离开,便是说至少应该有两种群集网络。
一般状况下这种类型的群集通讯网络对于网络带宽要求很低很低,甚至10M 100M也能够知足,但也有一些特别的场景,例如SQL,exchange群集,会常常须要跟踪application的变化,致使群集数据库会很频繁的更新,一些Hyper-V场景下,常常执行CSV建立,迁移操做,会致使CSV元数据流量频繁的进行更新,针对这些场景,老王建议配置单块1GB卡足够了,或者2块1GB卡,作SMB多通道或者Teaming,10GB彻底不必,属于浪费了,有那么大的带宽分给虚拟机迁移和存储多好,哈哈。
2012R2时代也有国外的专家说过,能够把CSV元数据更新的流量从群集通讯流量中分割出来,但老王目前还没看到成功的案例,因此目前姑且咱们先认为群集通讯流量包括运行情况检测,群集数据库更新,CSV元数据更新这三种流量。
OK,上面基础打好了,下面咱们开始今天的重头戏,融合网络,我先不解释太多,咱们先开始进入一个群集环境,咱们在环境中慢慢看请它的真面目
今天的融合网络环境架构以下
12DC :80.0.0.1 承担域控角色
ISCSI 50.0.0.99 60.0.0.100 承担ISCSI服务器角色
HV01
四块网卡,两快卡组成teaming,经过Convered Network技术分出三块卡
Mgmt 80.0.0.2
clus 90.0.0.2
VM 100.0.0.2
另外两块卡作ISCSI MPIO 50.0.0.1 60.0.0.2
HV02
四块网卡,两快卡组成teaming,经过Convered Network技术分出三块卡
Mgmt 80.0.0.3
clus 90.0.0.3
VM 100.0.0.3
另外两块卡作ISCSI MPIO 50.0.0.3 60.0.0.4
关于服务器怎么装,ISCSI,MPIO怎么配置本文不作说明,咱们直接进入Convered Network技术配置的场景中
首先,如今的场景下,每台宿主机上面能够看到五个网卡,其中四块是咱们上面说好的,一个teaming,交换机独立,地址哈希的,名字咱们全部节点上叫vTeam
真实场景下我建议你们都配置为LACP模式的teaming,两张10GB,进出双网卡。
我这里是使用两张1GB,若是生产环境建议至少四张1GB或两张10GB
文章到这里,还和咱们传统的群集没什么两样,接下来重头戏来了,一直在说的Convered network究竟是怎么回事呢
老王这里先简单介绍一下,简单来说,Covered Network就是在Hyper-v父分区中,基于单个网卡或teaming,建立出多个虚拟网络适配器,这是2012开始出现的一项新技术,原来咱们一直觉得一块网卡只能对于出一个虚拟网络适配器,但其实在2012开始已经发生了改变,咱们能够基于Convered Network技术在一块网卡或teaming之上创建出多个虚拟网络适配器
同时,能够针对每一个建立出的虚拟网络适配器配置IP,QOS,VLAN,是否是很酷,一块物理网卡,建立出一个虚拟交换机,但能够对应出多个能够配置IP的虚拟网络适配器,而且能够配置每一个虚拟网络适配器单独的QOS,IP,VLAN,这在之前是硬件厂商们的技术,微软在2012也在本身的虚拟化平台上面进行了实现,话很少说,咱们下面就开始实做
#建立基于vTeam组合建立虚拟交换机,最小带宽模式设置为经过权重决定,因为咱们会单首创建管理用的虚拟网络适配器,这里咱们先设置AllowManagementOS为False,如设置为True会产生虚拟网络适配器
New-VMSwitch -Name vSwitch -NetAdapterName vTeam -MinimumBandwidthMode Weight -AllowManagementOS $False
#设置虚拟交换机默认流最小带宽权重为20,默认状况下虚拟网络适配器发送的任何流量链接到这个虚拟交换机,而且没有分配的最小带宽将被过滤到这个桶中,即默认若是没有匹配上其它最小带宽权重的流量至多使用默认总带宽百分之20权重的带宽
Set-VMSwitch "vSwitch" -DefaultFlowMinimumBandwidthWeight 20
#基于单个虚拟交换机建立出mgmt,clus,vm三个虚拟网络适配器
Add-VMNetworkAdapter -ManagementOS -Name "Mgmt" -SwitchName "vSwitch"
Add-VMNetworkAdapter -ManagementOS -Name "Clus" -SwitchName "vSwitch"
Add-VMNetworkAdapter -ManagementOS -Name "VM" -SwitchName "vSwitch"
#设置每一个虚拟网络适配器至多可使用总带宽的权重,其中VM(VM+Live Migration)最占用流量,咱们将流量优先分配权重分配给它,其次权重分配给管理流量,最少的权重分配给群集网络,MinimumBandwidthWeight值以相对权重计算,范围在0-100,建议虚拟网络适配器全部权重+默认流权重一共不超过100,超过100后后台也将从新平衡权重计算,建议设置全部虚拟网络适配器权重共计80或70,90,剩余的用100减去留给默认流。
Set-VMNetworkAdapter -ManagementOS -Name "Mgmt" -MinimumBandwidthWeight 25
Set-VMNetworkAdapter -ManagementOS -Name "Clus" -MinimumBandwidthWeight 10
Set-VMNetworkAdapter -ManagementOS -Name "VM" -MinimumBandwidthWeight 45
#在设置全部虚拟网卡权重的时候后面能够添加 -Access -VlanId 参数,为每一个虚拟网络适配器设立单独的Vlan,起到隔离做用
#按照预约义的配置为每一个虚拟网络适配器分配IP地址,注意分配mgmt网卡的DNS为80.0.0.1,Clus网卡取消netbios注册
New-NetIPAddress -InterfaceAlias “vEthernet (mgmt)” -IPAddress 80.0.0.2 -PrefixLength “24”
New-NetIPAddress -InterfaceAlias “vEthernet (Clus)” -IPAddress 90.0.0.2 -PrefixLength “24”
New-NetIPAddress -InterfaceAlias “vEthernet (VM)” -IPAddress 100.0.0.2 -PrefixLength “24”
#确保网卡顺序以下,Mgmt做为首要出站网络DNS访问解析
HV02配置同上,再也不赘述,配置完成后和HV01同样,能够看到基于两块网卡组成的teaming创建出来的三块虚拟网卡以及两块ISCSI网卡
到这里你们是否是感受很奇妙,其实最初老王猜测这会是和vmware端口组同样的技术那就酷了,虚拟机接到端口组,每一个端口组能够用不一样的网卡,还能够作故障转移容错,VLAN ID,QOS的设置,微软这个,除了每块虚拟网络适配器不能作故障转移其它也都差很少嘛,但当作出来后实际看仍是有点区别,vmware esxi上面的端口组作完以后,虚拟机直接就能够接入到端口组中,相对来讲效果更加直观,便于理解
而微软的这种融合网络建立出来的虚拟网络适配器,在单台机器上几乎看不到什么特别的效果,由于虚拟机仍是接到vswitch这个虚拟交换机,可是迁移流量走那块卡,并不知道,单台机器看不出什么,咱们只能看到,阿,咱们能够基于两块网卡作成teaming,而后作出虚拟交换机,基于这个虚拟交换机咱们又作出了多块虚拟网络适配器,每一个虚拟网络适配器能够配置单独的QOS,IP,VLAN ,可是具体怎么切割网络流量的,到底用途在哪里,咱们到如今为止还看不到显著的效果,网上不少文章都是作到这里就停了,搞得老王也是一头雾水,单台机器上面作这样的架构其实在我看来意义并不大,只是好看而已,作出来了以后实际上作出来了以后单机上面并不会分割流量,除非配合VLAN,host文件等设定。
所以,咱们来到群集里面就能够看得清楚了,具体群集怎么搭建的步骤,老王这里不作解释,相信你们都会的,在群集中咱们能够看到添加进来的五个网络
通过调整以后以下图所示,这下子五块网卡就各尽启用了,CLU网卡首要用于群集通讯,完成运行情况检测,群集数据库更新,CSV元数据更新,一旦CLU网卡不可用,群集会自动路由至其它mgmt或vm卡承担群集通讯流量,ISCSI01 ISCSI02两块网卡为MPIO网络,不参与群集通讯流量,管理流量,访问流量,设置VM网卡为实时迁移时使用网卡,实际上微软建议咱们能够在这里设置多块,例如设置VM和MGMT,VM网络出现故障,还可使用MGMT完成迁移,或者咱们也能够经过powershell,群集会根据度量值和优先值选择排名第二位的网络用于实时迁移,或咱们能够添加多个网络,设置两个网络接近的度量值,这样实时迁移就会在两块卡直接负载均衡。
文章进行到这里已经接近尾声了,回想一下咱们作了什么呢,咱们底层使用了两张卡作成的teaming,而后基于这组teaming创建虚拟交换机,再基于虚拟交换机建立出了三块虚拟网络适配器,并为其指定了单独的QOS策略,确保每一个虚拟网络适配器在本身带宽权重内运做,不会干扰到其它网络,同时咱们为每一个虚拟网络配置了IP地址,并最终加入了群集网络,在群集的网络模式配合下咱们实现了真正的流量分割,每块卡实现了各尽启用
老王认为这在群集网络规划时是一种新的思惟,假设服务器只有两个或四个口,或者交换机端口有限,不容许咱们六块卡八块卡的占用,那么咱们彻底就能够考虑经过这种融合网络的架构设计来节约端口的成本,又可以经过QOS技术对虚拟出来的网络适配器进行合理的管控,同时咱们底层是teaming,也能够得到teaming的容错性,对于上层的虚拟网络适配器,它只知道对应的是虚拟交换机,虚拟交换机只知道对应的是teaming,便是说只要teaming没坏,整套架构就能够正常运做,一旦teaming里面单块网卡出现故障,并不会致使整个架构的瘫痪,只须要再增长网卡进来便可,这对于上层的架构都不会有很大的感知。
在关于融合网络的架构中老王有一个地方一直没有提到,为何ISCSI你要单独出来两快卡,为何不干脆都经过一组teaming虚拟出来,其实老王彻底能够都放在一组teaming里面,可是我想给你们展现出最理想的的架构,通过翻阅国外的资料老王得知,ISCSI这种存储技术是不支持NIC teaming的,若是要想得到ISCSI的MPIO能力,只有单独出来两块网卡,或者,两个ISCSI网卡,分别对应两个虚拟交换机,这样物理层可使用MPIO技术,群集虚拟机也能够获得。
另外,NIC teaming技术在2012时代也不支援RDMA技术,若是你的融合群集底层是SOFS架构,那么你用了两块网卡作成teaming,也将失去RDMA的能力,若是是SMB架构,在2012时代老王建议单独出来两块10GB卡,不作teaming,充分利用SMB多通道和SMB RDMA技术。
固然微软最终也遵从了广大群众的呼声,在2016里面,提供了新的技术Switch Embedded Teaming,建立出来的虚拟交换机,将支援融合网络中使用RDMA VRSS等技术
2016融合网络新命令示例:
#建立支持RDMA与VRSS功能的Switch Embedded Teaming交换机
New-VMSwitch -Name CNSwitch -AllowManagementOS $True -NetAdapterName NIC01,NIC02 -EnableEmbeddedTeaming $Tru
#针对存储网络及迁移虚拟网络适配器启用RDMA
Get-NetAdapterRDMA -Name *Storage* | Enable-NetAdapterRDMA
Get-NetAdapterRDMA -Name *Live-Migration* | Enable-NetAdapterRDMA
#在vNIC和物理NIC之间设置关联
Set-VMNetworkAdapterTeamMapping –VMNetworkAdapterName Storage1 –ManagementOS –PhysicalNetAdapterName NIC1
Set-VMNetworkAdapterTeamMapping –VMNetworkAdapterName Storage2 –ManagementOS –PhysicalNetAdapterName NIC2
----------------------------------------------------------------------------
延伸阅读
----------------------------------------------------------------------------
关于ISCSI与2012融合网络的讨论※
https://community.spiceworks.com/topic/314930-iscsi-in-hyper-v-2012-10gb-converged-fabric
https://social.technet.microsoft.com/Forums/windowsserver/en-US/1c23a379-e7d6-4d47-8e21-0963ad931484/iscsi-in-converged-network-scenario?forum=winserverhyperv
http://www.aidanfinn.com/?p=13947
http://www.aidanfinn.com/?p=14509
----------------------------------------------------------------------------
融合网络适用场景及示例
http://www.davidmercer.co.uk/windows-2012-r2-hyper-v-converged-network-setup/
http://www.windows-infrastructure.de/hyper-v-converged-network/
https://www.starwindsoftware.com/blog/musings-on-windows-server-converged-networking-storage
----------------------------------------------------------------------------
关于DefaultFlowMinimumBandwidthAbsolute与 MinimumBandwidthWeight参数用途及深刻解释※
https://blogs.technet.microsoft.com/meamcs/2012/05/06/converged-fabric-in-windows-server-2012-hyper-v/
https://social.technet.microsoft.com/Forums/windowsserver/en-US/7c265109-b703-4e50-aab0-b7508b32207f/defaultflowminimumbandwidthweight-setvmswitch-question?forum=winserverpowershell
http://www.aidanfinn.com/?p=13891
----------------------------------------------------------------------------
经过SCVMM管理融合网络架构
https://charbelnemnom.com/2014/05/create-a-converged-network-fabric-in-vmm-2012-r2/
https://www.starwindsoftware.com/blog/how-to-deploy-switch-embedded-teaming-set-using-scvmm-2016
----------------------------------------------------------------------------
2016 Switch Embedded Teaming
http://www.aidanfinn.com/?p=18813
https://technet.microsoft.com/en-us/library/mt403349.aspx
http://www.tech-coffee.net/how-to-deploy-a-converged-network-with-windows-server-2016/
https://community.mellanox.com/docs/DOC-2904
----------------------------------------------------------------------------