精彩繼續 1.Hyper-V 融合羣集網絡

   一直很想寫這篇博客,與大家探討交流這項技術, Hyper-V Converged Network,中文我將它翻譯爲融合網絡,後來老王又發現這項技術似乎沒有羣集的話意義不大,所以加上了羣集二字,之前很少看到國內有人寫過這方面的博客,但是在國外從2012開始已經有不少人對這項新技術進行了嘗試,到Windows Server 2016,Converged Network模型更是支援了RDMA,因此決定寫這篇博客,希望能夠讓更多中國的微軟ITpro們知道這項技術,爲大家拋磚引玉,內容不對之處歡迎探討指正


    在介紹融合網絡之前,我想先和大家探討下Windows上面羣集網絡的規劃,之前幾年老王有幸參與過一些項目的實施,發現國內實施微軟羣集的工程師們似乎都並不太在意羣集網絡方面的規劃,一些小型的場景,甚至就放了一塊網卡,承載羣集的所有流量,有的有良心一點會放兩快卡,一些大型企業實施的時候會把管理,VM,心跳,存儲,四種分開,這似乎是國內大中型企業做羣集時候的網絡標配,土豪一點的會爲每種類型的網絡配置Teaming或者MPIO,多通道等技術


   按照微軟的最佳實踐來講,微軟建議切割五種羣集網絡,管理,VM,遷移,心跳,存儲,微軟將遷移流量也建議單獨隔離出來,實際上我是理解微軟這種考慮的,我猜想微軟總部這樣考慮,也許是考慮到大型場景下,可能是一個私有云,或者託管很多虛擬機的虛擬化架構,可能會頻繁進行大規模遷移的場景下,同時VM也面臨着業務上面的大併發訪問,這時候可能一組網絡難以支撐,會導致某些場景下的性能下降,但其實根據老王的觀察,目前國內使用Hyper-V的企業很少會達到微軟這種場景的設想,通常情況下一組LACP teaming 20GB的流量怎麼也hold住VM訪問+遷移流量了,因此國內很少看到單獨獨立出遷移網絡的羣集架構


  所以國內用戶可能比較常見的就是這種,管理,VM+遷移,心跳,存儲的架構,有的公司可能一組LACP teaming 直接把管理,VM,遷移三种放在一起,然後,心跳,存儲,一共三個羣集網絡,這也是一種國內常見的羣集網絡架構。


  這裏老王想格外與大家進行探討的是裏面“心跳” 這種羣集網絡,國內對於這種類型的羣集網絡通常都叫它心跳網絡,似乎這個網絡只是用做心跳檢測,其實並不是這樣,嚴格來講,這種類型的網絡應該叫做羣集通信網絡,國外也有人叫它CSV網絡。


   羣集通信網絡其實承擔着3種功能的流量,在2012之後開始發生了一些變化

wKiom1loOIbhRSwVAAFXW8xQHwg705.jpg

   1.運行狀況檢測網絡,羣集大家都知道,所有節點需要訪問同一個共享存儲,在羣集創建羣集角色或羣集功能,角色產生的數據會存在共享存儲,然後羣集之間會做運行狀況檢測,爲什麼要做這個檢測呢,就是爲了知道其它節點現在活不活着,例如羣集當前兩個節點,他們每隔一秒都會通過3343端口和對方執行一次實際的握手檢測,每次發送一個134 byte的包,除了確認對方在線,對方也會確認你在線,雙方確認完成一次檢測結束,當檢測達到一定閾值,例如默認情況下同一子網內每隔一秒全網檢測一次,如果一個節點五次檢測均沒有迴應則視爲該節點下線,羣集其它節點會檢查自身羣集註冊表查看該節點承擔角色功能,然後進行遷移出來,跨子網默認也是每隔一秒全網檢測一次,五次失效視爲該節點下線。如果羣集節點啓用了Hyper-v角色,默認本地子網每隔一秒全網檢測一次,十次失效視爲該節點下線,跨子網每隔一秒全網檢測一次,二十次次失效視爲該節點下線。在2016裏面新增了跨站點的檢測模式,如果檢測到羣集設置了站點,則當跨站點,跨子網或不跨子網的情況下,跨站點的檢測策略會優於跨子網的檢測模式執行。


   如上所述,運行狀況檢測網絡是羣集裏面很重要的內容,通過檢測結果來確認一個節點是否存活,因此對於該網絡的質量要求極高,可以帶寬不高,但一定要確保質量,確保不會被其它流量干擾,確保不會出現丟包,否則如果出現丟包或者流量干擾的情況就會導致羣集的運行狀況檢測失去準確性,本身存活的節點卻因爲檢測不準確而被下線。

    因此,老王建議,做羣集,至少至少應該分爲兩種網絡,一塊承擔管理VM遷移存儲等流量,一塊用於承擔羣集通信網絡的流量,請注意這種運行狀況檢測是羣集內的一個全網檢測,每個節點發送檢測時會發給所有節點,確保羣集每個節點與節點之間都能夠知道對方的狀態。



 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

   wKioL1loNkXgckTfAAEDnA0MeUU753.jpg-wh_50

  

  文章到這裏,還和我們傳統的羣集沒什麼兩樣,接下來重頭戲來了,一直在說的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

wKiom1loNl2BYU27AAEg-6URpIo007.jpg

#設置虛擬交換機默認流最小帶寬權重爲20,默認情況下虛擬網絡適配器發送的任何流量連接到這個虛擬交換機,並且沒有分配的最小帶寬將被過濾到這個桶中,即默認如果沒有匹配上其它最小帶寬權重的流量至多使用默認總帶寬百分之20權重的帶寬

Set-VMSwitch "vSwitch" -DefaultFlowMinimumBandwidthWeight 20

wKiom1loNmrTbGeJAABcwr52vzU683.jpg

#基於單個虛擬交換機創建出mgmt,clus,vm三個虛擬網絡適配器

Add-VMNetworkAdapter -ManagementOS -Name "Mgmt" -SwitchName  "vSwitch"

Add-VMNetworkAdapter -ManagementOS -Name "Clus" -SwitchName  "vSwitch"

Add-VMNetworkAdapter -ManagementOS -Name "VM"   -SwitchName  "vSwitch"

wKiom1loNoeACpI4AADx4IH7dJY516.jpg

#設置每個虛擬網絡適配器至多可以使用總帶寬的權重,其中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

wKioL1loNpjhto4RAAD9vBnN_XM756.jpg

#在設置所有虛擬網卡權重的時候後面可以添加 -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”

wKioL1loNq3CIRqyAAJti8mn3DE247.jpg

#確保網卡順序如下,Mgmt作爲首要出站網絡DNS訪問解析

wKioL1loN47yBfXDAAHteKrOkTY728.jpg


HV02配置同上,不再贅述,配置完成後和HV01一樣,可以看到基於兩塊網卡組成的teaming建立出來的三塊虛擬網卡以及兩塊ISCSI網卡

wKiom1loNsLCeNUBAAKRRAMIwZU765.jpg


     到這裏大家是不是感覺很奇妙,其實最初老王猜想這會是和vmware端口組一樣的技術那就酷了,虛擬機接到端口組,每個端口組可以用不同的網卡,還可以做故障轉移容錯,VLAN ID,QOS的設置,微軟這個,除了每塊虛擬網絡適配器不能做故障轉移其它也都差不多嘛,但當做出來後實際看還是有點區別,vmware esxi上面的端口組做完之後,虛擬機直接就可以接入到端口組中,相對來說效果更加直觀,便於理解

    而微軟的這種融合網絡創建出來的虛擬網絡適配器,在單臺機器上幾乎看不到什麼特別的效果,因爲虛擬機還是接到vswitch這個虛擬交換機,但是遷移流量走那塊卡,並不知道,單臺機器看不出什麼,我們只能看到,阿,我們可以基於兩塊網卡做成teaming,然後做出虛擬交換機,基於這個虛擬交換機我們又做出了多塊虛擬網絡適配器,每個虛擬網絡適配器可以配置單獨的QOS,IP,VLAN ,但是具體怎麼切割網絡流量的,到底用途在哪裏,我們到現在爲止還看不到顯著的效果,網上很多文章都是做到這裏就停了,搞得老王也是一頭霧水,單臺機器上面做這樣的架構其實在我看來意義並不大,只是好看而已,做出來了之後實際上做出來了之後單機上面並不會分割流量,除非配合VLAN,host文件等設定。

    因此,我們來到羣集裏面就可以看得清楚了,具體羣集怎麼搭建的步驟,老王這裏不做解釋,相信大家都會的,在羣集中我們可以看到添加進來的五個網絡

wKiom1loNtbz49Z9AAEX74_cvjI355.jpg

   經過調整之後如下圖所示,這下子五塊網卡就各盡啓用了,CLU網卡首要用於羣集通信,完成運行狀況檢測,羣集數據庫更新,CSV元數據更新,一旦CLU網卡不可用,羣集會自動路由至其它mgmt或vm卡承擔羣集通信流量,ISCSI01 ISCSI02兩塊網卡爲MPIO網絡,不參與羣集通信流量,管理流量,訪問流量,設置VM網卡爲實時遷移時使用網卡,實際上微軟建議我們可以在這裏設置多塊,例如設置VM和MGMT,VM網絡出現故障,還可以使用MGMT完成遷移,或者我們也可以通過powershell,羣集會根據度量值和優先值選擇排名第二位的網絡用於實時遷移,或我們可以添加多個網絡,設置兩個網絡接近的度量值,這樣實時遷移就會在兩塊卡直接負載均衡。

wKiom1loNuiQtDVbAADqsmWrgrA112.jpg

wKioL1loNumhZ7MPAAHQDh35Vhg724.jpg

wKiom1loNunwUsK5AADeqHUVgFw029.jpg

   文章進行到這裏已經接近尾聲了,回想一下我們做了什麼呢,我們底層使用了兩張卡做成的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

----------------------------------------------------------------------------



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章