openstack總結復習


一、雲計算概念

1、雲計算是一種按使用量付費的模式,這種模式提供可用的、便捷的、按需的網絡訪問, 通過互聯網進入可配置的計算資源共享池(資源包括網絡,計算,存儲,應用軟件,服務

2、雲計算所包含的幾個層次服務:

  • SaaS( Software as a Service): 軟件即服務,把在線軟件作為一種服務。

  • Paas( Platform as a Service): 平台即服務,把平台作為一種服務。

  • Iaas( Infrastructure as a Service):基礎設施即服務,把硬件設備作為一種服務。

3、OpenStack:是由Rackspace和NASA(美國國家航空航天局)共同開發的雲計算平台, 是一個開源的 IaaS(基礎設施及服務)雲計算平台,讓任何人都可以自行建立和提供雲端運算服務,每半年發布一次,用Python語言編寫

4、openstack的版本:

5、雲應用形式

(1)私有雲

        將基礎設施與軟硬件資源構建於防火牆內,基於iaas構建私有雲平台供企業內部使用,開源組件有:openstack(最為出色),cloudstack等

(2)雲存儲

        雲存儲系統是一個以數據存儲和管理為核心的雲計算系統

(3)雲游戲

        游戲運行雲平台服務端,雲平台將游戲畫面解壓縮后傳給用戶,用戶端無需高配置處理器和顯卡,只需要基本的視頻解壓縮能力即可。

(4)雲物聯

        基於雲平台實現物物相連的互聯網。

(5)雲安全

        通過網狀的大量客戶端檢測網絡中軟件的異常,獲取木馬,惡意程序的最新信息,推送到雲平台服務端自動分析和處理,再把解決方案發送給每一個客戶端。雲平台使用者越多,越安全。

(6)公有雲

        雲平台對外開放,主要以IaasPaas為主,較為成熟的是Iaas,如阿里雲,騰訊雲,青雲,ucloud,首都在線等

(7)混合雲  

        公有雲和私有雲的結合,即對企業內部又對企業外部,例如AWS

二、openstack的構成組件

OpenStack共享服務組件:
  數據庫服務( Database Service ):MairaDB 及 MongoDB
  消息傳輸(Message Queues):RabbitMQ
  緩存(cache): Memcached

  時間(time sync):NTP
  存儲(storge provider):ceph、GFS、LVM、ISICI等
  高可用及負載均衡:pacemaker、HAproxy、keepalive、lvs等

OpenStack核心組件:
  身份服務( Identity Service ):Keystone
  計算( Compute ): Nova
  鏡像服務( Image Service ): Glance
  網絡 & 地址管理( Network ): Neutron
  對象存儲( Object Storage ): Swift
  塊存儲 (Block Storage) : Cinder
  UI 界面 (Dashboard) : Horizon
  測量 (Metering) : Ceilometer
  部署編排 (Orchestration) : Heat

三、信息隊列rabbitmq

1、概念:屬於一個流行的開源消息隊列系統。屬於AMQP( 高級消息隊列協議 ) 標准的一個 實現。是應用層協議的一個開放標准,為面向消息的中間件設計。用於在分布式系統中存儲轉發消息,在 易用性、擴展性、高可用性等方面表現不俗。

       消息中間件主要用於組件之間的解耦,消息的發送者無需知道消息使用者的存在,反之亦然。
       AMQP 的主要特征是面向消息、隊列、路由(包括點對點和發布 / 訂閱)、可靠性、安全。

       RabbitMQ的特點:
      使用Erlang編寫
      支持持久化
      支持HA
      提供C# , erlang,java,perl,python,ruby等的client開發端

2、rabbitmq中的概念名詞

  Broker:簡單來說就是消息隊列服務器實體。

  Exchange:消息交換機,它指定消息按什么規則,路由到哪個隊列。

  Queue:消息隊列載體,每個消息都會被投入到一個或多個隊列。

  Binding:綁定,它的作用就是把exchange和queue按照路由規則綁定起來。

  Routing Key:路由關鍵字, exchange根據這個關鍵字進行消息投遞。

  vhost:虛擬主機,一個broker里可以開設多個vhost,用作不同用戶的權限分離。

  producer:消息生產者,就是投遞消息的程序。

  consumer:消息消費者,就是接受消息的程序。

  channel:消息通道,在客戶端的每個連接里,可建立多個channel,每個 channel代表一個會話任務。

3、rabbitmq工作原理

  MQ 是消費 - 生產者模型的一個典型的代表,一端往消息隊列中不斷寫入消息,而另一端則可以讀取或者訂閱隊列中的消息。 MQ 則是遵循了 AMQP協議的具體實現和產品。在項目中,將一些無需即時返回且耗時的操作提取出來,進行了異步處理,而這種異步處理的方式大大的節省了服務器的請求響應時間,從而提高了系統的吞吐量。

( 1)客戶端連接到消息隊列服務器,打開一個channel。

( 2)客戶端聲明一個exchange,並設置相關屬性。

( 3)客戶端聲明一個queue,並設置相關屬性。

( 4)客戶端使用routing key,在exchange和queue之間建立好綁定關系。

( 5)客戶端投遞消息到exchange。

( 6) exchange接收到消息后,就根據消息的key和已經設置的binding,進行消息路由,將消息投遞到一個或多個隊列里

4、rabbitmq相關命令:

(1)查看監聽的端口:

netstat -lantp | grep 5672

(2)配置文件:

vim /etc/rabbitmq/rabbitmq.config

(3)rabbitmqctl命令:

rabbitmqctl status        #查看節點狀態
rabbitmqctl cluster_status            #檢查集群狀態
rabbitmqctl stop_app        #停止應用
rabbitmqctl join_cluster --ram rabbit@ren3        #以ram的方式加入集群
rabbitmqctl start_app        #啟動應用  
rabbitmqctl reset        #重置節點

5、注意事項

(1)保證集群中至少有一個磁盤類型的節點以防數據丟失,在更改節點類型時尤其要注意。
(2)若整個集群被停掉了,應保證最后一個 down 掉的節點被最先啟動,若不能則要使用 forget_cluster_node 命令將其移出集群
(3)若集群中節點幾乎同時以不可控的方式 down 了此時在其中一個節點使用 force_boot 命令重啟節點
(4)rabbitmq啟動不起來時可以的操作:檢查靜態解析、刪除/vat/lib/rabbitmq下的所有文件重新搭建

四、memcache緩存系統(端口:11211)

1、概念(key-value)

  Memcached 是一個開源的、高性能的分布式內存對象緩存系統。通過在內存中緩存數據和對象來減少讀取數據庫的次數,從而提高網站訪問速度,加速動態WEB應用、減輕數據庫負載。

2、memcache緩存流程

(1)檢查客戶端請求的數據是否在 Memcache 中,如果存在,直接將請求的數據返回,不在對數據進行任何操作。
(2)如果請求的數據不在 Memcache 中,就去數據庫查詢,把從數據庫中獲取的數據返回給客戶端,同時把數據緩存一份 Memcache 中
(3)每次更新數據庫的同時更新 Memcache 中的數據庫。確保數據信息一致性。
(4)當分配給 Memcache 內存空間用完后,會使用LRU(least Recently Used ,最近最少使用 ) 策略加到其失效策略,失效的數據首先被替換掉,然后在替換掉最近未使用的數據。

五、keystone身份認證服務

 1、概念(端口:5000,35357)

  keystone 是OpenStack的組件之一,用於為OpenStack家族中的其它組件成員提供統一的認證服務,包括身份驗證、令牌的發放和校驗、服務列表、用戶權限的定義等等。雲環境中所有的服務之間的授權和認證都需要經過 keystone. 因此 keystone 是雲平台中第一個即需要安裝的服務。

  作為 OpenStack 的基礎支持服務,Keystone 做下面這幾件事情:
  (1)管理用戶及其權限
  (2)維護 OpenStack Services 的 Endpoint
  (3)Authentication(認證)和 Authorization(鑒權)

  Authentication 是 Keystone 驗證 User 身份的過程。User 訪問 OpenStack 時向 Keystone 提交用戶名和密碼形式的 Credentials,Keystone 驗證通過后會給 User 簽發一個 Token 作為后續訪問的 Credential。

  安全包含兩部分:Authentication(認證)和 Authorization(鑒權)

  Authentication 解決的是“你是誰?”的問題
  Authorization 解決的是“你能干什么?”的問題
  Keystone 借助 Role 實現 Authorization:
  Openstack對User的驗證除了身份驗證,還需要鑒別 User 對某個Service是否有訪問權限。Policy用來定義什么角色對應什么權限。對Keystone來說,Policy其實是一個JSON文件,默認是 /etc/keystone/policy.json 。通過Policy,Keystone實現了對User的權限管理。

2、基本框架

  Token: 用來生成和管理token
  Catalog:用來存儲和管理service/endpoint
  Identity:用來管理tenant/user/role和驗證
  Policy:用來管理訪問權限

3、認證流程

六、glance鏡像服務

1、概念

  Glance是Openstack項目中負責鏡像管理的模塊,其功能包括虛擬機鏡像的查找、注冊和檢索等。 Glance提供Restful API可以查詢虛擬機鏡像的metadata及獲取鏡像。 Glance可以將鏡像保存到多種后端存儲上,比如簡單的文件存儲或者對象存儲。

2、glance架構

(1)glance-api 是系統后台運行的服務進程。 對外提供 REST API,響應 image 查詢、獲取和存儲的調用。(端口:9292)

(2)glance-registry 是系統后台運行的服務進程。 負責處理和存取 image 的 metadata,例如 image 的大小和類型。(端口:9191)

  glance支持多種格式的 image,包括:Raw,vmdk,ISO,QCOW2等

(3)store backend:Glance 自己並不存儲 image。 真正的 image 是存放在 backend 中的。 Glance 支持多種 backend。包括:1. A directory on a local file system(這是默認配置)2. GridFS 3. ceph RBD 4. Amazon S3 5. Sheepdog 6. OpenStack Block Storage (Cinder) 7. OpenStack Object Storage (Swift) 8. VMware ESX;具體使用哪種哪種 backend,是在 /etc/glance/glance-api.conf 中配置的

3、查看保存目錄

  每個 image 在目錄下都對應有一個文件,文件以 image 的 ID 命名。

4、glance創建鏡像

  OpenStack 為終端用戶提供了 Web UI(Horizon)和命令行 CLI 兩種交換界面。

CLI創建image:

openstack image create "cirros"   --file cirros-0.3.3-x86_64-disk.img.img   --disk-format qcow2 --container-format bare --public

七、nova計算服務

1、概念

  Nova 是 OpenStack 最核心的服務,負責維護和管理雲環境的計算資源。OpenStack 作為 IaaS 的雲操作系統,虛擬機生命周期管理也就是通過 Nova 來實現的。

  在上圖中可以看到,Nova 處於 Openstak 架構的中心,其他組件都為 Nova 提供支持: Glance 為 VM 提供 image;Cinder 和 Swift 分別為 VM 提供塊存儲和對象存儲;Neutron 為 VM 提供網絡連接。

2、nova架構

(1)nova-api是整個Nova 組件的門戶,接收和響應客戶的 API 調用。所有對 Nova 的請求都首先由 nova-api 處理。(端口:8774,8775)

Nova-api 對接收到的 HTTP API 請求會做如下處理:

  1)檢查客戶端傳入的參數是否合法有效

  2)調用 Nova 其他子服務的處理客戶端 HTTP 請求

  3)格式化 Nova 其他子服務返回的結果並返回給客戶端

(2)nova-scheduler虛機調度服務負責決定在哪個計算節點上運行虛機

  在 /etc/nova/nova.conf 中,nova 通過 driver=filter_scheduler 這個參數來配置 nova-scheduler。

  Filter scheduler 是 nova-scheduler 默認的調度器,調度過程分為兩步:

   1) 通過過濾器(filter)選擇滿足條件的計算節點(運行 nova-compute)

   2) 通過權重計算(weighting)選擇在最優(權重值最大)的計算節點上創建 Instance。

(3)nova-compute 管理虛機的核心服務,在計算節點上運行。通過調用Hypervisor API實現節點上的 instance的生命周期管理。

  Openstack中虛機默認的保存路徑在:/var/lib/nova/instances

(4)nova-conductornova-compute 經常需要更新數據庫,比如更新和獲取虛機的狀態。 出於安全性和伸縮性的考慮,nova-compute 並不會直接訪問數據庫,而是將這個任務委托給 nova-conductor。

(5)Console Interface

  openstack-nova-api:nova門戶
  openstack-nova-conductor:幫助nova-compute訪問數據庫的
  openstack-nova-console:提供多種方式訪問虛機的控制台
  openstack-nova-novncproxy:是基於web瀏覽器提供虛機的控制台(端口:6080)
  openstack-nova-scheduler:負責調度虛機啟動到哪一個計算節點
  openstack-nova-placement-api:資源使用情況追蹤
  openstack-nova-spicehtml5proxy: 基於 HTML5 瀏覽器的 SPICE 訪問
  openstack-nova-xvpnvncproxy: 基於 Java 客戶端的 VNC 訪問
  openstack-nova-consoleauth: 負責對訪問虛機控制台請求提供 Token 認證
  openstack-nova-cert: 提供 x509 證書支持

3、nova各組件的額協同工作

  1. 客戶(可以是 OpenStack 最終用戶,也可以是其他程序)向 API(nova-api)發送請求:“幫我創建一個虛機”

  2. API 對請求做一些必要處理后,向 Messaging(RabbitMQ)發送了一條消息:“讓 Scheduler 創建一個虛機”

  3. Scheduler(nova-scheduler)從 Messaging 獲取到 API 發給它的消息,然后執行調度算法,從若干計算節點中選出節點 A

  4. Scheduler 向 Messaging 發送了一條消息:“在計算節點 A 上創建這個虛機”

  5. 計算節點 A 的 Compute(nova-compute)從 Messaging 中獲取到 Scheduler 發給它的消息,然后在本節點的 Hypervisor 上啟動虛機。

  6. 在虛機創建的過程中,Compute 如果需要查詢或更新數據庫信息,會通過 Messaging 向 Conductor(nova-conductor)發送消息,Conductor 負責數據庫訪問。

  以上是創建虛機最核心的步驟, 這幾個步驟向我們展示了 nova-* 子服務之間的協作的方式,也體現了 OpenStack 整個系統的分布式設計思想,掌握這種思想對我們深入理解 OpenStack 會非常有幫助。

4、nova創建虛機的詳細過程

  1)界面或命令行通過RESTful API向keystone獲取認證信息。

  2)keystone通過用戶請求認證信息,並生成auth-token返回給對應的認證請求。

  3)界面或命令行通過RESTful API向nova-api發送一個boot instance的請求(攜帶auth-token)。

  4)nova-api接受請求后向keystone發送認證請求,查看token是否為有效用戶和token。

  5)keystone驗證token是否有效,如有效則返回有效的認證和對應的角色(注:有些操作需要有角色權限才能操作)。

  6)通過認證后nova-api和數據庫通訊。

  7)初始化新建虛擬機的數據庫記錄。

  8)nova-api通過rpc.call向nova-scheduler請求是否有創建虛擬機的資源(Host ID)。

  9)nova-scheduler進程偵聽消息隊列,獲取nova-api的請求。

  10)nova-scheduler通過查詢nova數據庫中計算資源的情況,並通過調度算法計算符合虛擬機創建需要的主機。

  11)對於有符合虛擬機創建的主機,nova-scheduler更新數據庫中虛擬機對應的物理主機信息。

  12)nova-scheduler通過rpc.cast向nova-compute發送對應的創建虛擬機請求的消息。

  13)nova-compute會從對應的消息隊列中獲取創建虛擬機請求的消息。

  14)nova-compute通過rpc.call向nova-conductor請求獲取虛擬機消息。(Flavor)

  15)nova-conductor從消息隊隊列中拿到nova-compute請求消息。

  16)nova-conductor根據消息查詢虛擬機對應的信息。

  17)nova-conductor從數據庫中獲得虛擬機對應信息。

  18)nova-conductor把虛擬機信息通過消息的方式發送到消息隊列中。

  19)nova-compute從對應的消息隊列中獲取虛擬機信息消息。

  20)nova-compute通過keystone的RESTfull API拿到認證的token,並通過HTTP請求glance-api獲取創建虛擬機所需要鏡像。

  21)glance-api向keystone認證token是否有效,並返回驗證結果。

  22)token驗證通過,nova-compute獲得虛擬機鏡像信息(URL)。

  23)nova-compute通過keystone的RESTfull API拿到認證k的token,並通過HTTP請求neutron-server獲取創建虛擬機所需要的網絡信息。

  24)neutron-server向keystone認證token是否有效,並返回驗證結果。

  25)token驗證通過,nova-compute獲得虛擬機網絡信息。

  26)nova-compute通過keystone的RESTfull API拿到認證的token,並通過HTTP請求cinder-api獲取創建虛擬機所需要的持久化存儲信息。

  27)cinder-api向keystone認證token是否有效,並返回驗證結果。

  28)token驗證通過,nova-compute獲得虛擬機持久化存儲信息。

  29)nova-compute根據instance的信息調用配置的虛擬化驅動來創建虛擬機。

八、neutron網絡服務 (端口:9696)

1、概念

  Neutron 的設計目標是實現“網絡即服務(Networking as a Service)”。為了達到這一目標,在設計上遵循了基於 SDN 實現網絡虛擬化的原則。

  SDN 模式服務— NeutronSDN( 軟件定義網絡 ),通過使用它,網絡管理員和雲計算操作員可以通過程序來動態定義虛擬網絡設備。Openstack 網絡中的 SDN 組件就是 Quantum。但因為版權問題而改名為Neutron 。

2、neutron網絡基本概念

(1)network

  Neutron 支持多種類型的 network,包括 local, flat, VLAN, VxLAN 和 GRE。

  1)vlan

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

  2)vxlan

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

(2)subnet

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

  network namespace 是一種網絡的隔離機制

(3)port

  port 可以看做虛擬交換機上的一個端口。port 上定義了 MAC 地址和 IP 地址,當 instance 的虛擬網卡 VIF(Virtual Interface) 綁定到 port 時,port 會將 MAC 和 IP 分配給 VIF。

  (Project,Network,Subnet,Port 和 VIF 之間關系):

  Project 1 : m Network 1 : m Subnet 1 : m Port 1 : 1 VIF m : 1 Instance

3、Neutron功能

  Neutron 為整個 OpenStack 環境提供網絡支持,包括二層交換,三層路由,負載均衡,防火牆和 VPN 等。

(1)二層交換switching:

  Nova 的 Instance 是通過虛擬交換機連接到虛擬二層網絡的。Neutron 支持多種虛擬交換機,包括 Linux 原生的 Linux Bridge 和 Open vSwitch。 Open vSwitch(OVS)是一個開源的虛擬交換機,它支持標准的管理接口和協議。

  利用 Linux Bridge 和 OVS,Neutron 除了可以創建傳統的 VLAN 網絡,還可以創建基於隧道技術的 Overlay 網絡,比如 VxLAN 和 GRE(Linux Bridge 目前只支持 VxLAN)。

(2)三層路由routing:

  Instance 可以配置不同網段的 IP,Neutron 的 router(虛擬路由器)實現 instance 跨網段通信。router 通過 IP forwarding,iptables 等技術來實現路由和 NAT

(3)負載均衡Load-Balancing:

  Openstack 在 Grizzly 版本第一次引入了 Load-Balancing-as-a-Service(LBaaS),提供了將負載分發到多個 instance 的能力。LBaaS 支持多種負載均衡產品和方案,不同的實現以 Plugin 的形式集成到 Neutron,目前默認的 Plugin 是 HAProxy

(4)防火牆Firewalling:

  Neutron 通過下面兩種方式來保障 instance 和網絡的安全性。

  1) Security Group

  通過 iptables 限制進出 instance 的網絡包。

  2) Firewall-as-a-Service

  FWaaS,限制進出虛擬路由器的網絡包,也是通過 iptables 實現。

(5)OpenStack 至少包含下面幾類網絡類型

  1)Management 網絡(集群網)

  用於節點之間 message queue 內部通信以及訪問 database 服務,所有的節點都需要連接到 management 網絡。

  2)API 網絡

  OpenStack 各組件通過該網絡向用戶暴露 API 服務。Keystone, Nova, Neutron, Glance, Cinder, Horizon 的 endpoints 均配置在 API 網絡上。通常,管理員也通過 API 網絡 SSH 管理各個節點。

  3)VM 網絡(租戶網)

  VM 網絡也叫 tenant 網絡,用於 instance 之間通信。

  VM 網絡可以選擇的類型包括 local, flat, vlan, vxlan 和 gre。

  VM 網絡由 Neutron 配置和管理。

  4)External 網絡(外網)

  External 網絡指的是 VM 網絡之外的網絡,該網絡不由 Neutron 管理。 Neutron 可以將 router attach 到 External 網絡,為 instance 提供訪問外部網絡的能力。 External 網絡可能是企業的 intranet,也可能是 internet。

這幾類網絡只是邏輯上的划分,物理實現上有非常大的自由度。

4、neutron架構(分布式架構)

  1)Neutron 通過 plugin 和 agent 提供的網絡服務。
  2)plugin 位於 Neutron server,包括 core plugin 和 service plugin。
  3)agent 位於各個節點,負責實現網絡服務。
  4)core plugin 提供 L2 功能,ML2 是推薦的 plugin。
  5)使用最廣泛的 L2 agent 是 linux bridage 和 open vswitch。
  6)service plugin 和 agent 提供擴展功能,包括 dhcp, routing, load balance, firewall, vpn (Virtual Private Network)等。

5、ML2

  Moduler Layer 2(ML2):是 Neutron 在 Havana 版本實現的一個新的 core plugin,用於替代原有的 linux bridge plugin 和 open vswitch plugin。 作為新一代的 core plugin,提供了一個框架,允許在 OpenStack 網絡中同時使用多種 Layer 2 網絡技術,不同的節點可以使用不同的網絡實現機制。

  ML2 對二層網絡進行抽象和建模,引入了 type driver 和 mechansim driver。這兩類 driver 解耦了 Neutron 所支持的網絡類型(type)與訪問這些網絡類型的機制(mechanism),其結果就是使得 ML2 具有非常好的彈性,易於擴展,能夠靈活支持多種 type 和 mechanism。

mechanism driver 有三種類型:

  Agent-based
  包括 linux bridge, open vswitch 等。

  Controller-based
  包括 OpenDaylight, VMWare NSX 等。

  基於物理交換機
  包括 Cisco Nexus, Arista, Mellanox 等。 比如前面那個例子如果換成 Cisco 的 mechanism driver,則會在 Cisco 物理交換機的指定 trunk 端口上添加 vlan100。

  linux bridge 和 open vswitch 的 ML2 mechanism driver 作用是配置各節點上的虛擬交換機。linux bridge driver 支持的 type 包括 local, flat, vlan, and vxlan。open vswitch driver 除這 4 種 type 還支持 gre。

  L2 population driver 作用是優化和限制 overlay 網絡中的廣播流量。 vxlan 和 gre 都屬於 overlay 網絡。

6、Core Plugin/Agent 負責管理核心實體:net, subnet 和 port。而對於更高級的網絡服務,則由 Service Plugin/Agent 管理。

7、虛機獲取IP

  Neutron 通過 dnsmasq 提供 DHCP 服務,而 dnsmasq 通過 Linux Network Namespace 獨立的把每個 network 服務都隔離

ip netns list 命令列出所有的 namespace
ip netns exec <network namespace name> <command>    管理 namespace

  veth pair 是一種成對出現的特殊網絡設備,它們象一根虛擬的網線,可用於連接兩個 namespace。

instance 獲取 IP 的過程如下:
  1)vm 開機啟動,發出 DHCPDISCOVER 廣播,該廣播消息在整個 net 中都可以被收到。
  2)廣播到達 veth tap19a0ed3d-fe,然后傳送給 veth pair 的另一端 ns-19a0ed3d-fe。dnsmasq 在它上面監聽,dnsmasq 檢查其 host 文件,發現有對應項,於是dnsmasq 以 DHCPOFFER 消息將 IP(192.168.254.18)、子網掩碼(255.255.255.0)、地址租用期限等信息發送給 vm。
  3)vm 發送 DHCPREQUEST 消息確認接受此 DHCPOFFER。
  4)dnsmasq 發送確認消息 DHCPACK,整個過程結束。

8、VXLAN

  VXLAN 為 Virtual eXtensible Local Area Network。正如名字所描述的,VXLAN 提供與 VLAN 相同的以太網二層服務,但擁有更強的擴展性和靈活性。與 VLAN 相比,
VXLAN 有下面幾個優勢:

  1)支持更多的二層網段。
  VLAN 使用 12-bit 標記 VLAN ID,最多支持 (2^12)4094 個 VLAN,這對大型雲部署會成為瓶頸。VXLAN 的 ID (VNI 或者 VNID)則用 24-bit 標記,支持 (2^24)16777216 個二層網段。

  2)能更好地利用已有的網絡路徑。
  VLAN 使用 Spanning Tree Protocol 避免環路,這會導致有一半的網絡路徑被 block 掉。VXLAN 的數據包是封裝到 UDP 通過三層傳輸和轉發的,可以使用所有的路徑。

  3)避免物理交換機 MAC 表耗盡。
  由於采用隧道機制,TOR (Top on Rack) 交換機無需在 MAC 表中記錄虛擬機的信息。

  VXLAN 是將二層建立在三層上的網絡。通過將二層數據封裝到 UDP 的方式來擴展數據中心的二層網段數量

  VXLAN 是一種在現有物理網絡設施中支持大規模多租戶網絡環境的解決方案。VXLAN 的傳輸協議是 IP + UDP

VXLAN 包的格式如下:

9、Open vSwitch(東西流向:VM--VM    南北流向:VM--外網)(neutron-openvswitch端口:6633)

Open vSwitch 中的網絡設備:(端口:6640)

  br-ex:連接外部(external)網絡的網橋。
  br-int:集成(integration)網橋,所有 instance 的虛擬網卡和其他虛擬網絡設備都將連接到該網橋。
  br-tun:隧道(tunnel)網橋,基於隧道技術的 VxLAN 和 GRE 網絡將使用該網橋進行通信。
  tap interface:命名為 tapXXXX。
  linux bridge:命名為 qbrXXXX。
  veth pair:命名為 qvbXXXX, qvoXXXX
  OVS integration bridge:命名為 br-int。
  OVS patch ports:命名為 int-br-ethX 和 phy-br-ethX(X 為 interface 的序號)。
  OVS provider bridge:命名為 br-ethX(X 為 interface 的序號)。
  物理 interface:命名為 ethX(X 為 interface 的序號)。
  OVS tunnel bridge:命名為 br-tun。

ovs網絡的相關命令:

ovs-vsctl add-br br-ex
ovs-vsctl add-port br-ex ens38
ovs-vsctl show

10、虛機通外網(iptables-SNAT)

11、外網訪問虛機(floating ip)(iptables-DNAT)

九、horizon Web管理界面

1、概念

  Horizon 為 Openstack 提供一個 WEB 前端的管理界面 (UI 服務 )通過 Horizone 所提供的 DashBoard 服務 , 管理員可以使用通過 WEB UI 對 Openstack 整體雲環境進行管理 , 並可直觀看到各種操作結果與運行狀態。

  配置文件(/etc/openstack-dashboard/local_settings)

  placement端口:8778

2、區域(Region)

  (1)地理上的概念,可以理解為一個獨立的數據中心,每個所定義的區域有自己獨立的Endpoint;

  (2)區域之間是完全隔離的,但多個區域之間共享同一個Keystone和Dashboard(目前Openstack中的Dashboard還不支持多個區域);

  (3)除了提供隔離的功能,區域的設計更多側重地理位置的概念,用戶可以選擇離自己更新的區域來部署自己的服務,選擇不同的區域主要是考慮那個區域更靠近自己,如用戶在美國,可以選擇離美國更近的區域;

  (4)區域的概念是由Amazon在AWS中提出,主要是解決容錯能力和可靠性;

3、可用性區域(Availablilty Zone)

  AZ是在Region范圍內的再次切分,例如可以把一個機架上的服務器划分為一個AZ,划分AZ是為了提高容災能力和提供廉價的隔離服務;

4、Host Aggreates

  一組具有共同屬性的節點集合,如以CPU作為區分類型的一個屬性,以磁盤(SSD\SAS\SATA)作為區分類型的一個屬性,以OS(Windows\Linux)為作區分類型的一個屬性;

5、Cell

  nova為了增加橫向擴展以及分布式、大規模(地理位置級別)部署的能力,同時又不增加數據庫和消息中間件的復雜度,引入了cell的概念,並引入了nova-cell服務。

  (1)主要是用來解決OpenStack的擴展性和規模瓶頸;

  (2)每個Cell都有自己獨立的DB和AMQP,不與其他模塊共用DB和AMQP,解決了大規模環境中DB和AMQP的瓶頸問題;

  (3)Cell實現了樹形結構(通過消息路由)和分級調度(過濾算法和權重算法),Cell之間通過RPC通訊,解決了擴展性問題;

十、cinder存儲服務

1、block storage

操作系統獲得存儲空間的方式一般有兩種:

  (1)通過某種協議(SAS,SCSI,SAN,iSCSI 等)掛接裸硬盤,然后分區、格式化、創建文件系統;或者直接使用裸硬盤存儲數據(數據庫)
  (2)通過 NFS、CIFS 等 協議,mount 遠程的文件系統

  第一種裸硬盤的方式叫做 Block Storage(塊存儲),每個裸硬盤通常也稱作 Volume(卷)

  第二種叫做文件系統存儲。NAS 和 NFS 服務器,以及各種分布式文件系統提供的都是這種存儲。

2、cinder的具體功能:

  (1)提供 REST API 使用戶能夠查詢和管理 volume、volume snapshot 以及 volume type

  (2)提供 scheduler 調度 volume 創建請求,合理優化存儲資源的分配

  (3)通過 driver 架構支持多種 back-end(后端)存儲方式,包括 LVM,NFS,Ceph 和其他諸如 EMC、IBM 等商業存儲產品和方案

3、cinder架構

4、cinder子組件

(1)Cinder-api接收 API 請求,調用 cinder-volume ;(端口:8776)

(2)Cinder-volume管理 volume 的服務,與 volume provider 協調工作,管理 volume 的生命周期。運行 cinder-volume 服務的節點被稱作為存儲節點。

(3)cinder-schedulerscheduler 通過調度算法選擇最合適的存儲節點創建 volume。

(4)volume provider數據的存儲設備,為 volume 提供物理存儲空間。 cinder-volume 支持多種 volume provider,每種 volume provider 通過自己的 driver 與cinder-volume 協調工作。

(5)Message QueueCinder 各個子服務通過消息隊列實現進程間通信和相互協作。因為有了消息隊列,子服務之間實現了解耦,這種松散的結構也是分布式系統的重要特征。

(6)Database Cinder 有一些數據需要存放到數據庫中,一般使用 MySQL。數據庫是安裝在控制節點上。

5、cinder各組件的協同工作

  1)客戶(可以是 OpenStack 最終用戶,也可以是其他程序)向 API(cinder-api)發送請求:“幫我創建一個 volume”

  2)API 對請求做一些必要處理后,向 Messaging(RabbitMQ)發送了一條消息:“讓 Scheduler 創建一個 volume”

  3)Scheduler(cinder-scheduler)從 Messaging 獲取到 API 發給它的消息,然后執行調度算法,從若干計存儲點中選出節點 A

  4)Scheduler 向 Messaging 發送了一條消息:“讓存儲節點 A 創建這個 volume”

  5)存儲節點 A 的 Volume(cinder-volume)從 Messaging 中獲取到 Scheduler 發給它的消息,然后通過 driver 在 volume provider 上創建 volume。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM