Tips:目前Ocata只支持Single cells,并不支持Muiti-cells强品,所以不要用本文的實例來操作您的環(huán)境!
背景
今年2月份OpenStack基金會就發(fā)布了Ocata版本殊者,由于主打OpenStack的穩(wěn)定性和服務的可擴展性太雨,便決定整套Ocata環(huán)境玩玩。
其中重點關(guān)注現(xiàn)在Nova部署強制使用的Cells v2架構(gòu)茫蛹。
因為之前在Kilo上有玩過 Cells v1操刀,由于其復雜的設計和長期被標注實驗性質(zhì),所以目前這部分關(guān)注點極低婴洼,也沒有多少用戶去了解和關(guān)注這方面骨坑。
造成現(xiàn)在Cells v1版本幾乎處于凍結(jié)狀態(tài)。目前用Cell v1最成功的可能就是CERN(歐洲原子能研究中心)了窃蹋,其5000+計算節(jié)點不可謂不牛逼啊卡啰。
感興趣的朋友可以在官網(wǎng)社區(qū)上看下CERN的分享
簡單看下Cell v1和v2的區(qū)別
Nova Cells v1
Nova Cells v2
這里可以看到相對于v1,v2版本清爽簡單了許多警没。
API節(jié)點甚至都不要MQ組件匈辱,Scheduler在調(diào)度的時候只需要在DB中查出對于的Cell信息就能直接連接過去。
所有的Cell節(jié)點只需要依賴自己的DB和MQ杀迹。
Cell下的Compute節(jié)點只需注冊到所在的Cell節(jié)點下就可以了亡脸。
當然目前v2的架構(gòu)設計得益與Nova數(shù)據(jù)庫的拆分,我們知道從M版開始Nova就開始把API部分拆開創(chuàng)建一個獨立的實例。當時在部署的時候Nova配置文件中會有
[api_database]和[database]兩個域浅碾。
經(jīng)過兩個版本的迭代大州,這次Ocata發(fā)布的時候已經(jīng)強制用戶在部署的創(chuàng)建nova_cell實例了。
根據(jù)Cells v2的設計
API節(jié)點只使用兩個實例垂谢,即nova_api
和nova_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 表里面 , 那臺計算節(jié)點才會加入到調(diào)度中 帅容。
**3. ** instance_mappings 表里有所有 instance id, 這樣在查詢 instance 時 颇象, 就可以從這個表里查到他所在的 cell, 然后直連 cell 拿到 instance 具體信息
nova_cell實例就和普通nova實例的schema是一樣的。其中有一個nova_cell0的實例是用來保留當 instance 調(diào)度失敗時 丰嘉, instance 的信息不屬于任何一個 cell時夯到,就會放到 cell0 里面
操作
1. 部署API節(jié)點
這里我通過RDO快速部署一個最小的可用環(huán)境。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節(jié)點
- 服務安裝
這里需要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
- 數(shù)據(jù)庫初始化
$ 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
這里主要關(guān)注數(shù)據(jù)庫的配置
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 的操作為建立 , 所以也沒有相關(guān)的 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 |
+---------+--------------------------------------+--------------------------------------+------------------------------------------------------+
發(fā)現(xiàn)主機
$ nova-manage cell_v2 discover_hosts
這個時候我們?nèi)ゲ閿?shù)據(jù)庫的nova_api實例荐开,可以看到cell_mappings表和host_mappings表已經(jīng)更新如下
# 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是關(guān)聯(lián)上的
3. 失敗
講道理,做到這一步后简肴,Nova應該可以發(fā)現(xiàn)注冊進來的計算節(jié)點了晃听。
但是當我在用nova host-list查看host信息卻查不到cell1里面節(jié)點
$ 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 |
+----+---------------------+-------+---------+
結(jié)果
剛開始我一直以為是nova-manage cell_v2的操作問題,當我用各種命令map_cell_and_hosts砰识、update_cell能扒、simple_cell_setup等仍然有問題時,我便開始懷疑Cell v2版本的問題辫狼。
經(jīng)過一段時間上網(wǎng)查資料才知道丫的Ocata版本現(xiàn)在只支持single cells初斑,多Multi-cell還得等今年下半年的Pike。汗 - - !
Ocata新特性原文看這里《53 new things to look for in OpenStack Ocata》
另外膨处,這里想吐槽下現(xiàn)在國內(nèi)有些媒體在做新聞翻譯的時候见秤,有些地方還是欠妥砂竖,容易誤導人。
比如:99cloud的《OpenStack Ocata Release Notes 》
Ocata 版本加入了許多 Cell V2 的功能 鹃答。 但是不是所有的都可以用于生產(chǎn) 乎澄。 現(xiàn)在部署 Nova 需要最少創(chuàng)建一個 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的多節(jié)點部署要到下個發(fā)行版才會被支持置济。