美文网首页JCloud
OpenStack Ocata版本中Nova Cells v2的

OpenStack Ocata版本中Nova Cells v2的

作者: 魔哈Moha | 来源:发表于2017-04-19 16:48 被阅读631次

    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的多节点部署要到下个发行版才会被支持。

    相关文章

      网友评论

      本文标题:OpenStack Ocata版本中Nova Cells v2的

      本文链接:https://www.haomeiwen.com/subject/fsdhzttx.html