作者: Colin Jao 饒康立 – VMware資深技術顧問,主要負責VMware NSX產品線,目前致力於網路虛擬化、分散式安全防護技術與SD-WAN方案的介紹與推廣。

以前NSX for vSphere在功能上為人批評的一點是,雖然我們可以提供各種資料中心內的網路及上層服務,隨需提供不用額外成本,但與實體設備來說,一個很大的弱點在於硬體或線路失效時的高可用度。在NSX for vSphere上,通常在Edge端的各項服務,在Edge失效時的恢復時間大概是

  • 路由協定:如果是ECMP,依據BGP or OSPF的hello / dead timer設定,通常約3~10秒。如果是Active-Standby…30~60秒
  • Edge南北向防火牆:30~60秒
  • 負載平衡器:30~60秒
  • NAT…其他服務:30~60秒…
一般測試或是非核心業務,這樣的失效回復時間可能尚可討論,但如果在核心業務上,這當然就不能接受了。客戶的聲音,VMware當然有聽到,因此NSX-T在設計時,這邊是個重點要改善的部分。
直接先講結論:在NSX-T內的路由及上層服務,如果在Edge VM或是Edge實體設備失效時,
  • 路由協定:如果與實體環境的接口採用的是Edge VM,失效收斂時間可以低至三秒。而採用是Bare-Metal Edge的話,收斂時間可以僅一秒。這邊的收斂時間無論T0路由器是配置為Active-Active (ECMP) 或是Active-Standby均可達成
  • 各種上層服務如NAT / Load Balancer:實測結果,ping封包掉一個後就切換完成,服務持續提供。

NSX-T的這些路由與上層服務的快速HA切換是如何達成的呢?首先請大家回憶一下,我們這邊談到的需求服務,無論是對實體環境的連接,或是各種Stateful的防火牆 / Load-Balancer / NAT等等,都是在Service Router上面運作,而Service Router僅會存在於Edge TN上。因此,當我們建立了T0或是T1路由器,並且在這些邏輯路由器上面啟用上層服務時,每個邏輯路由器位於不同台Edge上的Service Router之間,就會進行同步機制。

下圖內,當用戶建立了一台T0路由器,並且配置了兩個uplink在Edge Node 1及Edge Node 2上。此時這台T0路由器的SR構件便產出於這兩個Edge Node上。若建立邏輯路由器時選定High Availability Mode是採用Active-Standby,此時兩個SR間就會由Edge Node間的Management / Tunnel介面進行狀態同步與Keepalive。

 

如果Edge Node 1實體失效了,此時在Edge Node 2上的Standby T0 SR構件由兩個介面的Keepalive都發現收不到Keepalive信號。因此,這個T0 SR構件就會將自己的角色變為Active,並繼續提供NAT / 南北向防火牆等上層服務(或T1路由器上的Load Balancer服務)。而由於這些服務的狀態 (state) 都會即時同步於Active / Standby構件之間,用戶應用的連線不會中斷。這邊雖然我們以Tier-0路由器舉例,但Tier-1路由器的Active-Standby運作機制也是如此。

 

 

而另一方面,與實體設備間的路由切換呢?原本的基礎機制是透過動態路由協定如BGP,當Edge Node 1失效,在其上的SR構件與外部實體路由器間的路由Keepalive自然會timeout,然後由Edge Node 2上的SR來接手。但因為這樣的時間還是較長,因此NSX-T內開始支援BFD機制 (Bidirectional Forwarding Detection)。在NSX-T的BFD機制內,

  • 可以使用在BGP協定或是Static Route。但是,but,我們強烈建議大家在實體環境與T0路由器間跑BGP
  • 若Edge採用VM形式,BFD Timer最低為1秒,收斂可以在約4秒內達成。若Edge採用Bare-Metal形式,BFD Timer最低為300 ms,收斂有機會在1秒內達成

 

 

接著我們來看一個實際的演練例子。下圖內,CRM-Demo-T1這台Tier-1路由器建置時,SR是部署在edge03-TN以及edge01-TN上。而且我們選擇優先在edge01-TN上運作

 

 

接下來,直接到vCenter內把edge01-TN關機。在過程當中我們不斷地ping 172.19.207.10這個IP,是在這台Tier-1路由器上面所運作的Load Balancer所部署的Virtual Server IP。在直接Poweroff edge01的這個虛機動作下,大家可以看到ping的動作只被中斷了一個封包。而當然,過程前後負載平衡的運作都正常。

 

 

最後我們來解釋一下在前面兩篇邏輯路由器配置裡關於High Availability的設定。在配置時,首先我們會選擇一個Edge Cluster,然後這個邏輯路由器的SR到底會長在哪些Edge上呢?

  • 在Tier-0路由器上,有設定Uplink Router Port的Edge上面就會生成SR
  • 在Tier-1路由器上,會要求管理者選擇最多兩個Edge Cluster裡的成員來生成SR

接著是High-Availability的模式,Tier-0路由器可以選擇Active-Active (ECMP模式) 或Active-Standby,但Tier-1路由器則僅能選擇Active-Standby模式。當管理者選擇Active-Standby後,還要配置

  • Preemptive代表如果被選擇做為Active的那個SR失效而切換到Standby SR後,如果原本的SR復活了,那要把Active的角色切回來
  • Non-Preemptive代表即使之前是Active、現在失效的SR活回來了,也不用切回去。
  • 如果選擇Preemptive,那管理者要指定一個Edge是作為這台邏輯路由器主要的SR配置位置。

以上是我們對邏輯路由器以及其上層服務的High Availability服務的討論。下一篇我們要討論NSX-T內的NAT (Network Address Translation) 機制。