天天看點

L2 Population 原理 - 每天5分鐘玩轉 OpenStack(113)

前面我們學習了 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

繼續閱讀