Nova负责管理OpenStack中云主机实例的创建、删除、启动、停止等。Nova位于OpenStack架构的中心,其他服务或者组件(如Glance、Placement、Cinder、Neutron等)对它提供支持。Nova自身并没有任何虚拟化能力,它通过虚拟机管理器(Hypervisor)来创建和管理云主机。Hypervisor为多种虚拟化程序(如KVM、Xen、VMware ESX、QEMU)提供统一接口服务。
Nova这一组件功能强大且结构复杂,由多种模块组成,这些模块分属若干单元(Cell)。每个单元又是若干计算节点的集合。
| **模块 **
| 功能介绍 |
| — | — |
| nova-scheduler | 该模块负责虚拟机调度服务,与Placement合作,负责从计算机集群中选择某一主机创建虚拟机 |
| nova-api | 该模块用于接收和响应外部请求,也是外部可用于管理Nova的唯一入口 |
OpenStack中的计算节点被分成若干小单元进行管理,除了顶层管理单元“cell0”外,每个单元都有自己的消息队列和数据库,“cell0”只有数据库。其中单元“cell0”包含接口模块(nova-api)和调度模块(nova-scheduler)。而其余的单元如“cell1”“cell2”负责具体的云主机实例的创建与管理。
为Nova各个单元服务的数据库一共有3个,分别是“nova_api”“nova_cell0”“nova”。顶层管理单元“cell0”使用了“nova_api”“nova_cell0”数据库。“nova_api”数据库存放的是全局信息,如单元的信息、实例类型(创建云主机的模板)信息等。“nova _cell0”数据库的作用是当某台云主机调度失败时,此时云主机的信息将不属于任何一个单元,而只能存放到“nova_cell0”数据库中,因此“nova_cell0”数据库用于存放云主机调度失败的数据以集中管理。而“nova”数据库为其他所有单元服务,存储单元中云主机的相关信息。
yum -y install openstack-nova-api openstack-nova-conductor openstack-nova-scheduler openstack-nova-novncproxy
#第1步,用下面的方法进入MariaDB数据库服务器。
mysql -uroot -p123456
#第2步,新建“nova_api”“nova_cell0”“nova”数据库。
CREATE DATABASE nova_api;
CREATE DATABASE nova_cell0;
CREATE DATABASE nova;
#第3步,给用户授权使用新建数据库。
GRANT ALL PRIVILEGES ON 数据库名.* TO 'nova'@'localhost' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON 数据库名.* TO 'nova'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'controller' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'controller' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'controller' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY '123456';
#注意:这里数据库名分别是“nova_api”“nova_cell0”“nova”,即6条语句。
#退出数据
quit;
将配置文件去掉注释和空行
第1步,备份配置文件。
cp /etc/nova/nova.conf /etc/nova/nova.bak
第2步,去掉所有注释和空行,生成新的配置文件。
grep -Ev '^$|#' /etc/nova/nova.bak >/etc/nova/nova.conf
编辑新的配置文件
第1步,打开配置文件进行编辑。
vi /etc/nova/nova.conf
第2步,修改“[api_database]”和“[database]”部分,实现与数据库“nova_api”“nova”的连接。
[api_database]
connection = mysql+pymysql://nova:123456@controller/nova_api
[database]
connection = mysql+pymysql://nova:123456@controller/nova
第3步,修改“[api]”与“[keystone_authtoken]”部分,实现与Keystone交互。
[api]
auth_strategy = keystone
project_domain_name = Default
user_domain_name = Default
project_name = project
username = nova
password = 123456
[keystone_authtoken]
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = project
username = nova
password = 123456
第4步,修改“[placement]”部分,实现与Placement交互。
[placement]
auth_url = http://controller:5000
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = project
username = placement
password = 123456
region_name = RegionOne
project_domain_name = Default
user_domain_name = Default
project_name = project
username = nova
password = 123456
第5步,修改“[glance]”部分,实现与Glance交互。
[glance]
api_servers = http://controller:9292
第6步,修改“[oslo_concurrency]”,配置锁路径。
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
第7步,修改“[DEFAULT]”部分,配置使用消息队列及防火墙等信息
[DEFAULT]
enabled_apis = osapi_compute,metadata
transport_url = rabbit://rabbitmq:123456@controller:5672
my_ip = 192.168.10.10
use_neutron = true
firewall_driver = nova.virt.firewall.NoopFirewallDriver
第8步,修改“[vnc]”部分,配置VNC连接模式。
[vnc]
enabled = true
server_listen = $my_ip
server_proxyclient_address = $my_ip
初始化“nova_api”数据库。
第1步,初始化“nova_api”数据库。
su nova -s /bin/sh -c "nova-manage api_db sync"
第2步,创建“cell1”单元,该单元将使用“nova”数据库。
su nova -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1"
第3步,映射“nova”到“cell0”数据库,使“cell0”的表结构和“nova”的保持一致。
su nova -s /bin/sh -c "nova-manage cell_v2 map_cell0"
第4步,初始化“nova”数据库,由于映射的存在,在“cell0”中同时创建相同数据表。
su nova -s /bin/sh -c "nova-manage db sync"
检查单元注册情况
nova-manage cell_v2 list_cells
第1步,导入环境变量模拟登录。
. admin-login
第2步,在OpenStack云计算平台中创建用户“nova”。
openstack user create --domain default --password 123456 nova
第3步,给用户“nova”分配“admin”角色
openstack role add --project project --user nova admin
(1)创建服务
创建名为“nova”、类型为“compute”的服务。
openstack service create --name nova compute
(2)创建计算服务端点
OpenStack组件的服务端点有3种,分别对应Admin用户(admin)、内部组件(internal)、公众用户(public)服务 的地址。
第1步,创建公众用户访问的服务端点。
openstack endpoint create --region RegionOne nova public http://controller:8774/v2.1
第2步,创建内部组件访问的服务端点。
openstack endpoint create --region RegionOne nova internal http://controller:8774/v2.1
第3步,创建Admin用户访问端点。
openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1
设置开机启动
systemctl enable openstack-nova-api openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy
立即启动
systemctl start openstack-nova-api openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy
查看端口占用情况8774和8775
netstat -nutpl|grep 8774
netstat -nutpl|grep 8775
查看计算服务列表
openstack compute service list
在计算节点只需要安装Nova的计算模块“nova-compute”,按照以下方法进行安装
yum -y install openstack-nova-compute
(1)
将配置文件去掉注释和空行
第1步,备份配置文件。
cp /etc/nova/nova.conf /etc/nova/nova.bak
第2步,去掉所有注释和空行,生成新的配置文件。
grep -Ev '^$|#' /etc/nova/nova.bak >/etc/nova/nova.conf
(2)
编辑新的配置文件
第1步,打开配置文件进行编辑。
vi /etc/nova/nova.conf
第2步,修改“[api]”与“[keystone_authtoken]”部分,实现与Keystone交互。
[api]
auth_strategy = keystone
[keystone_authtoken]
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = project
username = nova
password = 123456
第3步,修改“[placement]”部分,实现与Placement交互。
auth_url = http://controller:5000
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = project
username = placement
password = 123456
region_name = RegionOne
第4步,修改“[glance]”部分,实现与Glance交互。
api_servers = http://controller:9292
第5步,修改“[oslo_concurrency]”,配置锁路径。
lock_path = /var/lib/nova/tmp
第6步,修改“[DEFAULT]”部分,配置使用消息队列及防火墙等信息。
enabled_apis = osapi_compute,metadata
transport_url = rabbit://rabbitmq:123456@controller:5672
my_ip = 192.168.10.20
use_neutron = true
firewall_driver = nova.virt.firewall.NoopFirewallDriver
第7步,修改“[vnc]”部分,配置VNC连接模式。
[vnc]
enabled = true
server_listen = 0.0.0.0
server_proxyclient_address = $my_ip
novncproxy_base_url = http://192.168.10.10:6080/vnc_auto.html
第8步,配置“[libvirt]”部分,设置虚拟化类型为QEMU。
[libvirt]
virt_type = qemu
首先,设置开机启动服务。
systemctl enable libvirtd openstack-nova-compute
立即启动服务。
systemctl start libvirtd openstack-nova-compute
控制节点检查
(1)导入环境变量模拟登录
. admin-login
(2)发现新的计算节点
su nova -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose"
设置自动发现
第1步,打开配置文件,修改“[scheduler]”,设置每隔60s自动执行发现一次
vi /etc/nova/nova.conf
[scheduler]
discover_hosts_in_cells_interval = 60
第2步,重启“nova-api”服务,使修改过的配置文件生效。
systemctl restart openstack-nova-api
(1)查看计算服务列表
openstack compute service list
(2)查看所有OpenStack服务及端点列表
openstack catalog list
(3)用Nova状态检测工具检查
nova-status upgrade check