OpenStack Ocata版本中Nova Cells v2的失败经历

Tips:目前Ocata只支持Single cells,并不支持Muiti-cells,所以不要用本文的实例来操作您的环境!

背景

今年2月份OpenStack基金会就发布了Ocata版本,由于主打OpenStack的稳定性和服务的可扩展性,便决定整套Ocata环境玩玩。
其中重点关注现在Nova部署强制使用的Cells v2架构。

因为之前在Kilo上有玩过 Cells v1,由于其复杂的设计和长期被标注实验性质,所以目前这部分关注点极低,也没有多少用户去了解和关注这方面。
造成现在Cells v1版本几乎处于冻结状态。目前用Cell v1最成功的可能就是CERN(欧洲原子能研究中心)了,其5000+计算节点不可谓不牛逼啊。
感兴趣的朋友可以在官网社区上看下CERN的分享

简单看下Cell v1和v2的区别

Nova Cells v1

Cells v1

Nova Cells v2

Cells v2

这里可以看到相对于v1,v2版本清爽简单了许多。
API节点甚至都不要MQ组件,Scheduler在调度的时候只需要在DB中查出对于的Cell信息就能直接连接过去。
所有的Cell节点只需要依赖自己的DB和MQ。
Cell下的Compute节点只需注册到所在的Cell节点下就可以了。

当然目前v2的架构设计得益与Nova数据库的拆分,我们知道从M版开始Nova就开始把API部分拆开创建一个独立的实例。当时在部署的时候Nova配置文件中会有
[api_database]和[database]两个域。

经过两个版本的迭代,这次Ocata发布的时候已经强制用户在部署的创建nova_cell实例了。

根据Cells v2的设计

API节点只使用两个实例,即nova_apinova_cell0

nova_api实例里面放了全局信息,如下

+------------------------------+
| Tables_in_nova_api           |
+------------------------------+
| aggregate_hosts              |
| aggregate_metadata           |
| aggregates                   |
| allocations                  |
| build_requests               |
| cell_mappings                |
| flavor_extra_specs           |
| flavor_projects              |
| flavors                      |
| host_mappings                |
| instance_group_member        |
| instance_group_policy        |
| instance_groups              |
| instance_mappings            |
| inventories                  |
| key_pairs                    |
| migrate_version              |
| placement_aggregates         |
| project_user_quotas          |
| quota_classes                |
| quota_usages                 |
| quotas                       |
| request_specs                |
| reservations                 |
| resource_classes             |
| resource_provider_aggregates |
| resource_providers           |
+------------------------------+

其中Cells的信息放在cell_mappings表中,Host的信息放在host_mappings表中,Instances的信息放在instancce_mappings表中。

**1. ** cell_mappings 表 cell 的 Database 和 Mesage Queue 的连接 。 用于和子 cell 通讯
**2. ** host_mappings 是用于 nova-scheduler, 可以确认分配到的机器 。 这里其实也有一个坑 , 之前 nova-compute 启动起来 , 就可以直接使用了 ,cell v2 之后 , 就需要手动运行 nova-manage cell_v2 discover_host , 把 host mapping 到 cell_mappings 表里面 , 那台计算节点才会加入到调度中 。
**3. ** instance_mappings 表里有所有 instance id, 这样在查询 instance 时 , 就可以从这个表里查到他所在的 cell, 然后直连 cell 拿到 instance 具体信息

nova_cell实例就和普通nova实例的schema是一样的。其中有一个nova_cell0的实例是用来保留当 instance 调度失败时 , instance 的信息不属于任何一个 cell时,就会放到 cell0 里面

操作

1. 部署API节点

这里我通过RDO快速部署一个最小的可用环境。answer-file如下:

[general]
CONFIG_MARIADB_INSTALL=y
CONFIG_GLANCE_INSTALL=y
CONFIG_CINDER_INSTALL=y
CONFIG_NOVA_INSTALL=y
CONFIG_NEUTRON_INSTALL=y
CONFIG_HORIZON_INSTALL=y
CONFIG_CLIENT_INSTALL=y
CONFIG_DEBUG_MODE=y
CONFIG_CONTROLLER_HOST=10.1.1.53
CONFIG_COMPUTE_HOSTS=10.1.1.53
CONFIG_NETWORK_HOSTS=10.1.1.53
CONFIG_STORAGE_HOST=10.1.1.53
CONFIG_USE_EPEL=y
CONFIG_ENABLE_RDO_TESTING=n
CONFIG_AMQP_BACKEND=rabbitmq
CONFIG_AMQP_HOST=10.1.1.53
CONFIG_AMQP_AUTH_USER=amqp_user
CONFIG_MARIADB_HOST=10.1.1.53
CONFIG_MARIADB_USER=root
CONFIG_KEYSTONE_DB_PURGE_ENABLE=True
CONFIG_KEYSTONE_REGION=RegionOne
CONFIG_KEYSTONE_ADMIN_EMAIL=magine@aliyun.com
CONFIG_KEYSTONE_ADMIN_USERNAME=admin
CONFIG_KEYSTONE_API_VERSION=v3
CONFIG_KEYSTONE_IDENTITY_BACKEND=sql
CONFIG_GLANCE_BACKEND=file
CONFIG_CINDER_DB_PURGE_ENABLE=True
CONFIG_CINDER_BACKEND=lvm
CONFIG_NOVA_DB_PURGE_ENABLE=True
CONFIG_NOVA_MANAGE_FLAVORS=y
CONFIG_NOVA_SCHED_CPU_ALLOC_RATIO=16.0
CONFIG_NOVA_SCHED_RAM_ALLOC_RATIO=1.0
CONFIG_NEUTRON_L3_EXT_BRIDGE=br-ex
CONFIG_LBAAS_INSTALL=y
CONFIG_NEUTRON_METERING_AGENT_INSTALL=y
CONFIG_NEUTRON_FWAAS=y
CONFIG_NEUTRON_ML2_TYPE_DRIVERS=vlan,flat
CONFIG_NEUTRON_ML2_TENANT_NETWORK_TYPES=vlan
CONFIG_NEUTRON_ML2_MECHANISM_DRIVERS=openvswitch
CONFIG_NEUTRON_ML2_VLAN_RANGES=physnet1:10:100
CONFIG_NEUTRON_ML2_VNI_RANGES=10:100
CONFIG_NEUTRON_L2_AGENT=openvswitch
CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=physnet1:br-em2
CONFIG_NEUTRON_OVS_EXTERNAL_PHYSNET=br-ex:em3
CONFIG_NEUTRON_OVS_VXLAN_UDP_PORT=4789

2. 部署Cell节点

  • 服务安装

这里需要mariadb-server、rabbitmq-server、openstack-nova-compute和openstack-nova-conductor这几个服务

$ yum install -y mariadb-server rabbitmq-server openstack-nova-compute openstack-nova-conductor

$ systemctl enable mariadb rabbitmq-server openstack-nova-conductor openstack-nova-compute 

$ systemctl start mariadb rabbitmq-server 
  • 数据库初始化
$ mysql -e 'create database nova_cell1;'
$ mysql -e "GRANT ALL PRIVILEGES ON nova_cell1.* TO 'nova'@'%' IDENTIFIED BY 'magine1989';"
$ mysql -e "GRANT ALL PRIVILEGES ON nova_cell1.* TO 'nova'@'localhost' IDENTIFIED BY 'magine1989';"
$ mysql -e 'FLUSH PRIVILEGES;'
  • nova.conf

这里主要关注数据库的配置

connection=mysql+pymysql://nova_api:73b652f170d34a69@10.1.1.53/nova_api
connection=mysql+pymysql://nova:magine1989@10.1.1.56/nova
connection=mysql+pymysql://nova_placement:73b652f170d34a69@10.1.1.53/nova_placement
  • 启动服务
$ systemctl start openstack-nova-conductor openstack-nova-compute 

$ nova-manage db sync

3. Cell v2操作

因为 cell v2 完全靠 database 的操作为建立 , 所以也没有相关的 api 接口 。 主要靠 nova-manage cell_v2 命令

添加cell

$ nova-manage cell_v2 create_cell --verbose --name cell1 --database_connection mysql+pymysql://nova:magine1989@10.1.1.56/nova_cell1 --transport-url rabbit://guest:guest@10.1.1.56:5672/ 

查看cell

$ nova-manage cell_v2 list_cells --verbose
+---------+--------------------------------------+--------------------------------------+------------------------------------------------------+
|   Name  |                 UUID                 |            Transport URL             |                 Database Connection                  |
+---------+--------------------------------------+--------------------------------------+------------------------------------------------------+
|  cell1  | 95fa78c1-bb42-4b81-8d37-9d8a23651b1a | rabbit://guest:guest@10.1.1.56:5672/ | mysql+pymysql://nova:magine1989@10.1.1.56/nova_cell1 |
| default | e8969639-bdc3-4b0d-933a-91bbf9759927 | rabbit://guest:guest@10.1.1.53:5672/ | mysql+pymysql://nova:73b652f170d34a69@10.1.1.53/nova |
+---------+--------------------------------------+--------------------------------------+------------------------------------------------------+

发现主机

$ nova-manage cell_v2 discover_hosts

这个时候我们去查数据库的nova_api实例,可以看到cell_mappings表和host_mappings表已经更新如下

# cell_mappings
+---------------------+---------------------+----+--------------------------------------+---------+--------------------------------------+------------------------------------------------------+
| created_at          | updated_at          | id | uuid                                 | name    | transport_url                        | database_connection                                  |
+---------------------+---------------------+----+--------------------------------------+---------+--------------------------------------+------------------------------------------------------+
| 2017-04-18 02:10:21 | 2017-04-19 03:36:46 |  2 | e8969639-bdc3-4b0d-933a-91bbf9759927 | default | rabbit://guest:guest@10.1.1.53:5672/ | mysql+pymysql://nova:73b652f170d34a69@10.1.1.53/nova |
| 2017-04-19 08:01:35 | 2017-04-19 08:17:54 | 18 | 95fa78c1-bb42-4b81-8d37-9d8a23651b1a | cell1   | rabbit://guest:guest@10.1.1.56:5672/ | mysql+pymysql://nova:devops@10.1.1.56/nova_cell1     |
+---------------------+---------------------+----+--------------------------------------+---------+--------------------------------------+------------------------------------------------------+

# host_mappings
+---------------------+------------+----+---------+-------------------------------+
| created_at          | updated_at | id | cell_id | host                          |
+---------------------+------------+----+---------+-------------------------------+
| 2017-04-18 06:35:25 | NULL       |  1 |       2 | ocata.dev.com                 |
| 2017-04-19 08:22:21 | NULL       |  3 |      18 | ocata.compute01.dev.com       |
+---------------------+------------+----+---------+-------------------------------+

这里host_mappings的cell_id和cell_mappings的id是关联上的

3. 失败

讲道理,做到这一步后,Nova应该可以发现注册进来的计算节点了。
但是当我在用nova host-list查看host信息却查不到cell1里面节点

 $ nova host-list
+---------------+-------------+----------+
| host_name     | service     | zone     |
+---------------+-------------+----------+
| ocata.dev.com | cert        | internal |
| ocata.dev.com | conductor   | internal |
| ocata.dev.com | scheduler   | internal |
| ocata.dev.com | consoleauth | internal |
| ocata.dev.com | compute     | nova     |
+---------------+-------------+----------+

$ nova service-list
+----+------------------+---------------+----------+---------+-------+----------------------------+-----------------+
| Id | Binary           | Host          | Zone     | Status  | State | Updated_at                 | Disabled Reason |
+----+------------------+---------------+----------+---------+-------+----------------------------+-----------------+
| 17 | nova-cert        | ocata.dev.com | internal | enabled | up    | 2017-04-19T08:32:23.000000 | -               |
| 18 | nova-conductor   | ocata.dev.com | internal | enabled | up    | 2017-04-19T08:32:30.000000 | -               |
| 23 | nova-scheduler   | ocata.dev.com | internal | enabled | up    | 2017-04-19T08:32:26.000000 | -               |
| 24 | nova-consoleauth | ocata.dev.com | internal | enabled | up    | 2017-04-19T08:32:30.000000 | -               |
| 25 | nova-compute     | ocata.dev.com | nova     | enabled | up    | 2017-04-19T08:32:29.000000 | -               |
+----+------------------+---------------+----------+---------+-------+----------------------------+-----------------+

 $ nova hypervisor-list
+----+---------------------+-------+---------+
| ID | Hypervisor hostname | State | Status  |
+----+---------------------+-------+---------+
| 1  | ocata.dev.com       | up    | enabled |
+----+---------------------+-------+---------+

结果

刚开始我一直以为是nova-manage cell_v2的操作问题,当我用各种命令map_cell_and_hosts、update_cell、simple_cell_setup等仍然有问题时,我便开始怀疑Cell v2版本的问题。
经过一段时间上网查资料才知道丫的Ocata版本现在只支持single cells,多Multi-cell还得等今年下半年的Pike。汗 - - !
Ocata新特性原文看这里《53 new things to look for in OpenStack Ocata

另外,这里想吐槽下现在国内有些媒体在做新闻翻译的时候,有些地方还是欠妥,容易误导人。
比如:99cloud的《OpenStack Ocata Release Notes

Ocata 版本加入了许多 Cell V2 的功能 。 但是不是所有的都可以用于生产 。 现在部署 Nova 需要最少创建一个 Cell。

而原文是

Nova now uses Cells v2 for all deployments; currently implemented as single cells, the next release, Pike, will support multi-cell clouds.

这里就说的很清楚,Cell v2的多节点部署要到下个发行版才会被支持。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,302评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,232评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,337评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,977评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,920评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,194评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,638评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,319评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,455评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,379评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,426评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,106评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,696评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,786评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,996评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,467评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,043评论 2 341

推荐阅读更多精彩内容