前面我們學習了 VXLAN,今天讨論跟 VXLAN 緊密相關的 L2 Population。
L2 Population 是用來提高 VXLAN 網絡 Scalability 的。
通常我們說某個系統的 Scalability 好,其意思是: 當系統的規模變大時,仍然能夠高效地工作。
L2 Population 到底解決了怎樣的 Scalability 問題?
請看下圖:
這是一個包含 5 個節點的 VXLAN 網絡,每個節點上運作了若幹 VM。
現在假設 Host 1 上的 VM A 想與 Host 4 上的 VM G 通信。
VM A 要做的第一步是獲知 VM G 的 MAC 位址。
于是 VM A 需要在整個 VXLAN 網絡中廣播 APR 封包:“VM G 的 MAC 位址是多少?”
如果 VXLAN 網絡的節點很多,廣播的成本會很大,這樣 Scalability 就成問題了。
幸好 L2 Population 出現了。
L2 Population 的作用是在 VTEP 上提供 Porxy ARP 功能,使得 VTEP 能夠預先獲知 VXLAN 網絡中如下資訊:
1. VM IP -- MAC 對應關系
2. VM -- VTEP 的對應關系
當 VM A 需要與 VM G 通信時:
1. Host 1 上的 VTEP 直接響應 VM A 的 APR 請求,告之 VM G 的 MAC 位址。
2. 因為 Host 1 上的 VTEP 知道 VM G 位于 Host 4,會将封裝好的 VXLAN 資料包直接發送給 Host 4 的 VTEP。
這樣就解決了 MAC 位址學習和 APR 廣播的問題,進而保證了 VXLAN 的 Scalability。
那麼下一個關鍵問題是:
VTEP 是如何提前獲知 IP -- MAC -- VTEP 相關資訊的呢?
答案是:
Neutron 知道每一個 port 的狀态和資訊; port 儲存了 IP,MAC 相關資料。
instance 啟動時,其 port 狀态變化過程為:down -> build -> active。
每當 port 狀态發生變化時,Neutron 都會通過 RPC 消息通知各節點上的 Neutron agent,使得 VTEP 能夠更新 VM 和 port 的相關資訊。
VTEP 可以根據這些資訊判斷出其他 Host 上都有哪些 VM,以及它們的 MAC 位址,這樣就能直接與之通信,進而避免了不必要的隧道連接配接和廣播。
了解了工作原理,下節我們學習如何在 Neutorn 中配置 L2 Population。
本文轉自CloudMan6 51CTO部落格,原文連結:http://blog.51cto.com/cloudman/1873325