後端技術雜談8:OpenStack架構設計

Java技術江湖發表於2019-11-21

本文轉自網際網路,侵刪

本系列文章將整理到我在GitHub上的《Java面試指南》倉庫,更多精彩內容請到我的倉庫裡檢視

https://github.com/h2pl/Java-Tutorial

喜歡的話麻煩點下Star哈

本系列文章將整理於我的個人部落格:

www.how2playlife.com

該系列博文會介紹常見的後端技術,這對後端工程師來說是一種綜合能力,我們會逐步瞭解搜尋技術,雲端計算相關技術、大資料研發等常見的技術喜提,以便讓你更完整地瞭解後端技術棧的全貌,為後續參與分散式應用的開發和學習做好準備。

如果對本系列文章有什麼建議,或者是有什麼疑問的話,也可以關注公眾號【Java技術江湖】聯絡我,歡迎你參與本系列博文的創作和修訂。

OpenStack 是開源雲端計算平臺,支援多種虛擬化環境,並且其服務元件都提供了 API介面 便於二次開發。

OpenStack通過各種補充服務提供基礎設施即服務 Infrastructure-as-a-Service (IaaS) 的解決方案。每個服務都提供便於整合的應用程式介面Application Programming Interface (API)。

openstack 邏輯架構圖

OpenStack 本身是一個分散式系統,不但各個服務可以分佈部署,服務中的元件也可以分佈部署。 這種分散式特性讓 OpenStack 具備極大的靈活性、伸縮性和高可用性。 當然從另一個角度講,這也使得 OpenStack 比一般系統複雜,學習難度也更大。

後面章節我們會深入學習 Keystone、Glance、Nova、Neutron 和 Cinder 這幾個 OpenStack 最重要最核心的服務。

openstack的核心和擴充套件的主要專案如下:

  • OpenStack Compute (code-name Nova) 計算服務

  • OpenStack Networking (code-name Neutron) 網路服務

  • OpenStack Object Storage (code-name Swift) 物件儲存服務

  • OpenStack Block Storage (code-name Cinder) 塊裝置儲存服務

  • OpenStack Identity (code-name Keystone) 認證服務

  • OpenStack Image Service (code-name Glance) 映象檔案服務

  • OpenStack Dashboard (code-name Horizon) 儀表盤服務

  • OpenStack Telemetry (code-name Ceilometer) 告警服務

  • OpenStack Orchestration (code-name Heat) 流程服務

  • OpenStack Database (code-name Trove) 資料庫服務

OpenStack的各個服務之間通過統一的REST風格的API呼叫,實現系統的鬆耦合。上圖是OpenStack各個服務之間API呼叫的概覽,其中實線代表client 的API呼叫,虛線代表各個元件之間通過rpc呼叫進行通訊。鬆耦合架構的好處是,各個元件的開發人員可以只關注各自的領域,對各自領域的修改不會影響到其他開發人員。不過從另一方面來講,這種鬆耦合的架構也給整個系統的維護帶來了一定的困難,運維人員要掌握更多的系統相關的知識去除錯出了問題的元件。所以無論對於開發還是維護人員,搞清楚各個元件之間的相互呼叫關係是怎樣的都是非常必要的。

對Linux經驗豐富的OpenStack新使用者,使用openstack是非常容易的,在後續 openstack系列文章中會逐步展開介紹。

OpenStack 專案和元件

OpenStack services

  • Dashboard 【Horizon】 提供了一個基於web的自服務門戶,與OpenStack底層服務互動,諸如啟動一個例項,分配IP地址以及配置訪問控制。

  • Compute 【Nova】 在OpenStack環境中計算例項的生命週期管理。按需響應包括生成、排程、回收虛擬機器等操作。

  • Networking 【Neutron】 確保為其它OpenStack服務提供網路連線即服務,比如OpenStack計算。為使用者提供API定義網路和使用。基於外掛的架構其支援眾多的網路提供商和技術。

  • Object Storage 【Swift】 通過一個 RESTful,基於HTTP的應用程式介面儲存和任意檢索的非結構化資料物件。它擁有高容錯機制,基於資料複製和可擴充套件架構。它的實現並像是一個檔案伺服器需要掛載目錄。在此種方式下,它寫入物件和檔案到多個硬碟中,以確保資料是在叢集內跨伺服器的多份複製。

  • Block Storage 【Cinder】 為執行例項而提供的永續性塊儲存。它的可插拔驅動架構的功能有助於建立和管理塊儲存裝置。

  • Identity service 【Keystone】 為其他OpenStack服務提供認證和授權服務,為所有的OpenStack服務提供一個端點目錄。

  • Image service 【Glance】 儲存和檢索虛擬機器磁碟映象,OpenStack計算會在例項部署時使用此服務。

  • Telemetry服務 【Ceilometer】 為OpenStack雲的計費、基準、擴充套件性以及統計等目的提供監測和計量。

  • Orchestration服務 【Heat服務】 Orchestration服務支援多樣化的綜合的雲應用,通過呼叫OpenStack-native REST API和CloudFormation-compatible Query API,支援 HOT <Heat Orchestration Template (HOT)>格式模板或者AWS CloudFormation格式模板

通過對這些元件的介紹,可以幫助我們在後續的內容中,瞭解各個元件的作用,便於排查問題,而在你對基礎安裝,配置,操作和故障診斷熟悉之後,你應該考慮按照生產架構來進行部署。

生產部署架構

建議使用自動化部署工具,例如Ansible, Chef, Puppet, or Salt來自動化部署,管理生產環境。

這個示例架構需要至少2個(主機)節點來啟動基礎服務 virtual machine <virtual machine (VM)>或者例項。像塊儲存服務,物件儲存服務這一類服務還需要額外的節點。

  • 網路代理駐留在控制節點上而不是在一個或者多個專用的網路節點上。

  • 私有網路的覆蓋流量通過管理網路而不是專用網路

控制器

控制節點上執行身份認證服務,映象服務,計算服務的管理部分,網路服務的管理部分,多種網路代理以及儀表板。也需要包含一些支援服務,例如:SQL資料庫,term:訊息佇列, and NTP。

可選的,可以在計算節點上執行部分塊儲存,物件儲存,Orchestration 和 Telemetry 服務。

計算節點上需要至少兩塊網路卡。

計算

計算節點上執行計算服務中管理例項的管理程式部分。預設情況下,計算服務使用 KVM。

你可以部署超過一個計算節點。每個結算節點至少需要兩塊網路卡。

塊裝置儲存

可選的塊儲存節點上包含了磁碟,塊儲存服務和共享檔案系統會向例項提供這些磁碟。

為了簡單起見,計算節點和本節點之間的服務流量使用管理網路。生產環境中應該部署一個單獨的儲存網路以增強效能和安全。

你可以部署超過一個塊儲存節點。每個塊儲存節點要求至少一塊網路卡。

物件儲存

可選的物件儲存節點包含了磁碟。物件儲存服務用這些磁碟來儲存賬號,容器和物件。

為了簡單起見,計算節點和本節點之間的服務流量使用管理網路。生產環境中應該部署一個單獨的儲存網路以增強效能和安全。

這個服務要求兩個節點。每個節點要求最少一塊網路卡。你可以部署超過兩個物件儲存節點。

網路

openstack網路是非常複雜的,並且也支援多種模式其中支援GRE,VLAN,VXLAN等,在openstack中網路是通過一個元件 Neutron提供服務,Neutron 管理的網路資源包括如下。

  • network 是一個隔離的二層廣播域。Neutron 支援多種型別的 network,包括 local, flat, VLAN, VxLAN 和 GRE。

  • local 網路與其他網路和節點隔離。local 網路中的 instance 只能與位於同一節點上同一網路的 instance 通訊,local 網路主要用於單機測試。

  • flat 網路是無 vlan tagging 的網路。flat 網路中的 instance 能與位於同一網路的 instance 通訊,並且可以跨多個節點。

  • vlan 網路是具有 802.1q tagging 的網路。vlan 是一個二層的廣播域,同一 vlan 中的 instance 可以通訊,不同 vlan 只能通過 router 通訊。vlan 網路可以跨節點,是應用最廣泛的網路型別。

  • vxlan 是基於隧道技術的 overlay 網路。vxlan 網路通過唯一的 segmentation ID(也叫 VNI)與其他 vxlan 網路區分。vxlan 中資料包會通過 VNI 封裝成 UPD 包進行傳輸。因為二層的包通過封裝在三層傳輸,能夠克服 vlan 和物理網路基礎設施的限制。

  • gre 是與 vxlan 類似的一種 overlay 網路。主要區別在於使用 IP 包而非 UDP 進行封裝。 不同 network 之間在二層上是隔離的。以 vlan 網路為例,network A 和 network B 會分配不同的 VLAN ID,這樣就保證了 network A 中的廣播包不會跑到 network B 中。當然,這裡的隔離是指二層上的隔離,藉助路由器不同 network 是可能在三層上通訊的。network 必須屬於某個 Project( Tenant 租戶),Project 中可以建立多個 network。 network 與 Project 之間是 1對多關係。

  • subnet 是一個 IPv4 或者 IPv6 地址段。instance 的 IP 從 subnet 中分配。每個 subnet 需要定義 IP 地址的範圍和掩碼。

  • port 可以看做虛擬交換機上的一個埠。port 上定義了 MAC 地址和 IP 地址,當 instance 的虛擬網路卡 VIF(Virtual Interface) 繫結到 port 時,port 會將 MAC 和 IP 分配給 VIF。port 與 subnet 是 1對多 關係。一個 port 必須屬於某個 subnet;一個 subnet 可以有多個 port。

如上圖所示,為VLAN模式下,網路節點的通訊方式。

在我們後續實施安裝的時候,選擇使用VXLAN網路模式,下面我們來重點介紹一下VXLAN模式。

VXLAN網路模式,可以隔離廣播風暴,不需要交換機配置chunk口,解決了vlan id個數限制,解決了gre點對點隧道個數過多問題,實現了大2層網路,可以讓vm在機房之間無縫遷移,便於跨機房部署。缺點是,vxlan增加了ip頭部大小,需要降低vm的mtu值,傳輸效率上會略有下降。

涉及的 Linux 網路技術

Neutron 的設計目標是實現“網路即服務”,為了達到這一目標,在設計上遵循了基於“軟體定義網路”實現網路虛擬化的原則,在實現上充分利用了 Linux 系統上的各種網路相關的技術。理解了 Linux 系統上的這些概念將有利於快速理解 Neutron 的原理和實現。

  • bridge:網橋,Linux中用於表示一個能連線不同網路裝置的虛擬裝置,linux中傳統實現的網橋類似一個hub裝置,而ovs管理的網橋一般類似交換機。

  • br-int:bridge-integration,綜合網橋,常用於表示實現主要內部網路功能的網橋。

  • br-ex:bridge-external,外部網橋,通常表示負責跟外部網路通訊的網橋。

  • GRE:General Routing Encapsulation,一種通過封裝來實現隧道的方式。在openstack中一般是基於L3的gre,即original pkt/GRE/IP/Ethernet

  • VETH:虛擬ethernet介面,通常以pair的方式出現,一端發出的網包,會被另一端接收,可以形成兩個網橋之間的通道。

  • qvb:neutron veth, Linux Bridge-side

  • qvo:neutron veth, OVS-side

  • TAP裝置:模擬一個二層的網路裝置,可以接受和傳送二層網包。

  • TUN裝置:模擬一個三層的網路裝置,可以接受和傳送三層網包。

  • iptables:Linux 上常見的實現安全策略的防火牆軟體。

  • Vlan:虛擬 Lan,同一個物理 Lan 下用標籤實現隔離,可用標號為1-4094。

  • VXLAN:一套用 UDP 協議作為底層傳輸協議的 Overlay 實現。一般認為作為 VLan 技術的延伸或替代者。

  • namespace:用來實現隔離的一套機制,不同 namespace 中的資源之間彼此不可見。

總結

openstack是一個非法複雜的分散式軟體,涉及到很多底層技術,我自己對一些網路的理解也是非常有限,主要還是應用層面的知識,所以本章內容寫的比較淺顯一些,有問題請留言?在下一章節我們會進入生產環境如何實施規劃openstack叢集,至於openstack底層的技術,我也沒有很深入研究,如果有任何不恰當的地方可以進行留言,非常感謝!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69951287/viewspace-2665251/,如需轉載,請註明出處,否則將追究法律責任。

相關文章