前面咱們學習了 VXLAN,今天討論跟 VXLAN 緊密相關的 L2 Population。網絡
L2 Population 是用來提升 VXLAN 網絡 Scalability 的。學習
一般咱們說某個系統的 Scalability 好,其意思是: 當系統的規模變大時,仍然可以高效地工做。ui
L2 Population 到底解決了怎樣的 Scalability 問題?
請看下圖:spa
這是一個包含 5 個節點的 VXLAN 網絡,每一個節點上運行了若干 VM。it
如今假設 Host 1 上的 VM A 想與 Host 4 上的 VM G 通訊。
VM A 要作的第一步是獲知 VM G 的 MAC 地址。
因而 VM A 須要在整個 VXLAN 網絡中廣播 APR 報文:「VM G 的 MAC 地址是多少?」io
若是 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。im
那麼下一個關鍵問題是:
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。