Nova Cell V2
- 一.概述
- 二.结构
- 三.Cell 相关数据库表
- 四.部署
-
- 1.安装规划
- 2.安装流程
一.概述
OpenStack 在控制平面上的性能瓶颈主要在 Message Queue 和 Database 。 尤其是 Message Queue , 随着计算节点的增加 , 性能变的越来越差 。 为了应对这种情况 , Nova 很早之前提出来 nova-cell的解决方案 。起初是cell v1版本,由于架构负杂,自 Newton 版本引入cell v2。
二.结构
(1)nova-api 依赖 nova_api 和 nova_cell0 两个数据库 。
(2)nova-scheduler 服务只需要在 api 层面上安装 ,cell 不需要参数调度 。 这样实现了一次调度就可以确
定到具体在哪个 cell 的哪台机器上启动
(3)cell 里面只需要安装 nova-compute 和 nova-conductor 服务 , 和其依赖的 DB 和 MQ
(4)api 上面服务会直接连接 cell 的 MQ 和 DB
三.Cell 相关数据库表
(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 具体信息 。
四.部署
1.安装规划
节点 | 服务 | 备注 |
---|---|---|
controller | nova-api、MQ、DB、nova-scheduler、nova-conductor | |
cell | MQ、DB、nova-conductor | 也可以和计算节点装在一起 |
compute | nova-compute |
2.安装流程
(1)controller node 略,按照官网装即可
(2)cell node
# 基础服务(略)
# 关闭selinuex和防火墙(略)
# 时间同步(略)
# 互信(略)
# mysql(略)
# rabbitmq(略)
# nova-conductor install
yum -y install openstack-nova-conductor openstack-nova-api openstack-utils # 安装openstack-nova-api是为了解决依赖报错
# 建库
mysql -uroot -p123456 -e "CREATE DATABASE nova;"
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY '123456';"
mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY '123456';"
# 配置,注意,api_database用的是控制节点数据库,database用的是cell节点的nova数据库,transport_url用的是cell节点的MQ
openstack-config --set /etc/nova/nova.conf api_database connection mysql+pymysql://nova:[email protected]/nova_api
openstack-config --set /etc/nova/nova.conf database connection mysql+pymysql://nova:[email protected]/nova
openstack-config --set /etc/nova/nova.conf DEFAULT transport_url rabbit://openstack:[email protected]
# 控制节点执行,注意数据库、MQ填的都是cell节点的
# su -s /bin/sh -c "nova-manage cell_v2 create_cell --verbose --name $cell_name \
# --database_connection mysql+pymysql:/$cell_nova_user:$cell_nova_pass@$cell_node/$cell_nova_db \
# --transport-url rabbit://$cell_mq_user:$cell_mq_pass@$cell_node" nova
# 在cell节点上初始化nova数据库
su -s /bin/sh -c "nova-manage db sync" nova
# 启动服务
systemctl enable openstack-nova-conductor.service
systemctl start openstack-nova-conductor.service
(3) compute node
# 基础服务(略)
# 关闭selinuex和防火墙(略)
# 时间同步(略)
# 互信(略)
# nova-compute install
yum -y install openstack-utils openstack-nova-compute openstack-nova-spicehtml5proxy
# 配置(篇幅限制只粘出了注意或改动的地方,其余请参考部署完整脚本)
openstack-config --set /etc/nova/nova.conf DEFAULT transport_url rabbit://openstack:[email protected] # 注意,此处是cell节点的MQ
# 启动服务
systemctl enable libvirtd.service openstack-nova-compute.service
systemctl start libvirtd.service openstack-nova-compute.service
systemctl enable openstack-nova-spicehtml5proxy
systemctl restart openstack-nova-spicehtml5proxy
# cell节点上执行,发现新cell的计算节点
su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
#neutron install
yum install -y openstack-neutron openstack-neutron-openvswitch openvswitch which ebtables ipset
# 配置(篇幅限制只粘出了注意或改动的地方,其余请参考部署完整脚本)
openstack-config --set /etc/neutron/neutron.conf DEFAULT transport_url rabbit://openstack:[email protected] # 注意,此处是controller节点的MQ
# 启动服务
systemctl start openvswitch
systemctl enable openvswitch
# 建ovs网桥
ovs-vsctl add-br br-ex
ovs-vsctl add-port br-ex ${ext_netcard_name}
ovs-vsctl add-br br-tun
# 启动服务
systemctl restart openstack-nova-compute.service
systemctl enable neutron-metadata-agent neutron-l3-agent neutron-openvswitch-agent
systemctl restart neutron-metadata-agent neutron-l3-agent neutron-openvswitch-agent
# 注意,如果是已有环境添加cell需要重启controller节点上的计算服务