NSX高階路由架構

IT大咖說發表於2019-02-28

內容來源:2018 年 10 月 24 日,VMware高階講師寇雪旭在“VMware技術專題分享”進行《NSX高階路由架構》演講分享。IT 大咖說作為獨家視訊合作方,經主辦方和講者審閱授權釋出。

閱讀字數:12502 | 32分鐘閱讀

觀看嘉賓完整演講視訊及PPT,請點選:t.cn/EAYi9ul

NSX高階路由架構

摘要

本次主題,第一個單元我們會跟大家簡要的去介紹一下傳統資料中心路由架構面臨的挑戰。第二個小節是NSX的路由元件。第三個小節是NSX的邏輯路由,涉及到等價多路徑及HA。

傳統資料中心路由架構面臨的挑戰

首先請大家來看一下我們今晚的第一個話題,在傳統資料中心當中路由架構面臨的挑戰。其實我們在座的很多朋友包括我在內,以前都是從事物理的資料中心架構設計。

隨著虛擬化的發展,當前的軟體定義資料中心,虛機的閘道器成為一個非常重要的設計架構。傳統物理的資料中心當中,虛擬機器的閘道器通常是指向到我們的物理的路由器或者說三層交換機。

NSX高階路由架構

上圖是資料中心的路由位置進化史。最早的時候,應該是圖中左側的這張圖,可以看到物理資料中心當中有很多的ESXI,ESXI內部執行了使用者的虛機。傳統情況下ESXI的內部可以建立VDS,就是我們所說的分散式虛擬交換機, 或者VSS(虛擬標準交換機),在沒有NSX介入的情況下,VDS包括VSS上面都可以建立基於虛擬機器的VLAN的埠組。

虛擬機器的閘道器是指向外圍的路由器上面,所以一旦我們需要跨VLAN的來進行通訊,即便兩個虛機是在同一個Hypervisor內部流量也會勢必的形成髮卡。再可以看一下中間的這張圖,其實不管是vmware的NSX,還是一些其他廠家,都應該有虛擬機器版的路由器,虛擬機器版的路由器仍然會產生髮卡的流量。

最右側這張圖應該是NSX非常核心的一個功能,它通過部署一個控制平面的元件,可以把路由閘道器分散式架構的能力部署到多個ESXI內部,在ESXI的Kernel中生成一致的分散式網路。

假設右側圖中的這臺ESXI核心當中是有一個軟體的分散式邏輯路由核心,這時虛機的閘道器只要各自的指向到分散式邏輯路由左側和右側的埠,兩個不同網段的虛機就直接可以在核心當中完成高速轉發。

當然這種東西向的三層轉發並不僅僅只限於同一個Hypervisor內部,即便虛擬機器跨了不同的Hypervisor,藉助這個一致的分散式邏輯路由閘道器仍然能夠完成高效的三層通訊。

NSX高階路由架構

關於傳統物理資料中心當中的髮卡的問題,上面這張圖應該畫得非常清晰。圖中這兩個虛擬機器,它們是在同一個主機內部,

但是卻屬於不同的VLAN。由於虛機的閘道器是我們的路由器,所以通訊過程中會形成髮卡。

那大家可以想象一下,在實際場景當中, Hypervisor的數量是非常多的,而且每個Hypervisor內部虛擬機器的數量也應該是非常多的。

這些東西方向的流量,頻繁要藉助物理網路來轉發,效率勢必會不好。如果藉助高效的基於Hypervisor核心的分散式邏輯路由元件進行虛機之間的通訊,效果會好很多,

而且這種一致性的分散式三層路由的閘道器架構,還有一個巨大的好處。從虛機的角度來講,它的預設閘道器指向分散式邏輯路由器介面的地址,虛機如果發生故障轉移的時候,虛機的閘道器不會有任何變化,因為在新的vShpere主機內部,仍然是有一致的分散式邏輯路由,從閘道器的IP到介面的MAC地址都沒有任何的變化。

這種模式同樣適用於vMotion,如果我們對虛擬機器進行叢集之間做遷移,由於分散式閘道器的存在,無論虛機vMotion到哪臺主機,三層閘道器仍然不會有任何變化。

再次宣告一下發卡的問題。大家可以看到我們上面的圖,如果兩個虛機在沒有NSX分散式邏輯路由介入的情況下,分別處於不同的ESXI主機,他們之間的三層轉發仍然是要經過我們物理路由器髮卡的流量。

如果左側ESXI主機上的一個虛擬機器要和右側ESXI主機上的一個虛擬機器,在不同的網段當中通訊,藉助分散式邏輯路由,即便我們的櫃頂交換機是二層交換機,也無所謂,只要能夠保證這兩個主機的VTEP的可達,資訊就可以藉助分散式邏輯路由,直接來完成轉發。

NSX高階路由架構

上面這張圖,其實是通過NSX的軟體平臺,部署了一個叫邊界服務閘道器虛擬機器。

大家都知道ESG主要是完成南北方向的路由轉發,把它部署的這個位置,其實只是想探討一下虛機版路由器髮卡的問題。

當然了我們東西向的路由轉發,像圖當中所示,5001 VXLAN、VXLAN 5002兩個不同的虛擬機器,建議還是通過分散式邏輯路由,直接完成基於Hypervisor核心的高速轉發。

假設在當前的展示系統的左右這兩個Esxi核心中,並沒有去部署分散式邏輯路由,而是部署了一個邊界服務閘道器的虛擬機器,此時ESG並不會跟左側的兩個虛擬機器在同一個Hypervisor內部。

資訊如果到了右側的ESG,可以做一個常規路由。在這種架構當中,ESG根本無需配置任何路由協議,就可以把報文路由到介面,但這個資訊並不能直接發給虛擬機器,會被我們右側主機的VTEP通過VxLan再次封裝發到我們的左側。左側Hypervisor的VTEP接收到這個報文以後,將VXLAN的外部報頭頭去掉,內部的資訊直接丟給這個虛擬機器。

所以大家可以看到,雖然說在沒有部署分散式邏輯路由的情況下,NSX的另外一個元件,ESG也能夠完成東西向路由轉發的功能,但是這個並不是我們推薦的分散式報文轉發方式。

NSX路由元件

NSX高階路由架構

首先看一下當前的這張圖,圖中藍色的圖示叫分散式邏輯路由器。NSX的軟體平臺能夠支援兩種路由的子系統,一個是分散式邏輯路由,第二個是邊界服務閘道器。

我們首先來觀察一下分散式邏輯路由,它能夠完成資料中心當中東西向的高速三層路由轉發,可以在邏輯空間當中完成路由。這個邏輯空間指的就是我們的NSX的內部。

對於分散式邏輯路由來講,它除了基礎的像靜態路由以外,大家還可根據情況去配置動態路由。但需要我們注意的是,動態路由並不是在分散式邏輯路由的核心當中啟動的,而是在分散式邏輯路由的控制平面,就是後面我們要說到的分散式邏輯路由控制虛機上來啟動

分散式邏輯路由控制虛擬機器,可以通過比較複雜的方式,將路由資訊,通過NSX的另外一個元件去更新到每個ESXI核心當中的分散式邏輯路由轉發模組。

再看一下右側的這個物件,它被稱之為叫邊界服務閘道器,這個元件可以完成南北向的路由。它主要是用於資料中心當中的南北方向的路由轉發,能夠完成物理資料中心到NSX軟體定義資料中心之間的路由報文轉發,起到一個承上啟下的作用。

NSX高階路由架構

請看上圖。物理網路的基礎架構是灰色的框,在物理網路的資料中心中可能會啟動OSPF甚至BGP,所以NSX的路由體系在最終接入到物理網當中的時候,我們都要考慮一下整體路由協議策略的問題。

從NSX的角度來講,它的路由體系就應該包含藍色的第一個框,叫做邏輯的供應商級別的路由,屬於ESG上的路由。第二個藍色框是邏輯的租戶級別路由,屬於DLR級別路由。

NSX高階路由架構

那從當前的這個圖當中可以看到,中間灰色線是一個分水嶺,左側是分散式邏輯路由,從NSX角度來講,它的管理平面是NSX管理器。它的控制平面是圖中所示的元件,其實體以虛機的方式呈現,我們稱之為叫分散式邏輯路由控制虛擬機器。

分散式邏輯路由控制虛擬機器的源程式其實就是大家所熟知的OVF格式的檔案,在NSX Manager 磁碟中。NFX Manager通過註冊到VC的API,可以把OVF格式的DLR控制虛擬機器部署到VCenter Server叢集中預置的主機上。

通常可能我們在網路架構設計的時候會單獨設計一個叢集用於承載DLR控制虛機以及ESG。

需要注意的是DLR控制虛機只是我們的分散式邏輯路由的控制平面,大家可以認為它是DLR介面包括路由的一個配置入口點,它自己保持這些資訊,其實並不做真的報文轉發,真正的資料平面的報文轉發,仍然是由資料轉發平面當中的DLR的Kernel來實現。這個Kernel是叫一個DLR的核心模組。

在做NSX主機準備的時候,NSX管理器會將一組VIB推送到VCenter server,由VCenter server安裝到目標的ESX的主機內部。

如果VIB安裝成功,在目標的ESX的核心當中會生成很多NSX的核心模組,當中就包含了我們的分散式邏輯路由轉發模組。

這個模組的名字在文件中也稱之為叫VDR-B,VDR的全稱就是虛擬的分散式路由,減號B的含義是VDR的核心可以完成橋接的功能。

左側圖的裝置就是在ESXI核心中的VDR-B的軟體模組,我們可以在軟體允許的上限之內靈活的配置LIF口。

圖中左右兩側埠都連線了一個邏輯交換機,虛機的閘道器分別指向到LIF1和LIF2,這樣就可以完成高速的三條轉發。

NSX高階路由架構

這張圖應該在官方的安裝配置手冊當中出現的頻率非常高。一般意義來講,這是一張邏輯轉發圖。

分散式邏輯路由是深藍色的模組,連線了我們內網的虛擬機器。從內網的角度來看,它設定了三個LIF口,每個LIF口分別作為web、APP、db的三層閘道器。

從web到APP或到db,在沒有防火牆阻隔的情況下,虛機直接就可以通過我們的路由模組來完成高速的三種轉發。

當然了這三個不同部門的虛擬機器,有可能是在同一個Hypervisor內部。因為Hypervisor核心當中的DLR的kernel直連了這三個網段,所以報文轉發沒有任何的髮卡,直接就可以在核心當中高效的完成。

從動態路由的角度來講分散式邏輯路由控制虛擬機器,是能夠支撐IGP的,也就是大家熟知的OSPF協議是OK的。

如果有研究NSX的BGP的配置的話朋友,可能會知道在ESG包括DLR的控制虛機上,其實是可以設定BGP的基礎引數。

需要我們注意的是ESG跟我們的物理網路,可以考慮使用OSPF或BGP。在NSX國內落地的專案當中比較多的應該是使用我們的內部閘道器路由協議。

NSX高階路由架構

以上是DLR的一些簡要屬性。分散式邏輯路由的控制平面是一個裝置,名字叫DLR-C-VM。它的資料轉發平面叫DLR的核心,也稱之為叫VDR的kernel。

藉助分散式邏輯路由,Hypervisor可以完成高效能低延遲的第一跳路由轉發,而且它可以近乎線性的隨著主機的數量增加而增長。

如果兩臺ESXI內部的虛機之間的通訊是在同一個Hypervisor上,那在主機核心內部就可以完成轉發。如果在兩個不同的ESXI主機上,報文轉發會牽扯到當前這兩臺主機的DLR的核心,但是不會牽扯到第三臺ESXI主機,所以這個轉發速度是非常理想的。

分散式邏輯路由還能夠支援八條等價多路徑。每個ESXI主機建立的分散式邏輯路由最多可以有一千個分散式邏輯路由的例項。

NSX高階路由架構

如何理解一千個分散式邏輯路由的例項呢?在雲環境中經常需要租戶有一整套的SDN的財產,比如軟體的邏輯交換機,租戶專用的路由模組,甚至一些VPN、防火牆之類元件。

以當前這張多租戶的路由拓撲為例。在NSX系統內部假設有兩個租戶,租戶A有一個分散式邏輯路由介面分別連線了三個不同的網段。而另一個租戶B想要有一個自己專用的分散式邏輯路由。

而從基礎架構的角度來講,NSX可以在一個ESXI主機內部部署多個分散式邏輯路由模組,來滿足在同一個Hypervisor內部多租戶的需求,就相當於在一個ESXI內部可能會有多個租戶的元件。

NSX高階路由架構

上面這張圖就清晰的描述了前面提到的觀點,前面理論當中的觀點是每個ESXI極限情況下可以建立將近一千個的分散式邏輯路由。注意,這是核心當中的元件,並不是虛擬機器。

圖中左邊ESXI主機中黃色的圖示代表,ESXI的分散式邏輯路由核心,這個核心也稱之為叫VDR核心。

當前的ESXI內部有兩個分散式邏輯路模組,那左邊的這個租戶的分散式邏輯路由A有兩個介面,一個是藍色的,一個是紅色的。可以看到租戶A的兩個虛機之間的通訊可以通過它核心當中的分散式邏輯路由A完成。

在同一個Hypervisor當中還有一個虛擬機器VM4,它顯然是屬於另外一個租戶的。它所連的VXLAN是這個綠色的這條,顯然連線到了另外的一個分散式邏輯路由下面。

那租戶之間的隔離呢不單是可以解決地址重疊的問題,而且從路由架構的角度來講,也可以變得更加的清晰。

NSX高階路由架構

DLR instances是核心當中的資料平面的元件,核心的控制平面的元件是DLR控制虛擬機器,核心當中的這資料轉發平面的元件可以建立許多的LIF口。

每個LIF口可以作為虛機所在VXLAN的閘道器,LIF口的ip可以根據情況規劃,極限情況下,分散式邏輯路由的一個例項可以建立將近一千個左右的LIF口。

其實在生產環境當中,未必能夠使用到如此之多的LIF口,但它的彈性還是給大家保留了未來擴充套件的空間。

雖然理論上每個ESXI核心當中,可以建立將近一千個左右的DLR instances,每個DLR的例項又可以有將近一千個左右的LIF口,但每個主機內部的LIF口並沒有到1000×1000。實際上是有另外一種限制,就是在每個主機內部,DLR LIF口的數量也不能超過1萬個。

另外我們北向的ESG是一個虛擬機器,它的原始檔其實也是在NSX Manager中。需要注意的是這個ESG的虛機,在通過NSX Manager部署的時候,圖形介面允許大家選擇四種不同的尺寸。

因為ESG本身是一個VM,如果選擇最小的尺寸,那麼部署完畢之後,只有一個CPU,記憶體是512兆。最大尺寸下CPU預設有6個,記憶體是8G。所以建議在一些極小的環境,包括POC的環境中部署ESG的時候,為了降低資源消耗,使用最低尺寸,但是在生產環境當中,我們還是建議選擇大一點的ESG尺寸,這樣的話大家可以獲得一個較佳的吞吐量。

ESG還可以完成我們內部的分散式邏輯路由到外部的物理裝置之間的轉發,這是因為ESG是一個虛擬機器,從vSphere的觀點上來看,虛機最多有十張網路卡,也稱之為叫vNIC。

理論來講,每一個vNIC可以連線一個埠組,如果是跟內網通訊,應該連線基於vLAN的埠組,如果跟外網通訊,我們要連線VXLAN埠組。

那除了我們肉眼可見的十個埠以外,大家如果去編輯ESG的某個介面的話,在介面型別當中還可以選擇上聯或者說內聯的口。另外還有一種特殊型別的埠,叫主幹埠,這個埠上不能配置任何的ip地址,取而代之的,大家可以在這個主幹型別的埠上劃分多個子介面,有點類似於我們物理網路當中那個單臂路由的概念。子介面的數量有一個比較硬性的限制,整個ESG最多隻能夠建立200個子介面。相對的ESG也可以挑選最多八條相等價值的路徑放在路由表當中。

NSX高階路由架構

上圖是一個標準的檢視,分散式邏輯路由有三個LIF口,作為APP包括web這兩個虛機的對應的閘道器。分散式邏輯路由除了能夠完成東西向的路由轉發以外,它的北向的介面通過VXLAN能夠直接達到ESG的internal埠。ESG通過外網口應該接入了VDS上基於VLAN的埠組。

我們的物理網路不用感知VXLAN的存在,物理網路當中的節點要跟內部的虛機通訊,其實就是VLAN先進來到達ESG,然後ESG將它路由到我們的分散式邏輯路由,由分散式邏輯路由找到內部的虛擬機器。

NSX高階路由架構

這張圖就有些深度了,它闡述了分散式邏輯路由建立的過程。左下角這個圖示代表的是NSX管理器,由它去發API建立分散式邏輯路由,配置引數由我們的NSX Manager儲存。

大家應該記得分散式邏輯路由兩個平面的組成,其中一個平面是分散式邏輯路由控制虛機。圖中2號綠線表示的就是NSX Manager通過API要求在某一個ESXI上面建立一個分散式邏輯路由控制虛擬機器。實質上是通過VC完成,這是第二步。

前面提到過NSX Manager 跟每個主機的就是訊息匯流排之間是有連線的。所以你會看到編號3那條線的NSX Manager 會通過訊息元件,要求ESXI在DLR核心中建立出DLR instances。

編號5這條線通過CP元件建立LIF口的資訊。雖然DLR的控制虛機能夠儲存分散式邏輯路由的LIF口的資訊,但DLR控制虛機顯然不能作為虛機端到端轉發的一個資料平面,所以要把LIF口的資訊。以及路由的資訊傳導到ESXI核心當中的分散式邏輯路由模組當中。

編號6這條線NSX Manager也會把LIF口的資訊推送到master的控制器。DLR控制虛機如果從北向的ESG接收到了路由,那麼這個路由會通過DLR控制虛機跟控制器之間的通道,被重新整理到NSX的控制器中。

由NSX控制器跟每個主機的TCP 1234(兩個橙色的線路)把介面包括路由資訊重新整理或同步到每個主機的核心當中。

NSX高階路由架構

上圖也是在三方手冊中常見的。NSX Manager建立了分散式邏輯路由控制區機包括NSX控制器。控制器通過tcp的1234能夠跟每個ESXI的NETCPA建立通訊,未來控制器也要把路由更新到主機內部。

我們可以看到ESG北向是跟物理網路建立通訊,與內部的DLR控制虛機之間也能夠建立動態路由直接關係的。

所以大家可以看下3的位置,我們在部署分散式邏輯路由控制虛機的過程當中,部署完畢後可能後期要配動態路由,無論是OSPF還是BGP都要給這個DLR控制虛機建立一個叫協議地址的引數。這個地址其實就是我們圖中的192.168.10.3,它用於跟我們北向的ESP建立路由的這種關係。

如果ESG把動態路由傳導到DLR控制虛擬機器,路由就會被髮到NSX控制器,由NSX控制器將它重新整理到每個主機核心當中的分散式邏輯路由模組當中,圖中的4就是控制虛機把路由推送到控制器,5是控制器把路由重新整理的這個主機核心當中的分散式邏輯路由,6在做南北向轉發的時候,仍然是由我們資料平面的DLR到ESG再到Web。

NSX高階路由架構

上圖中NSX Manager是DLR Controll VM的管理平面,給DLR建立路由或者靜態的任務都要通過NSX Manager完成。

NSX Manager針對DLR控制虛機的路由引數的更改,會傳導到DLR控制的虛機。

假如管理器給DLR控制虛機重新配了一種動態路由,動態路由和DLR控制虛機以及ESG之間就會建立了連線關係,由於 ESG跟我們的物理路由器建立了連線關係,物理網路當中的路由表藉助ESG可以傳到DLR控制虛機,DLR控制虛機會把收到的路由沿著跟控制器之間的鏈路傳送到NSX控制器中。

另外NSX控制器收到路由後,會把路由通過tcp的1234重新整理到每個主機核心當中的分散式邏輯路由,完成更新。

NSX高階路由架構

從邏輯的角度來講,紅色網端內部的虛機要跟綠色網路內部的相互通訊,沒有必要藉助ESG,直接通過Hypervisor核心當中的分散式邏輯路由,即可完成高效的三層轉發。但這其實是一個邏輯檢視,從Physical的角度來講,VM1要通訊的物件VM3很有可能是在另外的一個主機上。

此時進行通訊,本質上是由最左側機架當中的主機通過分散式邏輯路由模組,並經過VTEP的封裝發到我們接收端虛機所在的ESXI,由ESXI的VTEP解封裝,跳過接收端的分散式邏輯路由,直接丟到接收端的虛擬機器。

看似簡單的一個分散式邏輯路由轉發,真正在物理網路當中是要穿過物理網路。前提是這兩個虛機不在同一個Hypervisor,也不在一個主機內部。

如果在同一個Hypervisor就不用出核心,如果在同一個機架內部,連櫃頂交換機都不會出,直接在交換機的埠之間完成轉發。

NSX高階路由架構

我們可以配置很多租戶,租戶甚至可以有自己專用的ESG,配置一個我們物理網路當中非常普遍的協議,公有地址到私有地址轉換。

這樣的話公網裝置就無需去接收使用者內部私有網路路由,直接通過公網地址就可以訪問到租戶的內部。

NSX邏輯路由的ECMP與HA

ECMP可以類比傳統物理路由,傳統路由的原點路由器到達目標的路徑中間有多條價值相等開銷的路由,從源到目標的報文轉發,可以按照負載均衡來把流量均衡到不同的物理鏈路中。所以ECMP的功能可以被GSG,及分散式邏輯路由來實現。

NSX高階路由架構

不管是分散式邏輯路由還是ESG都具備最大八條等價多路徑的路由能力。圖中藍色塊代表分散式邏輯路由,它在去往物理資料中心的途中,中間會可能經過Edge 1到Edge 8,這就叫做等價多路徑。

ESG雖然是一個虛擬機器,但是它應該被管理員有目的去放置到不同的Hypervisor,這樣的話南北向的流量就可以經由不同節點的ESXI來向外轉發。

所以DLR到達ESG之間是由ECMP存在的,ECMP的功能在DLR的控制平面上是可以開啟或關閉的。當要啟動ECMP的時候,請務必開啟DLR控制虛機上的等價多路徑的功能。

另外ESG它作為南北向的一箇中轉節點,到達物理網路,很可能也是有多條相等開銷路徑。所以這個等價多路徑理論也適用於ESG,等價多路徑主要是為了提高南北向通訊的可用頻寬,而且也可以在ESG萬一發生故障的時候,減少當機時間。

從負載均衡的角度來講,如果ESG到外網有多條相等開銷路由的話,那麼它內部實際上是有一個演算法來完成報文的等價多路徑

分散式邏輯路由器上,如果到達外網有多條路由的話,它其實也有一個關於等價多路徑的演算法,叫源IP與目標IP雜湊。

如果web當中有兩個虛擬機器A、B訪問的物理網路是同一個物件,那很有可能是因為等價多路徑,A被DLR雜湊把流量發到E1去訪問到外部,B通過E2訪問外部,由此實現出口方向的路由的負載均衡。

當然入口方向不是NSX說了算。通過核心網路返回到內部的虛擬機器,由於第一跳是物理路由器,物理路由器會使用它內部的等價多路徑演算法來考慮報文是從哪一個ESG進入到NSX的系統,這個時候很可能會產生等價多路徑導致的非對稱路徑路由。

NSX高階路由架構

上圖是物理網路當中的一個0區,圖中上方3個灰色的東西是物理路由器,屬於OSPF的骨幹區域。

這種情況下,比較建議使用物理網路的路由器作為OSPF的區域邊界路由器ABR。圖中E1和E2是ESG,ESG會與更下方的DLR控制虛擬機器建立OSPF的鄰接關係。

將物理路由器作為邊界路由器有很多的優點。舉個很簡單的例子,以前在使用OSPF的時候,我們可能經常會把一個區域的路由通過彙總的方式發到另外一個區域。而這個功能ESG上是不支援的,在當前那個架構當中物理的ABR為了降低對NSX內部系統的開銷,會在區域邊界路由器上做一個區域的路由彙總,來減少ESG包括DLR控制虛機的OSPF骨幹的路由表,來提高穩定性。

NSX高階路由架構

再來看下故障倒換,因為等價多路徑的問題,DLR到達北向是有多個ESG的,且跟ESG建立連線關係的並不是核心當中的分散式邏輯路由,而是DLR控制虛擬機器。

所以DLR控制虛機會通過OSPF的hello 包以及保持時間檢測到E1裝置故障

NSX內部OSPF的通訊時間,預設的hello包是十秒,保持間隔是40秒。但是等價多路徑的時候,這個時間過長可能會導致收斂變得緩慢,所以建議稍加調整一下。

按照OSPF的理論,DLR控制虛機的hello包保持時間降低後,ESG也要做相應地降低。

NSX高階路由架構

ESG、DLR以及外部物理路由器在做等價多路徑的時候,通過調整hello包的報文,可以有助於裝置發生故障以後,鏈路的快速收斂,這是VMware的一個建議。其實從物理網路的角度來講,物理的路由器跟ESG之間,如果想降低物理的路由器的hello包,那麼也要分別在ESG和物理路由器上將OSPF的通訊時間做一個統一調整。

但是要注意一個問題,即南向到北向的返回報文很可能沿著另外一個路徑回來。也就是進出走的是不同的ESG。ESG防火牆會話表不同步導致在返回方向上ESG流量被防火牆阻隔。

NSX高階路由架構

現在假設ESG沒有發生任何故障,DLR控制虛機有高可用,此時主DLR控制虛機發生了一個故障,會發生什麼樣的行為呢?

圖中綠色的線代表從內網發到外網的流量,橙色的線是代表從內外網進入到內網。如此可以看出當DLR控制虛擬機器發生意外故障的時候,南向到北向轉發仍然是正常的。但北向進入南下,可能會產生一些中斷的問題。

備份的DLR控制虛機啟動之前,DLR的CP平面發生了故障,但因為這是一個等價多路徑系統,OSPF的時間調整可能比較激進的。hello包的間隔是一秒,保持時間是三秒。這意味著在三秒鐘左右的時間過去以後,8個ESG都會認為DLR控制虛機是不存在的。

我們可以看到DLR內部有3個網段,這3個網段曾經通過DLR控制虛機發到了ESG。所以在ESG上會有三條路由,能夠到達DLR內部的網段,下一跳介面分別是DLR的上行口的地址。

但由於DLR控制虛機的損壞,三秒鐘之後,ESG會在鄰居列表中把DLR控制虛機去掉,並且將通過DLR控制虛機接收的所有路由全部丟棄。具體為逐條的把路由撤銷,反饋到我們的物理路由器。

此時核心網當中的裝置,再要去訪問我們內網的時候,第一跳會發到物理路由器,由於ESG已經撤銷了內網路由,所以在沒有類似浮動靜態路由支撐的基礎之上,北向到南向的轉發就會被丟棄了,因為他根本就沒有可用的路由。

為什麼南向到北向是建立的?這是因為DLR控制虛機在掛掉之前,曾經通過ESG接收了到達網際網路的路由。這個路由曾經通過控制器被重新整理到主機內部,雖然DLR控制虛機發生了故障,但是控制器將最早的來自於DLR控制虛機的那個網際網路路由,更新了主機內部。所以除非新的DLR控制虛機來重新整理,否則它會一直凝結在或者說叫凍結在ESXi的DLR核心中的。

DLR控制虛機損壞後,北向進南向如果提前能夠配置一個浮動靜態路由,物理裝置和ESG藉助這個浮動靜態路由也能夠把報文順利地轉發到內部。

從內網到外網的那條路由由於是被凍結在分散式邏輯路由器核心中,所以南向到北向轉發仍然是沒有任何問題的。

原來的內網路由消失後,靜態路由會浮動出現在路由表當中,而通過ESG所接收的外網的路由,由於在掛掉之前傳輸到了控制器,控制器又發到了主機的VDR的核心,所以它仍然是被凍結在Hypervisor的內部。ESXI在轉發的時候,北向仍然認為是有1到8個不同的等價多路徑的裝置。

NSX高階路由架構

其實不管是DLR控制虛擬機器還是ESG都可以去配置HA,這個HA指的是NSX系統內部的HA,並不是vSphere的HA。當然它可以和我們vSphere叢集當中的HA功能來進行聯動。

現在我們有兩個ESG,一個是active的,一個是standby的。它們之間要通過一個預設的心跳網路來同步心跳以及左右兩個裝置的配置引數。active上的配置引數會被直接通過心跳網路同步到standby的ESG。

在standby的裝置能夠接收active裝置心跳的時候,會一直是處於靜默狀態,不會對外對內響應任何的報文。當active的裝置發生故障,standby的裝置會在15秒鐘左右做出響應。這個時間是心跳的最大的中斷時間,可以通過圖形介面來調整,最低可以降到六秒(NSX6.2)。

所以大家可以把這個時間呢調得更加激進一些。這個時間如果調整以後,standby裝置做出故障響應的感知就會更加的敏感。

Active的裝置發生了一個故障後,standby的裝置就會對外提供服務,當那個保持時間到了以後,它就會變成新的Active裝置。

這個裝置對外對內來說,地址都是一模一樣的。可能在早期的NSX的版本中故障倒換官方說是要大概一分鐘左右,實際我們測試大概花了將近三四十秒左右的中斷時間。

如果在NSX 6.4的中,要把中斷的敏感保持時間降得低一些,從Ping的角度來講,最多就是能丟一個包左右。所以VMware的官方說法是在十秒鐘之內可以完成Standby到Active的故障倒換。

不過現在的技術還不能夠類似物理網路,實現主備引擎之間完成亞秒級切換。

另外DLR控制虛機我們也建議配置主輔。當然從我們高可用的角度來講,主輔的DLR控制虛機和ESG應該分配到不同的Hypervisor的主機上,以免主機掛掉形成一個單點故障的損壞。

NSX高階路由架構

在當前的這個案例中,DLR北向有兩個綠色的裝置,Edge-1和Edge-2,與ECMP不同的是它們是active和standby架構,這意味著它倆之間實際上有一個心跳,它會實時的去把來自於E1的心跳訊號,包括裝置的配置引數同步過來。

正常情況下,DLR的內部看不到E2這個裝置,它只會認為南向到北向下一跳就是左側的E1。

如果E1發生了一個不可逆的故障,在中斷時間超時以後,E2會變成新的active的裝置,E1內外網的介面IP、配置的路由,甚至連防火牆的規則和連線跟蹤會話表都可以被同步捕捉到E2裝置。E2裝置對外工作以後,路由轉發會平滑的切換到右側,所以在做HA的時候是可以開啟ESG的這個狀態防火牆的。

要注意的是萬一E1跟E2之間的心跳網路中斷,很有可能會產生一個腦裂的行為。就是有兩個一模一樣的ESG對內對外來提供工作,但由於他倆的ip是完全一樣,很有可能會導致網路IP出現衝突。

雖然說我們沒有通過儲存端去控制ESG腦裂的技術,但是在NSX 6.4的管理平面當中設計了一個腦裂檢測的機制。

因為畢竟這兩個ESG的管理平面都是NSX Manager。NSX Manager發現原本處於active和standby的這兩個裝置突然變成了AA的狀態後,就會意識到發生一個腦裂的行為。

此時NSX Manager會發指令給原本處在active狀態下的E2裝置讓迴歸到standby的狀態,這樣的話腦裂的現象就消失了。

在NSX早期的版本中腦裂出現後是需要管理員手工關掉某一個ESG來消除腦裂的影響。

由於ESG的HA跟vSphere的HA完全相容,所以我們建議把ESG部署到vSphere的叢集當中。這樣的好處就是萬一我們的ESG所在主機發生了故障,可能幾秒或十幾秒鐘之後,standby的裝置先會變成active裝置,與此同時vSphere會檢測到這臺主機上一個虛擬機器掛掉了。

vSphere HA級群當中的另外一個主機會在共享儲存當中,把這個ESG的虛擬機器重啟,當它重啟完畢以後,這臺虛機跟原來的E2仍然是保持是高可用的。

但是ESG並沒有搶佔優先引數,所以這個新的ESG(E1)仍然是處在standby狀態,E2處在active的狀態。

從這一點來看,ESG的HA可以非常完美的與vSphere HA聯動使用,同時配置,互相之間是一個完美的結合,並不會出現彼此影響問題。

當acvtive的ESG所在的主機突然掛掉後,active的角色會由standby的ESG扮演,這個跟vSphere HA無關,是ESG內部的心跳來感知的。

有問題可以在評論區討論,以上為所有分享內容,謝謝大家!

相關文章