在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等的概念后面另外再介绍。

Openstack关于Regions和Availability Zones的更多相关文章

  1. [REP]AWS Regions and Availability Zones: the simplest explanation you will ever find around

    When it comes to Amazon Web Services, there are two concepts that are extremely important and spanni ...

  2. openstack的Host Aggregates和Availability Zones

    1.关系 Availability Zones 通常是对 computes 节点上的资源在小的区域内进行逻辑上的分组和隔离.例如在同一个数据中心,我们可以将 Availability Zones 规划 ...

  3. nova availability zone

    find a bug: at first there is only one zone. create aggregate host1 in zone1 create aggregate host1 ...

  4. AWS--EC2基本概念

    原文:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html EC2:Elastic Compute Cloud 特性包括: ...

  5. 【原创】导出aws ec2为csv

    1.安装 pip  install boto3 csv 2.使用脚本更新秘钥和地区 # 导出aws ec2列表为cvs import boto3 import csv   ec2 = boto3.cl ...

  6. OpenStack G版以后的Availability Zone与Aggregate Hosts

    关于Availability Zone与Aggregate Hosts的概念解析,可以参考这篇文章:http://blog.chinaunix.net/uid-20940095-id-3875022. ...

  7. openstack Icehouse发布

    OpenStack 2014.1 (Icehouse) Release Notes General Upgrade Notes Windows packagers should use pbr 0.8 ...

  8. 管理openstack多region介绍与实践

    转:http://www.cnblogs.com/zhoumingang/p/5514853.html 概念介绍 所谓openstack多region,就是多套openstack共享一个keyston ...

  9. openstack多region介绍与实践---转

    概念介绍 所谓openstack多region,就是多套openstack共享一个keystone和horizon.每个区域一套openstack环境,可以分布在不同的地理位置,只要网络可达就行.个人 ...

随机推荐

  1. Python学习笔记(五十)爬虫的自我修养(三)爬取漂亮妹纸图

    import random import urllib from urllib import request import os ################################### ...

  2. Mysql通过show processlist排查数据库执行慢

    RDS for MySQL使用的是InnoDB引擎.不同于MyISAM引擎只提供表锁,InnoDB提供不同级别的锁.但是在我们日常的操作过程中经常由于对数据库不当的SQL操作导致出现长时间的锁,造成其 ...

  3. Master of Phi (欧拉函数 + 积性函数的性质 + 狄利克雷卷积)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6265 题目大意:首先T是测试组数,n代表当前这个数的因子的种类,然后接下来的p和q,代表当前这个数的因 ...

  4. Django 1.10中文文档-第一个应用Part7-自定义管理站点

    开发第一个Django应用,Part7 本教程上接Part6.将继续完成这个投票应用,本节将着重讲解如果用Django自动生成后台管理网站. 自定义管理表单 通过admin.site.register ...

  5. BAT-快速切换JDK1.6/1.7

    Code: @echo OFF rem 修改背景/字体颜色为黑/绿 color 0A rem 自动设置JDK环境变量,本程序不会对 [系统环境变量] 造成破环!不需要重启!! rem 没有%%JAVA ...

  6. Linux 不常用命令总结

    1. vim编辑模式下,搜索,/user,跳转下一个,小写的n 2.

  7. 转:google测试分享-分层测试

    原文: http://blog.sina.com.cn/s/blog_6cf812be0102vctg.html 上一次分享了google测试分享-SET和TE,有一些自动化测试的细节没有说清楚,那这 ...

  8. fedora16下更改网卡名字

    fedora16下更改网卡名字   今天由于网络启动出错的原因,在网上搜索,发现大部分人的网卡名字都是eth0,可是我的却是p3p1,所以想改成eth0.   然后google了下,发现设备命名什么的 ...

  9. 新版Java为什么要修改substring的实现

    Java字符串的截取操作可以通过substring来完成.有意思的是,这个方法从jdk1.0开始,一直到1.6都没有变化,但到了1.7实现方式却发生了改变.你可能会认为之所以要对一个成熟且稳定的方法做 ...

  10. 最直白、最易懂的话带你认识和学会---数据分析基础包之numpy的使用

    前言 numpy是一个很基础很底层的模块,其重要性不言而喻,可以说对于新手来说是最基础的入门必须要学习的其中之一.在很多数据分析,深度学习,机器学习亦或是人工智能领域的模块中,很多的底层都会用到这个模 ...