天天看點

OpenStack Nova-cell服務的介紹和配置

感謝朋友支援本部落格,歡迎共同探讨交流,由于能力和時間有限,錯誤之處在所難免,歡迎指正!

如果轉載,請保留作者資訊。

部落格位址:http://blog.csdn.net/gaoxingnengjisuan

郵箱位址:[email protected]

    我将先在此篇部落格中介紹nova-cell服務的架構和配置,在下一篇部落格中,我将具體分析nova-cell的源碼。

    cell的功能允許我們以更加靈活的分布式的方式實作對OpenStack Compute雲的縮放,而不需要更加複雜的技術,隻需資料庫和消息隊列等。它的目的是支援更大規模的部署。

    當啟用了這個功能的時候,OpenStack Compute雲中的主機會被分組,稱作cell。cell的結構是樹的形式。top-level級别的cell中的主機運作一個nova-api服務,但是可以沒有nova-compute服務。每一個子cell應該運作正常OpenStack雲計算中所有nova-*類型的服務,除了nova-api服務。我們可以把一個cell樹結構看成一個正常的OpenStack Compute部署,因為在這個樹中的每個cell中都有自己的資料庫服務和消息隊列服務。

    nova-cells服務處理cell之間的通信,并選擇一個cell用于建立新的執行個體。這個服務将會被每個cell所需要的。cell之間的通信是可插拔的,目前cell之間的通信隻是通過RPC服務來實作的。

    采用cell服務實作了cell的排程和主機節點的排程是互相分離的。nova-cells服務首先會選擇一個cell(目前實作的是随機選擇,将來會添加過濾/權重功能,還可以基于廣播擷取的capacity/capabilities等參數)。一旦合适的cell被選擇,且建立新的執行個體的請求到達了這個cell的nova-cells服務之上,這個cell将會發送建立新的執行個體的請求到這個cell的主機排程器。

cell特征

    1.目的是支援更大規模的部署;

    2.cell的結構是樹的形式;

    3.top-level級别的cell(API cell)中的主機運作nova-api服務,可以沒有nova-compute服務,不感覺底層實體主機以及虛拟化;

    4.子cell無nova-api服務;

    5.每一個子cell應該運作正常OpenStack雲計算中所有nova-*類型的服務,除了nova-api服務;

    6.樹中的每個cell中都有自己的資料庫服務和消息隊列服務;

    7.從設計上來講cell之間的通信是可插拔的,也就是未來會支援多種消息通信架構,目前cell之間的通信隻是通過RPC服務來實作的;

    8.采用cell服務實作了cell的排程和主機節點的排程是互相分離的;

    9.在建立新的執行個體時,nova-cells服務選擇cell,目前實作的是随機選擇,将來會添加過濾/權重功能,還可以基于廣播擷取的capacity/capabilities等參數;

    10.在預設的情況下cell功能是禁用的;

cell架構

OpenStack Nova-cell服務的介紹和配置

    在API cell節點要部署nova-api對外提供統一服務,nova-cell負責與子cell之間通信;子cell節點統一要部署nova-cell,如果 子cell直接接入虛拟化層,則還要部署nova-scheduler,nova-compute。消息通信如下圖所示:

OpenStack Nova-cell服務的介紹和配置

    上圖是三個cell級聯的情況,其中API Cell收到請求後,通過nova-cell提供的排程算法,通過消息隊列将消息轉發到Child Cell節點,在Child Cell節點做與API Cell同樣的工作,選擇一個Grandchild Cell并繼續轉發,在Grandchild節點上做真正的主機排程工作,選擇主機建立虛拟機。

    上面的情況下,Grandchild Cell需要将自己連接配接的資源資訊定時上報給Child Cell以提供排程功能使用,同樣ChildCell也要自己知道的資源資訊上報給API Cell使用,這樣,每層排程時隻需拿自己掌握的資源資訊即可,實作每層解耦。

cell的配置

cell配置選項

    在預設的情況下cell功能是禁用的。

    所有的cell相關的配置選項都是在配置檔案nova.conf中[cells]部分之下的。下面的配置選項是目前支援的:

    enable

    TRUE----啟動cell功能;(預設是關閉的;)

    name

    目前cell的名稱,對于每個cell來講,必須是唯一的;

    capabilities

    存儲目前cell的capabilities資訊的清單,它會發送給父cell,但是暫時不會用于排程器,直到将來支援過濾器/權重方案為止;

    call_timeout

    在cell之間等待call調用響應的時間;

API(頂層)cell的配置選項

    compute API類不能是預設的,必須改變為nova.compute.cells_api.ComputeCellsAPI,才能通過nova-cells服務将請求發送到正确的cell之上。具體配置将會如下添加于nova.conf:

    [DEFAULT]

    compute_api_class=nova.compute.cells_api.ComputeCellsAPI

    ...

    [cells]

    enable=True

    name=api

配置子cell

    在子cell中的nova.conf中,将會進行如下配置:

    [DEFAULT]

    # Disable quota checking in child cells.  Let API cell do it exclusively.

    quota_driver=nova.quota.NoopQuotaDriver

    [cells]

    enable=True

    name=cell1

在每個cell中配置資料庫

    在使用cell服務之前,每個cell中還需要對資料庫進行配置。因為APIcell需要知道關于它直系孩子的資訊,且子cell們需要知道關于它們父母cell的資訊。

    應用指令行nova-manage cell create來為每個cell添加相關資訊到資料庫之中。

    $ nova-manage cell create -h

    Options:

    -h, --help                     show this help message and exit

    --name=<name>                  Namefor the new cell

    --cell_type=<parent|child>     Whetherthe cell is a parent or child

    --username=<username>          Usernamefor the message broker in this cell

    --password=<password>          Passwordfor the message broker in this cell

    --hostname=<hostname>          Address ofthe message broker in this cell

    --port=<number>                Portnumber of the message broker in this cell

    --virtual_host=<virtual_host>  Thevirtual host of the message broker in this cell

    --woffset=<float>

    --wscale=<float>

    舉個例子,假如我們的API cell命名為api,一個子cell命名為cell1,則在這個api cell中,我們有如下的RabbitMQ服務資訊:

    rabbit_host=10.0.0.10

    rabbit_port=5672

    rabbit_username=api_user

    rabbit_password=api_passwd

    rabbit_virtual_host=api_vhost

    在這個名字為cell1的子cell中,我們有如下的RabbitMQ服務資訊:

    rabbit_host=10.0.1.10

    rabbit_port=5673

    rabbit_username=cell1_user

    rabbit_password=cell1_passwd

    rabbit_virtual_host=cell1_vhost

    我們應該以管理者的身份,在API cell中運作以下的指令:

# nova-manage cell create --name=cell1 --cell_type=child--username=cell1_user --password=cell1_passwd --hostname=10.0.1.10--port=5673 --virtual_host=cell1_vhost --woffset=1.0 --wscale=1.0

    在API cell中,為API cell的所有子cell重複上述的指令;

    在子cell中,我們要以管理者的身份運作以下的指令:

# nova-manage cell create --name=api --cell_type=parent--username=api1_user --password=api1_passwd --hostname=10.0.0.10--port=5672 --virtual_host=api_vhost --woffset=1.0 --wscale=1.0

cell配置檔案配置選項的描述

   call_timeout=60

   (IntOpt)等待調用call傳回響應的時間期限;

   capabilities=['hypervisor=xenserver;kvm','os=linux;windows']      

   (ListOpt)表示cell的capabilities資訊的Key/Multi-value清單;

   driver=nova.virt.baremetal.pxe.PXE                             

   (StrOpt)Baremetal driver back-end (pxeor tilera)

   driver=nova.cells.rpc_driver.CellsRPCDriver                     

   (StrOpt)用于cell通信的驅動;

   enable=False                                                  

   (BoolOpt)是否啟用cell功能;

   instance_update_num_instances=1                              

   (IntOpt)周期性的運作更新執行個體的數目;

   instance_updated_at_threshold=3600                         

   (IntOpt)執行個體更新或删除之後繼續更新cell的時間期限;

   manager=nova.cells.manager.CellsManager                     

   (StrOpt)cell管理類;

   manager=nova.conductor.manager.ConductorManager        

   (StrOpt)cell管理conductor類的全名;

   max_hop_count=10                                             

   (IntOpt)cell路由最大跳數;

   name=nova                                                      

   (StrOpt)本cell的名稱;

   reserve_percent=10.0                                         

   (FloatOpt)cell容量儲備百分比,會影響記憶體和磁盤使用率;

   scheduler=nova.cells.scheduler.CellsScheduler               

   (StrOpt)cell的排程器;

   topic=cells

   (StrOpt)監聽的topic cell節點;

   topic=conductor

   (StrOpt)監聽的topic conductor節點;

繼續閱讀