一直很想寫這篇博客,與你們探討交流這項技術, 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
----------------------------------------------------------------------------