在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. 使用itextpdf提取pdf内容

    package test; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList ...

  2. SpringCloud入门系列(一)

    https://www.cnblogs.com/edisonchou/p/java_spring_cloud_foundation_sample_list.html

  3. java中error和exception

    异常是指程序运行时发生的错误. Throwable是所有异常的父类,它有两个子类:Error和Exception. 1.Error表示程序在运行期间发生了非常严重的错误,并且该错误是不可恢复的.Err ...

  4. 【BZOJ】1711: [Usaco2007 Open]Dining吃饭

    [算法]最大流 [题解] S连向食物连向牛连向牛‘连向饮料连向T. 经典的一个元素依赖于两个元素的建图方式. #include<cstdio> #include<algorithm& ...

  5. arguments.length

    本文地址:http://www.cnblogs.com/veinyin/p/7607083.html  arguments.length是实参的个数,与形参个数无关.

  6. 4163 hzwer与逆序对 (codevs + 权值线段树 + 求逆序对)

    题目链接:http://codevs.cn/problem/4163/ 题目:

  7. 【译】第三篇 SQL Server代理警报和操作员

    本篇文章是SQL Server代理系列的第三篇,详细内容请参考原文. 正如这一系列的上一篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行,除了步骤中执行的工 ...

  8. bzoj 1934最小割

    比较显然的最小割的题,增加节点source,sink,对于所有选1的人我们可以(source,i,1),选0的人我们可以(i,sink,1),然后对于好朋友我们可以连接(i,j,1)(j,i,1),然 ...

  9. linux学习记录.2.hello world.c

    安装vim,指令: sudo apt-get install vim 建立一个子目录WorkSpace,指令 mkdir WorkSpace 转到该目录下,指令 cd WorkSpace 新建c文件, ...

  10. es6新语法Object.assign()

    1.介绍 Object.assign用于对象的合并,将源对象的所有可枚举属性复制到目标对象,只拷贝源对象自身的属性继承属性补考呗 Object.assign(target,source1,...)第一 ...