Openstack關於Regions和Availability Zones


在AWS中有Region和Availability Zones的概念,並且在openstack中也實現了兩者,只是不太容易看出來。

此文主要介紹他們的概念和關系,以及在openstack中的實現。

如果沒有特別強調,下文中Availability Zones簡稱az。

 

概述

===

    一般情況下region表示地理上隔離的兩個區域,例如一個region放在美國,另外一個放在中國。換句話說一個region之間是相對獨立的,一個region的死活和另外一個region沒有任何關系。az是在region范圍內的再次切分,只是工程上的獨立,例如可以把一個機架上的機器划分在一個az中。划分az是為了提高容災性和提供廉價的隔離服務。
    選擇不同的region主要考慮哪個region靠近你的用戶群體,如果用戶主要在美國,那么自然選擇離美國近的region。選擇不同的az,是為了防止在所有instance一起掛掉。

 下圖是兩者之間的關系圖

Region 和Availability Zones

======

 Region是最高等級的隔離,因為region是地理位置的隔離。例如一個美國,一個中國,那么當你的虛擬機分別跑在這兩個region上,那么當美國不存在的時候,你在中國的虛擬機還在快樂的運行着。

而且如果目標用戶多數在中國,那么將虛擬機跑在中國也是很好的選擇。

az是低一級的隔離。例如我們可以在中國的datacenter划分為幾個az,然后用戶可以選擇將這些虛擬機跑在同一個az中,或者不同az中。前者可以提供更快的網絡,后者提供更好的容災性。

 

Openstack實現

在openstack中這兩個概念都是存在的。一下將會介紹openstack是如何實現這兩個概念的。

 

 

region

因為Region是地理位置的隔離,那么不同的region意味着不同的endpoint,也就是說(nova-api,glance……)這些服務的ip地址是不同的。這些東西就體現在keystone的catalog中。

以下是keystone的catalog配置文件:

catalog.RegionOne.identity.publicURL = http://keystone.cn:$(public_port)s/v2.0  
catalog.RegionOne.compute.publicURL = http://nova.cn:$(compute_port)s/v1.1/$(tenant_id)s  
catalog.RegionOne.volume.publicURL = http://cinder.cn:8776/v1/$(tenant_id)s  
catalog.RegionOne.ec2.publicURL = http://nova.cn:8773/services/Cloud  
catalog.RegionOne.image.publicURL = http://glance.cn:9292/v1  

注意到catalog其實是分級的  <catalog>.<region>.<service>.<endpoint>,第二級的region就是上文提到的region。在這里我們可以設置不同的region和不同的service的endpoint。

例如我們在美國加了一個datacenter,那么我們修改配置文件為

catalog.RegionOne.identity.publicURL = http://keystone.cn:$(public_port)s/v2.0  
catalog.RegionOne.compute.publicURL = http://nova.cn:$(compute_port)s/v1.1/$(tenant_id)s  
catalog.RegionOne.volume.publicURL = http://cinder.cn:8776/v1/$(tenant_id)s  
catalog.RegionOne.ec2.publicURL = http://nova.cn:8773/services/Cloud  
catalog.RegionOne.image.publicURL = http://glance.cn:9292/v1  
  
catalog.RegionUS.identity.publicURL = http://keystone.us:$(public_port)s/v2.0  
catalog.RegionUS.compute.publicURL = http://nova.us:$(compute_port)s/v1.1/$(tenant_id)s  
catalog.RegionUS.volume.publicURL = http://cinder.us:8776/v1/$(tenant_id)s  
catalog.RegionUS.ec2.publicURL = http://nova.us:8773/services/Cloud  
catalog.RegionUS.image.publicURL = http://glance.us:9292/v1 

這樣以后我們就可以通過選擇不同的region來訪問不同的endpoint了。

ps:現在horizon默認只提取keystone中catalog的regionOne中的endpoint,所以即使在keystone配置了多個region,在horizon也是體現不出來的。

 

 

Availability Zones

az在openstack中其實是nova-scheduler來實現的,當新建虛擬機,調度器將會根據nova-compute設置的az來調度,例如在新建虛擬機的時候,用戶設置了希望將虛擬機放在az-1中,那么調度器將會選擇屬於這個az的nova-compute來調度。如下圖所示

其實Region和Az的概念主要是隔離的等級問題,我們完全可以將一個datacenter根據機房划分region,然后根據機架划分az。

這個就是仁者見仁的問題,完全可以根據各自的需要采取不同的部署方法。

 

在介紹幾個隔離方式

Cells

cell英譯細胞,主要解決openstack的擴展性和規模瓶頸(rabbitmq和database組件),通過每個cell引進自己獨立的rabbitmq和db來解決。

cell被實現為樹形的分級調度,在每個cell中引入cell的概念:

(1)Messages的路由,即父cell通過nova-cell將Messages路由到子cell的AMQP模塊。

 

(2)分級調度功能,即調度某個instances的時候先要進行cell的選擇,根據調度策略。
(3)資源統計,子cell定時的將自己的資源信息上報給父cell,用來給分級調度策略提供決策數據和基於cell的資源監控。
(4)cell之間的通信(通過rpc完成)
  最后,所有的子cell公用底層cell的nova-api,子cell包含除了nova-api之外的其他nova服務,當然所有的cell都共用keystone服務。
(注:nova-*是指除了nova-api之外的其他nova服務,子cell + 父cell才構成了完整的nova服務)

小結一下:我的理解就是在原來的nova-api訪其他服務之前加了一層,先選擇哪個子cell來提供計算服務。父cell才有nova api服務,子cell提供nova的其他服務,cell之間通過nova-cell把消息傳遞到子cell的rabbitmq(AMQP)。

 

 

Host Aggregate

除了AZ,計算結點也可以被邏輯上划分為主機集合,具有相同特性的集群,比如使用一個帶有SSD磁盤的主機集合,或一個裝有萬兆網卡的主機集合。Host Aggregates是用戶不可見的概念。

小結一下:AZ用於讓用戶指定從哪個特定的服務器組合里發起虛擬機,主機集合主要用來為具有特定性能的主機分組以此讓調度器根據某種特性在特定的集合中發起虛擬機。

是否有基於硬件能力的隔離, 如果有很可能要使用HA。

 

 

 

以上是一些openstack的區域分級的概念,當然keystone里面還有分domain,project,Telnet,user,role等的概念后面另外再介紹。


免責聲明!

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



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