OpenStack 基礎介紹03——各組件綜述之Nova
前面,我們通過兩篇文章介紹了 OpenStack 整體概念,接下來我們將對其進行展開,在此之前,我們總體來聊一下 OpenStack 的各組件,以增強對基礎理解。
1 哪些內容需要我們理解?
為了提高針對性,我們將帶著對如下 17 個疑問來對 OpenStack 組件進行學習。
(1)OpenStack 雲實例生命期所需的各種動作都將由那個組件來進行處理和支撐?
(2)Nova 是否具有虛擬能力?
(3)那個組件負責管理整個雲的計算資源、網路、授權及測度?
(4)Nova 有幾部分組成?
(5)消息隊列的什麼機制使得 OpenStack 整個系統高效?
(6)Nova 的那個組件負責實例的生命周期?
(7)調度器負責與 nova-API 的關係是什麼?
(8)Nova 調度器使用了哪幾種基本調度演算法?
(9)Glance 的作用是什麼?
(10)鏡像都存儲在什麼位置?
(11)Glance 構件構成是什麼?
(12)那個組件內建冗餘和失效備援管理,也能夠處理歸檔和媒體流,特別是對大數據(千兆位元組)和大容量(多對象數量)的測度非常高效?
(13)Swift 組件包含機部分?
(14)Swift 中物理存儲對象的位置信息由誰來管理?
(15)哪個組件提供 OpenStack 組件提供認證和訪問策略服務?原理是什麼?
(16)keystone 除了用戶名和密碼授權,另外一種授權是什麼方式?
(17)OpenStack 管理的 Web 介面是什麼?
2 OpenStack 各組件介紹
OpenStack 是面向 IaaS 服務的,即基礎架構雲平台。該平台的可以比喻成一個生產虛擬化基礎架構的車間。這個車間主要生產 a. 虛擬機實例,b. 虛擬存儲塊,c. 虛擬網段等雲服務組件,而每種服務組件都有相應的「車間主任」進行管理、調度和分配,這裡的「車間主任」就是 OpenStack 雲平台的管理模塊,下面對 OpenStack 的管理模塊進行介紹:
在 OpenStack 諸多組件模塊中,包括 7 個重要的管理模塊:
(1)Nova - 計算服務
(2)Glance - 鏡像服務
(3)Swift - 對象存儲服務
(4)Keystone - 認證服務
(5)Cinder - 塊存儲服務
(6)Neutron - 網路服務
(7)Horizon - UI服務
這些核心組件的基本工作原理如下:
通過上圖可見,在制定好的雲系統平台上,用戶在經 KeyStone 模塊授權後(Provide Auth),通過 Horizon 或 RestAPI 模式創建虛擬機服務。
創建過程包括了利用 Nova 模塊創建虛擬機實例(VM Provision),該 VM 採用了 Glance 模塊提供的鏡像服務(Provide Image),然後用 Neutron 模塊為新建的 VM 分配 IP 地址,把其納入到虛擬網路中(Provide network connectivity),之後再通過 Cinder 模塊創建的 Volume 為 VM 掛載存儲塊。整個過程都在 Cellometer 模塊的資源監控下(Monitors),Cinder 產生的 Volume 和 Glance 提供的 Image 可以通過 Swift 的對象存儲機制進行保存。
通過以上解析我們可以看到 OpenStack 雲平台服務的提供主要是依靠 Nova、Glance、Cinder 和 Neutron 四個核心模塊完成的,相對四個輔助模塊 Horizon、Cellometer、Keystone、Swift 提供的訪問、監控、許可權和對象存儲功能
上面這幾個核心組件我們經常接觸到,但未必真正了解,下面讓我們來認識一下吧。
2.1 外部組件
圓形為 OpenStack 組件,矩形為外部組件,先介紹一下外部組件:
(1)RabbitMQ, Qpid, ZeroMQ 為消息隊列。
(2)xapi+XCP, xapi+XenServer, libvirt+KVM, libvirt+QEMU, libvirt+LXC, libvirt+VMWare 為虛擬化技術。
(3)LVM+IET, LVM+tgt, Xen Storage Manager, SAN (Solaris, HP, SolidFire), NexentaStor, NetApp, Ceph, Sheepdog 為外部擴展 iscsi 存儲,用來掛載遠程塊存儲設備。
(4)MySQL, PostgreSQL, sqlite 為資料庫。
(5)Apache, Nginx 為 web 伺服器。
(6)memcache, any Django-supported database backend (e.g., MySQL, PostgreSQL, sqlite)為會話緩存技術。
(7)floating IP 為伺服器對外網路 IP,fixed IP 為虛擬機網段 IP。
2.2OpenStack 組件
以下是 OpenStack 組件簡介:
(1)nova-compute 通過虛擬驅動技術管理虛擬機,一般採用 KVM+libvirt 或 XCP+xapi 技術。
(2)nova-network 通過 linux 網路技術實現虛擬機與物理伺服器的通信,Dnsmasq 與DHCP 伺服器相似,向虛擬機分發 IP。(F 版為 Quantum,G 版為 Neutron)
(3)nova-volume 利用 LVM 創建和管理本地磁碟卷,使用 IET 或 tgt 實現 iSCSI。(F 版為 Cinder)
(4)openstack-dashboard 基於 Django 的 web 應用,使用 apache web 伺服器,默認使用 memcache 做會話緩存,novnc 通過 VNC 技術遠程控制虛擬機節點。
3 OpenStack 計算設施 —— Nova
Nova 是 OpenStack 計算的彈性控制器。
這個模塊很重要,可以說是 OpenStack 最核心的模塊,以至於在 OpenStack 的初期版本里大部分的雲系統管理功能都是由該模塊負責管理的,只不過後來為了減輕該「車間主任」的壓力,也便於功能分配管理,才把虛擬存儲、網路等部分分離出來,而使該模塊主要負責雲虛擬機實例(Compute 或 Instance) 的生成、監測、終止、授權及測度等管理功能(問題 1 和 3)。
Nova 本身並不提供任何虛擬能力(問題 2),它由 nova-compute 模塊通過 libvirt、XenAPI 等管理 hypervisor,從而管理虛機,此外它還通過 nova-api 服務向外提供如 EC2(亞馬遜彈性計算雲) 兼容、管控功能等的介面(問題 17),通過 nova-scheduler 模塊提供虛機調研邏輯等;這些模塊間的通信全部通過消息隊列完成。
功能及特點:實例生命周期管理、計算資源管理、網路與授權管理、基於 REST 的API、非同步連續通信、支持各種宿主:Xen、XenServer/XCP、KVM、UML、VMware vSphere及 Hyper-V。
3.1 Nova 包含以下主要部分(問題 4)
API Server(nova-api)、消息隊列(rabbit-mq server)、運算工作站(nova-compute)、網路控制器(nova-network)、卷管理(nova-volume)、調度器(nova-scheduler)。
(1)API 伺服器(nova-api)
API 伺服器提供了雲設施與外界交互的介面,它是外界用戶對雲實施管理的唯一通道。通過使用 web 服務來調用各種 EC2 的 API,接著 API 伺服器便通過消息隊列把請求送達至雲內目標設施進行處理。作為對 EC2-api 的替代,用戶也可以使用 OpenStack 的原生API,我們把它叫做「OpenStack API」。
(2)消息隊列(Rabbit MQ Server)
OpenStack 內部在遵循 AMQP(高級消息隊列協議)的基礎上採用消息隊列進行通信。Nova 對請求應答進行非同步調用,當請求接收後便則立即觸發一個回調。由於使用了非同步通信,不會有用戶的動作被長置於等待狀態(問題 5)。例如,啟動一個實例或上傳一份鏡像的過程較為耗時,API 調用就將等待返回結果而不影響其它操作,在此非同步通信起到了很大作用,使整個系統變得更加高效。
(3)運算工作站(nova-compute)
運算工作站的主要任務是管理實例的整個生命周期(問題 6)。他們通過消息隊列接收請求並執行,從而對實例進行各種操作。在典型實際生產環境下,會架設許多運算工作站,根據調度演算法,一個實例可以在可用的任意一台運算工作站上部署。
(4)網路控制器(nova-network)
網路控制器處理主機的網路配置,例如IP地址分配,配置項目 VLAN,設定安全群組以及為計算節點配置網路。
(5)卷工作站(nova-volume)
卷工作站管理基於 LVM(邏輯卷管理的簡寫,它是 Linux 環境下對磁碟分區進行管理的一種機制,通過 LVM,用戶在無需停機的情況下可以方便地調整各個分區大小) 的實例卷,它能夠為一個實例創建、刪除、附加卷,也可以從一個實例中分離卷。
卷管理非常重要!因為它提供了一種保持實例持續存儲的手段,比如當結束一個實例後,根分區如果是非持續化的,那麼對其的任何改變都將丟失。可是,如果從一個實例中將卷分離出來,或者為這個實例附加上卷的話,即使實例被關閉,數據仍然保存其中。這些數據可以通過將卷附加到原實例或其他實例的方式而重新訪問。
因此,為了日後訪問,重要數據務必要寫入卷中。這種應用對於數據伺服器實例的存儲而言,尤為重要。
(6)調度器(nova-scheduler)
調度器負責把 nova-API 調用送達給目標(問題 7)。調度器以名為「nova-schedule」的守護進程方式運行,並根據調度演算法從可用資源池中恰當地選擇運算伺服器。有很多因素都可以影響調度結果,比如負載、內存、子節點的遠近、CPU 架構等等。強大的是 nova 調度器採用的是可插入式架構。
目前 Nova 調度器使用了幾種基本的調度演算法(問題 8):
(1)隨機化:主機隨機選擇可用節點;
(2)可用化:與隨機相似,只是隨機選擇的範圍被指定;
(3)簡單化:應用這種方式,主機選擇負載最小者來運行實例。負載數據可以從別處獲得,如負載均衡伺服器。
通過今天的文章,各位小夥伴對 OpenStack 各組件的認識是否更加完整了呢?如果有興趣,各位可以對 OpenStack 進一步展開研究,而且我們關於這個話題的分享也將繼續。
圖片授權基於:CC0協議
TAG:聽泉Rit |