分享

扩展你的云 ——详解 Nova 中的 Region, Cell, Availability Zone, Host Aggregate...

徐超 发表于 2015-1-27 20:13:35 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 8 44576
本帖最后由 徐超 于 2015-1-27 20:14 编辑
问题导读
1、怎样扩展你的云?
2、如何设置 flavor 属性?
3、什么是Cell?




为了提供规模化、分布式部署、资源优化利用和兼容 AWS 的功能,openstack 引入了 Region,Cell,Availability Zone(AZ) 和 Host Aggregates Zone(HAZ) 四个概念,其中 Region 和 AZ 是从公有云大哥 AWS 引入,Cell 是为了扩充一个 Region 下的集群的规模而引入的,Host Aggregates 是优化资源调度和利用引入的。这四个概念均和集群部署相关,某些地方含义有相近之处,对于初学 openstack 的童鞋来说容易混淆和模糊,本文将详细分析这四个概念。


    从部署层次来说,它们有以下关系

        Region > Cell > Availabiliy Zone > Host Aggregates
1.png



Region

    顾名思义,Region 直译过来就是区域,地域的概念,而事实上,AWS 按地域(国家或者城市)设置一个 Region,每个 Region 下有多个 Availability Zone。Openstack 同样支持 Region 的概念,支持全球化部署,比如为了降低网络延时,用户可以选择特定的 Region 来部署服务。各个 Region 之间的计算资源、网络资源、存储资源都是独立的,但所有 Region 共享账户用户信息,因为 Keystone 是实现 openstack 租户用户管理和认证的功能的组件,所以 Keystone 全局唯一,所有 Region 共享一个 Keystone,Keystone endpoint 中存储了访问各个 Region 的 URL。
1.jpg


Cell

    Cell 概念的引入,是为了扩充单个 Region 下的集群规模,主要解决 AMQP 和 Database 的性能瓶颈,每个 Region 下的 openstack 集群都有自己的消息中间件和数据库,当计算节点达到一定规模(和IBM,easystack,华为等交流的数据是300~500),消息中间件就成为了扩展计算节点的性能瓶颈。Cell 的引入就是为了解决单个 Region 的规模问题,每个 Region 下可以有多个 Cell,每个 Cell 维护自己的数据库和消息中间件,所有 Cell 共享本 Region 下的 nova-api,共享全局唯一的 Keystone。

    官网手册提到 Cell 不成熟(Considered experimental),巴黎峰会也提到 Cell 的痛点,虽然现在已进入 K 版本迭代开发中了,但是本人还未听说业界成熟使用 Cell 的案例。关于 Cell 更详细的介绍,请参考以下链接
http://www.ibm.com/developerwork ... novacell/index.html
1.jpg

Availability Zone & Host Aggregates Zone

    之所以把 AZ 和 HAZ 放到一同分析,是因为二者的概念实在类似。

    AWS 每个 Region 下有多个 AZ。Openstack 也引入了 AZ 的概念,我个人理解 AZ 的引入是基于安全的角度考虑,比如我们定义一个机房为一个 AZ,把该机房所有计算节点纳入到一个 AZ 中,其中一个机房因为某种原因down 掉,不会影响其它机房的虚拟机和网络;同时, AZ 对用户来说是一个可见的概念,用户创建虚拟机时,可以明确指出在哪个 AZ,用户可以通过在多个 AZ 创建虚拟机来保证高可靠性。

    HAZ 也是把一批具有共同属性的计算节点划分到同一个 Zone 中,HAZ 可以对 AZ 进一步细分,一个 AZ 可以有多个 HAZ。 同一个 HAZ 下的机器都具有某种共同的属性,比如高性能计算,高性能存储(SSD),高性能网络(支持SRIOV等)。HAZ 和 AZ 另一个不同之处在于 HAZ 对用户不是明确可见的,用户在创建虚拟机时不能像指定 AZ 一样直接指定 HAZ,但是可以通过在 Instance Flavor 中设置相关属性,由 nova-scheduler 调度根据该调度策略调度到满足该属性的的 Host Aggregates Zones 中。
2.jpg



Availability Zone 和 Host Aggregates Zone 的使用方法

Availability Zone 使用方法
Nova 调用创建 HAZ 的 API 创建 AZ,即在创建 HAZ 时,定义一个 AZ。
  1. [        DISCUZ_CODE_50        ]nbsp; nova   aggregate-create   HAZ-01   AZ-01
  2. +——+—————+——————————+————+—————+
  3. | Id      | Name         | Availability Zone          | Hosts      | Metadata   |
  4. +——+—————+——————————+————+—————+
  5. | 3       | HAZ-01      |  AZ-01                            |                |                    |
  6. +——+—————+——————————+————+—————+
复制代码



创建好 AZ 后,把计算节点加入到该 HAZ,因为 HAZ 属于 AZ,因此新增的计算节点也属于该 AZ
  1. [        DISCUZ_CODE_51        ]nbsp; nova   aggregate-add-host   3   compute01
  2. +——+————+————————+————————+——————————————+
  3. | Id      | Name     | Availability Zone   | Hosts                     | Metadata                                    |
  4. +——+————+————————+————————+——————————————+
  5. | 3       | HAZ-01  | AZ-01                      | [u'compute-1']     | {u'availability_zone': u'AZ-01′}   |
  6. +——+————+————————+————————+——————————————+
复制代码


创建虚拟机时,指定 AZ 名字即可
  1. nova boot  –flavor m1.small  –image cirros –availability-zone AZ-01 vm
复制代码

Host Aggregates Zone 的使用方法
配置 nova.conf
  1. scheduler_default_filters=AggregateInstanceExtraSpecsFilter,AvailabilityZoneFilter,RamFilter,ComputeFilter
复制代码

创建一个 HAZ
  1. [        DISCUZ_CODE_54        ]nbsp;  nova aggregate-create HAZ-SSD
  2. +——+—————+————————+———+—————+
  3. | Id      | Name         | Availability Zone   | Hosts  | Metadata   |
  4. +——+—————+————————+———+—————+
  5. | 4       | HAZ-SSD    | None                     |            |                    |
  6. +——+—————+————————+———+—————+
复制代码



设置 Metadata 属性
  1. [        DISCUZ_CODE_55        ]nbsp;  nova aggregate-set-metadata 4 ssd=true
  2. +——+—————+————————+————+—————————+
  3. | Id      | Name         | Availability Zone   | Hosts      | Metadata                  |
  4. +——+—————+————————+————+—————————+
  5. | 4       | HAZ-SSD    | None                     | []             | {u'ssd': u'true'}         |
  6. +——+—————+————————+————+—————————+
复制代码



添加计算节点到 HAZ
  1. [        DISCUZ_CODE_56        ]nbsp;  nova aggregate-add-host 4 compute02
  2. +——+—————+————————+———————+————————+
  3. | Id      | Name         | Availability Zone   | Hosts                 | Metadata              |
  4. +——+—————+————————+———————+————————+
  5. | 5       | HAZ-SSD    | None                     | [u'compute02'] | {u'ssd': u'true'}       |
  6. +——+—————+————————+———————+————————+
复制代码



创建 flavor
  1. [        DISCUZ_CODE_57        ]nbsp;  nova flavor-create m1.ssd auto 4096 10 2 –is-public true
  2. +———+————+——————+———+—————+———+———+——————+————+——————+
  3. | ID         | Name      | Memory_MB  | Disk    | Ephemeral  | Swap   | VCPUs | RXTX_Factor  | Is_Public  | extra_specs   |
  4. +———+————+——————+———+—————+———+———+——————+————+——————+
  5. | ......        | m1.ssd    | 4096               | 10       | 0                 |            | 2          | 1.0                  | True        | {}                   |
  6. +———+————+——————+———+—————+———+———+——————+————+——————+
复制代码



设置 flavor 属性
  1. [        DISCUZ_CODE_58        ]nbsp;  nova flavor-key m1.ssd set ssd=true
  2. [        DISCUZ_CODE_58        ]nbsp;  nova flavor-show m1.ssd
  3. +———+————+——————+———+—————+———+———+——————+————+———————+
  4. | ID         | Name      | Memory_MB  | Disk    | Ephemeral  | Swap   | VCPUs | RXTX_Factor  | Is_Public  | extra_specs       |
  5. +———+————+——————+———+—————+———+———+——————+————+———————+
  6. | ......        | m1.ssd    | 4096               | 10       | 0                 |            | 2          | 1.0                  | True        | {u'ssd': u'true'}  |
  7. +———+————+——————+———+—————+———+———+——————+————+———————+
复制代码


采用 m1.ssd 创建虚拟机
  1. nova boot –flavor m1.ssd –image  cirros vm_ssd
复制代码



已有(8)人评论

跳转到指定楼层
tongshan123 发表于 2015-9-10 11:04:47
请问,多region应该怎么设置?在同一个openstack可以设置多个region吗?必须针对两个openstack吗
回复

使用道具 举报

muyannian 发表于 2015-9-10 12:01:51
tongshan123 发表于 2015-9-10 11:04
请问,多region应该怎么设置?在同一个openstack可以设置多个region吗?必须针对两个openstack吗

可以设置多个region

在创建endpoint直接指定

openstack endpoint create \
  --publicurl http://controller:5000/v2.0 \
  --internalurl http://controller:5000/v2.0 \
  --adminurl http://controller:35357/v2.0 \
  --region RegionOne \
  identity


回复

使用道具 举报

tongshan123 发表于 2015-9-10 15:54:35
muyannian 发表于 2015-9-10 12:01
可以设置多个region

在创建endpoint直接指定

恩,我是这样做的,但是,在指定region创建vm的时候出错,
在neutron的log中看到
2015-09-10 15:23:10.246  WARNING [keystoneclient.middleware.auth_token] Configuring auth_uri to point to the public identity endpoint is required; clients may not be able to authenticate against an admin endpoint

请问,怎么解决?
回复

使用道具 举报

tongshan123 发表于 2015-9-11 14:17:34
请问,icehouse版本支持cell吗?
回复

使用道具 举报

sstutu 发表于 2015-9-11 15:36:09
tongshan123 发表于 2015-9-11 14:17
请问,icehouse版本支持cell吗?

ice中cell可能用不了的,kilo版还不成熟
回复

使用道具 举报

tongshan123 发表于 2015-9-11 17:20:18
sstutu 发表于 2015-9-11 15:36
ice中cell可能用不了的,kilo版还不成熟

好的,谢谢您!
回复

使用道具 举报

tongshan123 发表于 2015-9-14 10:31:55

还是想请教一个问题。
之前我在一个openstack上设置的多region已经没有问题了,我现在想把一个新的openstack作为另一个openstack的region,endpoint设置好了,但是,root@ubuntu200:~# nova --os-region-name region1 list
ERROR: Unauthorized (HTTP 401)
root@ubuntu200:~#
请问,我是什么地方没有设置好?应该怎么设置?
回复

使用道具 举报

muyannian 发表于 2015-9-18 13:53:58
tongshan123 发表于 2015-9-14 10:31
还是想请教一个问题。
之前我在一个openstack上设置的多region已经没有问题了,我现在想把一个新的opens ...

endpoint都设置了吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条