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

OpenStack Ocata版本中Nova Cells v2的失败经历_第1张图片

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

OpenStack Ocata版本中Nova Cells v2的失败经历_第2张图片
Cells v1

Nova Cells v2

OpenStack Ocata版本中Nova Cells v2的失败经历_第3张图片
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
[email protected]
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:[email protected]/nova_api
connection=mysql+pymysql://nova:[email protected]/nova
connection=mysql+pymysql://nova_placement:[email protected]/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:[email protected]/nova_cell1 --transport-url rabbit://guest:[email protected]:5672/ 

查看cell

$ nova-manage cell_v2 list_cells --verbose
+---------+--------------------------------------+--------------------------------------+------------------------------------------------------+
|   Name  |                 UUID                 |            Transport URL             |                 Database Connection                  |
+---------+--------------------------------------+--------------------------------------+------------------------------------------------------+
|  cell1  | 95fa78c1-bb42-4b81-8d37-9d8a23651b1a | rabbit://guest:[email protected]:5672/ | mysql+pymysql://nova:[email protected]/nova_cell1 |
| default | e8969639-bdc3-4b0d-933a-91bbf9759927 | rabbit://guest:[email protected]:5672/ | mysql+pymysql://nova:[email protected]/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:[email protected]:5672/ | mysql+pymysql://nova:[email protected]/nova |
| 2017-04-19 08:01:35 | 2017-04-19 08:17:54 | 18 | 95fa78c1-bb42-4b81-8d37-9d8a23651b1a | cell1   | rabbit://guest:[email protected]:5672/ | mysql+pymysql://nova:[email protected]/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的多节点部署要到下个发行版才会被支持。

你可能感兴趣的:(OpenStack Ocata版本中Nova Cells v2的失败经历)