Openstack關於Regions和Availability Zones

聲明:

本博客歡迎轉發,但請保留原作者信息!內容系本人學習、研究和總結,如有雷同,實屬榮幸!

原文地址:http://blog.csdn.net/gtt116/



在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。

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



reference

========

http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章