Openstack Nova组件

  • 一、Nova 概念
  • 二、Nova 系统架构
  • 三、Nova 组件详讲
  • 1.API 讲解
  • 2.Scheduler 讲解
  • 调度器类型
  • 过滤调度器调度过程
  • 过滤器类型
  • Scheduler-权重
  • 3.Compute 讲解
  • 4.Conductor 讲解
  • 四、虚拟机实例化流程
  • 控制台接口
  • 五、Nova 部署架构
  • Nova 经典部署模式
  • Nova 负载均衡部署模式
  • Cells V2的架构
  • cell的功能
  • cell 两种模式
  • cell工作原理
  • 六、Nova 元数据
  • 七、openstack-Nova 部署
  • 【nova组件部署位置】
  • 【 控制节点Nova服务配置 】
  • 1.创建nova数据库,并执行授权操作
  • 2.管理Nova用户及服务
  • 3.给Nova服务关联endpoint(端点)
  • 4.安装nova组件(nova-api、nova-conductor、nova-novncproxy、nova-scheduler)
  • 5.修改nova配置文件(nova.conf)
  • 6. 初始化数据库
  • 7.注册cell0数据库
  • 8.启动Nova服务
  • 9.检查nova服务端口
  • 【计算节点配置Nova服务-c1-c2节点】
  • 1. 安装nova-compute组件
  • 3.开启服务
  • 【controller 节点操作】
  • 1.查看compute节点
  • 2.扫描当前openstack
  • 3.默认每次添加个计算节点
  • 4.验证计算节点服务
  • 小结


一、Nova 概念

计算服务是openstack最核心的服务之一,负责维护和管理云环境的计算资源它在openstack项目中代号是nova

Nova自身并没有提供任何虚拟化能力,它提供计算服务,使用不同的虚拟化驱动来与底层支持的Hypervisor (虚拟机管理器)进行交互。所有的计算实例(虚拟服务器)由Nova进行生命周期的调度管理(启动、挂起、停止、删除等)

Nova需要keystone, glance, neutron, cinder和swift等其他服务的支持,能与这些服务集成,实现如加密磁盘、裸金属计算实例等。

二、Nova 系统架构

Nova:由多个服务器进程组成,每个进程执行不同的功能

DB:用于数据存储的sql数据库

API:用于接收HTTP请求转换命令通过消息队列或HTTP与其他组件通信的nova组件

Scheduler:用于决定哪台计算节点承载计算实例的nova调度器

Network:``管理IP转发网桥虚拟局域网的nova网络组件

Compute:管理虚拟机管理器与虚拟机之间通信的nova计算组件

Conductor:处理需要协调(构建虚拟机或调整虚拟机大小)的请求 ,或者处理对象转换

openstack-nova-compute 无法启动 openstack nova详解_消息队列


openstack-nova-compute 无法启动 openstack nova详解_运维_02

三、Nova 组件详讲

1.API 讲解

API是客户访问nova的http接口,它由nova-api服务实现, nova-api服务接收和响应来自最终用户的计算api请求。作为openstack对外服务的最主要接口,nova-api提供了一个集中的可以查询所有api的端点

所有对nova的请求都首先由nova-api处理.API提供REST标准调用服务,便于与第三方系统集成。

最终用户不会直接改送RESTful API请求,而是通过openstack命令行、dashbord和其他需要跟nova交换的组件来使用这些API

只要跟虚拟机生命周期相关的操作,Nova-api都可以相应

Nova-api对接收到的HTTP API请求做以下处理:
-1)-检查客户端传入的参数是否合法有效-2)-调用nova其他服务来处理客户端HTTP请求-3)-格式化nova其他子服务返回结果并返回给客户端

Nova-api是外部访问并使用nova提供的各种服务的唯一途径,也是客户端和Nova之间的中间层

2.Scheduler 讲解

Scheduler可译为调度器,由nova-scheduler服务实现,主要解决的是如何选择在哪个计算节点上启动实例的问题。它可以应用多种规则,如果考虑内存使用率、cpu负载率、cpu构架(intellamd)等多种因素,根据一定的算法,确定虚拟机实例能够运行在哪一台计算服务器上。Nova-scheduler服务会从队列中接收一个虚拟机实例的请求,通过读取数据库的内容,从可用资源池中选择最合适的计算节点来创建新的虚拟机实例。

创建虚拟机实例时,用户会提出资源需求,如cpu、内存、磁盘各需要多少。Openstack将这些需求定义在实例类型中,用户只需指定使用哪个实例类型就可以了

调度器类型

随机调度器(chance scheduler) :从所有正常运行nova-compute服务的节点中随机选择。

过滤器调度器(filtèr scheduler) :根据指定的过滤条件以及权重选择最佳的计算节点。Filter又称为筛选器

缓存调度器(caching scheduler):可看作随机调度器的一种特殊类型,在随机调度的基础上将主机资源信息缓存在本地内存中,然后通过后台的定时任务定时从数据库中获取最新的主机资源信息。

过滤调度器调度过程

主要分为2个阶段
1.通过指定的过滤器选择满足条件的计算节点,比如内存使用率小于50%,可以使用多个过滤器依次进行过滤
--筛选出必要条件满足的节点
2.对过滤之后的主机列表进行权重计算排序,选择最优的计算节点来创建虚拟机实例
--选择最合适的/最优的节点

过滤器类型

当过滤调度器需要执行调度操作时,会让过滤器对计算节点进行判断,返回True或者False 在/etc/nova/nova.cont配置文件中

scheduler_available_filters选项用于配置可用过滤器,默认是所有nova自带的过滤器都可以用于过滤作用

Scheduler_available_filters = nova.scheduler.filters.all filters

另外还有一个选项scheduler-default filters用于指定nova-scheduler服务真正使用的过滤器,默认值如下

Scheduler_default filters = RetryFilters, AvailabilityZoneFilter, RamFilter,ComputeFilter, ComputeCapabilitiesFilter, ImagePropertiesFilter,ServerGroupAntiAffinityFilter. ServerGroupAffinityFilter

过滤调度器将按照列表中的顺序依次过滤

RetryFilter(再审过滤器) 主要作用是过滤掉之前已经调度过的节点。如A, B,C都通过了过滤,A权重最大被选中执行操作,由于某种原因,操作在A上失败了。Nova-filterE新执行过滤操作,那么此时A就被会Retryfilter直接排除,以免再次失败

AvailabilityZoneFilter (可用区域过滤器) 为提高容灾性并提供隔弯服务,可以将计算节点划分到不同的可用区域中Openstack默认有一个命名为nova的可用区域,所有的计算节点初始是放在nova区域中的。用户可以根据需要创建自己的一个可用区域。创建实例时,需要指定将实例部署在哪个可用区域中. Nova-scheduler执行过滤操作时,会使用AvailabilityZoneFilter不属于指定可用区域计算节点过滤掉

CoreFilter(核心过滤器) 根据可用CPU核心来调度虚拟机创建,将不能满足实例类型vCPU需求的计算节点过滤掉。VCPU也允许超量,超量值是通过修改nova.cont中cpu allocation-ratio参数控制,默认值是16
Vi /etc/nova/nova.conf
cpu_allocation_ratio=16.0

ComputeFilter(计算过滤器) 保证只有nova-compute服务正常工作的计算节点才能被nova-scheduler调度,它是必选的过滤器。

ComputeCapablilitiesFilter (计算能力过滤器) 根据计算节点的特性来过滤,如x86-64和ARM架构的不同节点,要将实例

ImagePropertiesFilter(镜像属性过滤器) 根据所选镜像的属性来筛选匹配的计算节点。通过元数据来指定其属性。如希望镜像只运行在KVM的Hypervisor上,可以通过Hypervisor Type属性来指定。

ServerGroupAntiAffinityFilter(服务器组反亲和性过滤器) 要求尽量将实例分散部署到不同的节点上。例如有3个实例s1, s2, s3, 3个计算节点A、 B、C,具体操作如下:
创建一个anti-affinit策略的服务器组
openstack server group create-policy anti-affinity group-1
创建三个实例,将它们放入group-1服务器组openstack server create-flavor m1.tiny -image cirros -hint group=group-1 s1 openstack server create-flavor m1.tiny -image cirros-hint group=group-1 s2
openstack server create-flavor m1.tiny -image cirros -hint group=group-1 s3

ServerGroupAffinityFilter(服务器组亲和性过滤器) 与反亲和性过滤器相反,此过滤器尽量将实例部署到同一个计算节点上

Scheduler-权重

nova-scheduler服务可以使用多个过滤器依次进行过滤,过滤之后的节点再通过计算权重选出能够部署实例的节点。

注意:
所有权重位于nova/scheduler/weights目录下。目前默认实现是RAMweighter,根据计算节点空闲的内存量计算权重值,空闲越多,权重越大,实例将被部署到当前空闲内存最多的计算节点上

openstack源码位置
/usr/lib/python2.7/site-packages

权重源码位于
/usr/lib/python2.7/site-packages/nova/scheduler/weights

3.Compute 讲解

openstack-nova-compute 无法启动 openstack nova详解_数据库_03

Nova-compute在计算节点上运行,负责管理节点上的实例。通常一个主机运行一个Nova-compute服务,一个实例部署在哪个可用的主机上取决于调度算法。OpenStack对实例的操作,最后都是提交给Nova-compute来完成。
负责执行具体的与实例生命周期/管理实例相关的工作

Nova-compute可分为两类,一类是定向openstack报告计算节点的状态,另一类是实现实例生命周期的管理。
报告节点状态(写入数据库,保证scheduler读取数据库,数据库信息的实时性、celimetor 、监控和管理openstack 实例资源并汇报给用户/openstack本身/运维人员)

通过Driver (驱动)架构支持多种Hypervisor虚拟机管理器 -1)-面对多种Hypervisor, nova-compute为这些Hypervisor定义统一的接口 -2)-Hypervisor只需要实现这些接口,就可以Driver的形式即插即用到OpenStack系统中

openstack-nova-compute 无法启动 openstack nova详解_openstack_04

定期向OpenStack报告计算节点的状态
-1)-每隔一段时间, nova-compute就会报告当前计算节点的资源使用情况和nova-compute服务状态
-2)-nova-compute是通过Hypervisor的驱动获取这些信息的。

实现虚拟机实例生命周期的管理 —OpenStack对虚拟机实例最主要的操作都是通过nova-compute实现的。创建、关闭、重启、挂起、恢复、中止、调整大小、迁移、快照
—以实例创建为例来说明nova-compute的实现过程
(1)为实例准备资源。(2)创建实例的镜像文件。(3)创建实例的XML定义文件。(4)创建虚拟网络并启动虚拟机。

4.Conductor 讲解

openstack-nova-compute 无法启动 openstack nova详解_消息队列_05

nova-conductor模块实现,旨在为数据库的访问提供一层安全保障。Nova-conductor作为nova.compute服务与数据库之间交互的中介,避免了直接访问由nova-compute服务创建对接数据库。

Nova-compute访问数据库的全部操作都改到nova-conductor中, nova-conductor作为对数据库操作的一个代理,而且nova-conductor是部署在控制节点上的。

Nova-conductor有助于提高数据库的访问性能,nova-compute可以创建多个线程使用远程过程调用(RPC)访问nova-conductor.

在一个大规模的openstack部署环境里,管理员可以通过增加nova-conductor的数量来应付日益增长的计算节点对数据库的访问量

以前对资源的管理全部由计算节点承担,在统计资源使用情况时,只是简单的将所有计算节点的资源情况累加起来,但是系统中还存在外部资源,这些资源由外部系统提供。如ceph, nfs等提供的存储资源等。面对多种多样的资源提供者,管理员需要统一的、简单的管理接口来统计系统中资源使用情况,这个接口就是PlacementAPI.

PlacementAPl由nova-placement-api服务来实现,旨在追踪记录资源提供者的目录和资源使用情况。

被消费的资源类型是按类进行跟踪的。如计算节点类、共享存储池类、IP地址类等。

四、虚拟机实例化流程

用户可以通过多种方式访问虚拟机的控制台

Nova-novncproxy守护进程:通过vnc连接访问正在运行的实例提供一个代理,支持浏览器novnc客户端。

Nova-spicehtml5proxy守护进程:通过spice连接访问正在运行的实例提供一个代理,支持基于html5浏览器的客户端。

Nova-xvpvncproxy守护进程:通过vnc连接访问正在运行的实例提供一个代理,支持openstack专E的java客户端

Nova-consoleauth守护进程:负责对访问虚拟机控制台提供用户令牌认证。这个服务必须与控制台代理程序共同使用。

控制台接口

首先用户(可以是OpenStack最终用户,也可以是其他程序)执行Nova Client提供的用于创建虚拟机的命令

nova-api服务监听到来自于Nova Client的HTTP请求,并将这些请求转换为AMQP消息之后加入消息队列

通过消息队列调用nova-conductor服务

nova-conductor服务从消息队列中接收到虚拟机实例化请求消息后,进行一些准备工作

nova-conductor服务通过消息队列告诉nova-scheduler服务去选择一个合适的计算节点来创建虚拟机,此时nova-scheduler会读取数据库的内容

nova-conductor服务从nova-scheduler服务得到了合适的将计算节点的信息后,在通过消息队列来通知nova-compute服务实现虚拟机的创建

五、Nova 部署架构

Nova 经典部署模式

openstack-nova-compute 无法启动 openstack nova详解_openstack_06

Nova 负载均衡部署模式

openstack-nova-compute 无法启动 openstack nova详解_消息队列_07

Cells V2的架构

openstack-nova-compute 无法启动 openstack nova详解_运维_08

当openstack nova集群的规模变大时,数据库和消息队列服务就会出现瓶颈问题。Nova为提高水平扩展及分布式、大规模的部署能力,同时又不增加数据库和消息中间件的复杂度,引入了Cell概念。

Cell可译为单元。为支持更大规模的部署,openstack较大的nova集群分成小的单元,每个单元都有自己的消息队列和数据库,可以解决规模增大时引起的瓶颈问题。在Cell中, Keystone, Neutron, Cinder.Glance等资源是共享的。

cell的功能

(1)Messages的路由,即父cell通过nova-cell将Messages路由到子cell的AMQP(消息队列)模块。

(2)分级调度功能,即调度某个instances的时候先要进行cell的选择,目前只支持随机调度,后续会增加基于filter和weighing策略的调度。

(3)资源统计,子cell定时的将自己的资源信息上报给父cell,用来给分级调度策略提供决策数据和基于cell的资源监控。

(4)cell之间的通信(通过rpc远程调用完成)。

cell 两种模式

openstack-nova-compute 无法启动 openstack nova详解_消息队列_09

openstack-nova-compute 无法启动 openstack nova详解_消息队列_10

cell工作原理

从架构图看,cell0, , cell1. cell2 位于最上层的cell0,也就是api-cell, 而下层的cell1与cell2则是平行对等的关系,他们之间无交互,相互独立,还可以继续增加cell3,cell4 。 而上层的api cell主要包括了

Nova API, Nova Scheduler, Nova Conductor 这3个 Nova 服务 ,同时在 API Cell 中还需要 MQ 提供组件内的通信服务。API Cell 中的 DB 包含两个数据库,分别是 api数据库 和 cell数据库,api 数据库保存了全局数据,比如 flavor 信息。此外 api 数据库中还有一部分表是用于 placement 服务的;而 cell数据库则是用于保存创建失败且还没有确定位于哪个 cell 的虚机数据,比如当虚拟机调度失败时,该虚拟机数据就会被保存到cell数据库中。也就是cell0数据库中。在每个 Cell 中,都有自己独立使用的数据库、消息队列和 Nova Conductor 服务,当前 Cell 中的所有计算节点,全部将数据发送到当前 Cell 中的消息队列,由 Nova Conductor 服务获取后,保存至当前 Cell 的 Nova 数据库中。整个过程都不会涉及到 API Cell 中的消息队列。因此通过对计算节点进行 Cell 划分,可以有效降低 API Cell 中消息队列和数据库的压力。假如一个 MQ 能支持200个计算节点,则在划分 Cell 以后,每个 Cell 都可以支持200个计算节点,有 N 个 Cell 就可以支持 N X 200 个计算节点,因此可以极大提升单个 OpenStack 的集群管理规模。

六、Nova 元数据

元数据作用是通过向虚拟机实例注入元数据信息,实例启动时获得自己的元数据,实例中的cloud-init工具根据元数据完成个性化配置工作。

Openstack将cloud-init定制虚拟机实例配置时获取的元数据信息分成两大类:元数据metadata)和用户数据(user data)

元数据指的是结构化数据,以键值对形式注入实例,包括实例自身的一些常用属性,如主机名、网络配置信息(IP地址和安全组) 、SSH密钥等。

用户数据是非结构化数据,通过文件或脚本的方式进行注入,支持多种文件格式,如gzip, shell, cloud-init配置文件等,主要包括一些命令、脚本,比如shell脚本。

Openstack将元数据和用户数据的配置信息注入机制分为两种,一种是配置驱动器机制,另一种是元数据服务机制。

七、openstack-Nova 部署

【nova组件部署位置】

主机

IP

部署服务

ct

192.168.78.55

nova-api(nova主服务)nova-scheduler(nova调度服务)nova-conductor(nova数据库服务,提供数据库访问)nova-novncproxy(nova的vnc服务,提供实例的控制台)

c1

192.168.78.66

nova-compute(nova计算服务)

c2

192.168.78.77

nova-compute(nova计算服务)

【 控制节点Nova服务配置 】

1.创建nova数据库,并执行授权操作

mysql -uroot -p密码
CREATE DATABASE nova_api;
CREATE DATABASE nova;
CREATE DATABASE nova_cell0;
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';
flush privileges;
quit

openstack-nova-compute 无法启动 openstack nova详解_数据库_11

2.管理Nova用户及服务

#创建nova用户
openstack user create --domain default --password NOVA_PASS nova
#把nova用户添加到service项目,拥有admin权限
openstack role add --project service --user nova admin
#创建nova服务
openstack service create --name nova --description "OpenStack Compute" compute

openstack-nova-compute 无法启动 openstack nova详解_API_12

3.给Nova服务关联endpoint(端点)

openstack endpoint create --region RegionOne compute public http://ct:8774/v2.1
openstack endpoint create --region RegionOne compute internal http://ct:8774/v2.1
openstack endpoint create --region RegionOne compute admin http://ct:8774/v2.1

openstack-nova-compute 无法启动 openstack nova详解_API_13

4.安装nova组件(nova-api、nova-conductor、nova-novncproxy、nova-scheduler)

yum -y install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler

openstack-nova-compute 无法启动 openstack nova详解_openstack_14

5.修改nova配置文件(nova.conf)

cp -a /etc/nova/nova.conf{,.bak}
 grep -Ev '^$|#' /etc/nova/nova.conf.bak > /etc/nova/nova.conf
#修改nova.conf
 openstack-config --set /etc/nova/nova.conf DEFAULT enabled_apis osapi_compute,metadata
 openstack-config --set /etc/nova/nova.conf DEFAULT my_ip 192.168.61.55			#修改为 ct的IP(内部IP)
 openstack-config --set /etc/nova/nova.conf DEFAULT use_neutron true
 openstack-config --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver
 openstack-config --set /etc/nova/nova.conf DEFAULT transport_url rabbit://openstack:RABBIT_PASS@ct
 openstack-config --set /etc/nova/nova.conf api_database connection mysql+pymysql://nova:NOVA_DBPASS@ct/nova_api
 openstack-config --set /etc/nova/nova.conf database connection mysql+pymysql://nova:NOVA_DBPASS@ct/nova
 openstack-config --set /etc/nova/nova.conf placement_database connection mysql+pymysql://placement:PLACEMENT_DBPASS@ct/placement
 openstack-config --set /etc/nova/nova.conf api auth_strategy keystone
 openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_url http://ct:5000/v3
 openstack-config --set /etc/nova/nova.conf keystone_authtoken memcached_servers ct:11211
 openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_type password
 openstack-config --set /etc/nova/nova.conf keystone_authtoken project_domain_name Default
 openstack-config --set /etc/nova/nova.conf keystone_authtoken user_domain_name Default
 openstack-config --set /etc/nova/nova.conf keystone_authtoken project_name service
 openstack-config --set /etc/nova/nova.conf keystone_authtoken username nova
 openstack-config --set /etc/nova/nova.conf keystone_authtoken password NOVA_PASS
 openstack-config --set /etc/nova/nova.conf vnc enabled true
 openstack-config --set /etc/nova/nova.conf vnc server_listen ' $my_ip'
 openstack-config --set /etc/nova/nova.conf vnc server_proxyclient_address ' $my_ip'
 openstack-config --set /etc/nova/nova.conf glance api_servers http://ct:9292
 openstack-config --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp
 openstack-config --set /etc/nova/nova.conf placement region_name RegionOne
 openstack-config --set /etc/nova/nova.conf placement project_domain_name Default
 openstack-config --set /etc/nova/nova.conf placement project_name service
 openstack-config --set /etc/nova/nova.conf placement auth_type password
 openstack-config --set /etc/nova/nova.conf placement user_domain_name Default
 openstack-config --set /etc/nova/nova.conf placement auth_url http://ct:5000/v3
 openstack-config --set /etc/nova/nova.conf placement username placement
 openstack-config --set /etc/nova/nova.conf placement password PLACEMENT_PASS


#查看nova.conf

 cat /etc/nova/nova.conf

[DEFAULT]
enabled_apis = osapi_compute,metadata		#指定支持的api类型
my_ip = 192.168.61.55				#定义本地IP
use_neutron = true					#通过neutron获取IP地址
firewall_driver = nova.virt.firewall.NoopFirewallDriver
transport_url = rabbit://openstack:RABBIT_PASS@ct	#指定连接的rabbitmq

[api]
auth_strategy = keystone				#指定使用keystone认证

[api_database]
connection = mysql+pymysql://nova:NOVA_DBPASS@ct/nova_api

[barbican]
[cache]
[cinder]
[compute]
[conductor]
[console]
[consoleauth]
[cors]

[database]
connection = mysql+pymysql://nova:NOVA_DBPASS@ct/nova

[devices]
[ephemeral_storage_encryption]
[filter_scheduler]

[glance]
api_servers = http://ct:9292

[guestfs]
[healthcheck]
[hyperv]
[ironic]
[key_manager]
[keystone]

[keystone_authtoken]				        #配置keystone的认证信息
auth_url = http://ct:5000/v3				#到此url去认证
memcached_servers = ct:11211			    #memcache数据库地址:端口
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = NOVA_PASS

[libvirt]
[metrics]
[mks]
[neutron]
[notifications]
[osapi_v21]

[oslo_concurrency]				     	#指定锁路径
lock_path = /var/lib/nova/tmp		  	#锁的作用是创建虚拟机时,在执行某个操作的时候,需要等此步骤执行完后才能执行下一个步骤,不能并行执行,保证操作是一步一步的执行

[oslo_messaging_amqp]
[oslo_messaging_kafka]
[oslo_messaging_notifications]
[oslo_messaging_rabbit]
[oslo_middleware]
[oslo_policy]

[pci]
[placement]
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://ct:5000/v3
username = placement
password = PLACEMENT_PASS

[powervm]
[privsep]
[profiler]
[quota]
[rdp]
[remote_debug]
[scheduler]
[serial_console]
[service_user]
[spice]
[upgrade_levels]
[vault]
[vendordata_dynamic_auth]
[vmware]
[vnc]						                    #此处如果配置不正确,则连接不上虚拟机的控制台
enabled = true		
server_listen =  $my_ip				            #指定vnc的监听地址
server_proxyclient_address =  $my_ip			#server的客户端地址为本机地址;此地址是管理网的地址

[workarounds]
[wsgi]
[xenserver]
[xvp]
[zvm]

[placement_database]
connection = mysql+pymysql://placement:PLACEMENT_DBPASS@ct/placement

openstack-nova-compute 无法启动 openstack nova详解_API_15


openstack-nova-compute 无法启动 openstack nova详解_openstack_16


openstack-nova-compute 无法启动 openstack nova详解_API_17

6. 初始化数据库

#初始化nova_api数据库
su -s /bin/sh -c "nova-manage api_db sync" nova

openstack-nova-compute 无法启动 openstack nova详解_API_18

7.注册cell0数据库

#注册cell0数据库;nova服务内部把资源划分到不同的cell中,把计算节点划分到不同的cell中;openstack内部基于cell把计算节点进行逻辑上的分组
su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
#创建cell1单元格;
su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
#初始化nova数据库;可以通过 /var/log/nova/nova-manage.log 日志判断是否初始化成功
su -s /bin/sh -c "nova-manage db sync" nova
#可使用以下命令验证cell0和cell1是否注册成功
su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova #验证cell0和cell1组件是否注册成功

openstack-nova-compute 无法启动 openstack nova详解_API_19


openstack-nova-compute 无法启动 openstack nova详解_openstack_20


openstack-nova-compute 无法启动 openstack nova详解_API_21

8.启动Nova服务

systemctl enable openstack-nova-api.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
systemctl start openstack-nova-api.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service

openstack-nova-compute 无法启动 openstack nova详解_openstack_22

9.检查nova服务端口

netstat -tnlup|egrep '8774|8775'
 curl http://ct:8774

openstack-nova-compute 无法启动 openstack nova详解_数据库_23


openstack-nova-compute 无法启动 openstack nova详解_openstack_24

【计算节点配置Nova服务-c1-c2节点】

1. 安装nova-compute组件

#安装nova-compute组件
yum -y install openstack-nova-compute
#修改配置文件
计算节点c1和c2配置相同(除了IP地址)
cp -a /etc/nova/nova.conf{,.bak}
grep -Ev '^$|#' /etc/nova/nova.conf.bak > /etc/nova/nova.conf
openstack-config --set /etc/nova/nova.conf DEFAULT enabled_apis osapi_compute,metadata
openstack-config --set /etc/nova/nova.conf DEFAULT transport_url rabbit://openstack:RABBIT_PASS@ct
openstack-config --set /etc/nova/nova.conf DEFAULT my_ip 192.168.61.77 	
openstack-config --set /etc/nova/nova.conf DEFAULT use_neutron true
openstack-config --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver
openstack-config --set /etc/nova/nova.conf api auth_strategy keystone
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_url http://ct:5000/v3
openstack-config --set /etc/nova/nova.conf keystone_authtoken memcached_servers ct:11211
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_type password
openstack-config --set /etc/nova/nova.conf keystone_authtoken project_domain_name Default
openstack-config --set /etc/nova/nova.conf keystone_authtoken user_domain_name Default
openstack-config --set /etc/nova/nova.conf keystone_authtoken project_name service
openstack-config --set /etc/nova/nova.conf keystone_authtoken username nova
openstack-config --set /etc/nova/nova.conf keystone_authtoken password NOVA_PASS
openstack-config --set /etc/nova/nova.conf vnc enabled true
openstack-config --set /etc/nova/nova.conf vnc server_listen 0.0.0.0
openstack-config --set /etc/nova/nova.conf vnc server_proxyclient_address ' $my_ip'
openstack-config --set /etc/nova/nova.conf vnc novncproxy_base_url http://192.168.61.55:6080/vnc_auto.html
openstack-config --set /etc/nova/nova.conf glance api_servers http://ct:9292
openstack-config --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp
openstack-config --set /etc/nova/nova.conf placement region_name RegionOne
openstack-config --set /etc/nova/nova.conf placement project_domain_name Default
openstack-config --set /etc/nova/nova.conf placement project_name service
openstack-config --set /etc/nova/nova.conf placement auth_type password
openstack-config --set /etc/nova/nova.conf placement user_domain_name Default
openstack-config --set /etc/nova/nova.conf placement auth_url http://ct:5000/v3
openstack-config --set /etc/nova/nova.conf placement username placement
openstack-config --set /etc/nova/nova.conf placement password PLACEMENT_PASS
openstack-config --set /etc/nova/nova.conf libvirt virt_type qemu


#配置文件内容如下:
cat nova.conf

[DEFAULT]
enabled_apis = osapi_compute,metadata
transport_url = rabbit://openstack:RABBIT_PASS@ct
my_ip = 192.168.61.66
use_neutron = true
firewall_driver = nova.virt.firewall.NoopFirewallDriver

[api]
auth_strategy = keystone

[api_database]
[barbican]
[cache]
[cinder]
[compute]
[conductor]
[console]
[consoleauth]
[cors]
[database]
[devices]
[ephemeral_storage_encryption]
[filter_scheduler]

[glance]
api_servers = http://ct:9292

[guestfs]
[healthcheck]
[hyperv]
[ironic]
[key_manager]
[keystone]

[keystone_authtoken]
auth_url = http://ct:5000/v3
memcached_servers = ct:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = NOVA_PASS

[libvirt]
virt_type = qemu

[metrics]
[mks]
[neutron]
[notifications]
[osapi_v21]

[oslo_concurrency]
lock_path = /var/lib/nova/tmp

[oslo_messaging_amqp]
[oslo_messaging_kafka]
[oslo_messaging_notifications]
[oslo_messaging_rabbit]
[oslo_middleware]
[oslo_policy]
[pci]

[placement]
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://ct:5000/v3
username = placement
password = PLACEMENT_PASS

[powervm]
[privsep]
[profiler]
[quota]
[rdp]
[remote_debug]
[scheduler]
[serial_console]
[service_user]
[spice]
[upgrade_levels]
[vault]
[vendordata_dynamic_auth]
[vmware]

[vnc]
enabled = true
server_listen = 0.0.0.0
server_proxyclient_address =  $my_ip
novncproxy_base_url = http://192.168.61.55:6080/vnc_auto.html			#比较特殊的地方,需要手动添加IP地址,否则之后搭建成功后,无法通过UI控制台访问到内部虚拟机

[workarounds]
[wsgi]
[xenserver]
[xvp]
[zvm]

openstack-nova-compute 无法启动 openstack nova详解_运维_25

3.开启服务

systemctl enable libvirtd.service openstack-nova-compute.service
 systemctl start libvirtd.service openstack-nova-compute.service

openstack-nova-compute 无法启动 openstack nova详解_openstack_26


openstack-nova-compute 无法启动 openstack nova详解_数据库_27

【controller 节点操作】

1.查看compute节点

#是否注册到controller上,通过消息队列;需要在controller节点执行
openstack compute service list --service nova-compute

openstack-nova-compute 无法启动 openstack nova详解_openstack_28

2.扫描当前openstack

#中有哪些计算节点可用,发现后会把计算节点创建到cell中,后面就可以在cell中创建虚拟机;相当于openstack内部对计算节点进行分组,把计算节点分配到不同的cell中 
 su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova

openstack-nova-compute 无法启动 openstack nova详解_API_29

3.默认每次添加个计算节点

#在控制端就需要执行一次扫描,这样会很麻烦,所以可以修改控制端nova的主配置文件:

vim /etc/nova/nova.conf
[scheduler]
discover_hosts_in_cells_interval = 300			#每300秒扫描一次

systemctl restart openstack-nova-api.service

4.验证计算节点服务

#检查 nova 的各个服务是否都是正常,以及 compute 服务是否注册成功
openstack compute service list

openstack-nova-compute 无法启动 openstack nova详解_消息队列_30

#查看各个组件的 api 是否正常
 openstack catalog list

openstack-nova-compute 无法启动 openstack nova详解_消息队列_31

#查看是否能够拿到镜像
openstack image list

openstack-nova-compute 无法启动 openstack nova详解_数据库_32

#查看cell的api和placement的api是否正常,只要其中一个有误,后期无法创建虚拟机
nova-status upgrade check

openstack-nova-compute 无法启动 openstack nova详解_数据库_33

小结

Nova分为控制节点、计算节点
Nova组件核心功能是调度资源,在配置文件中需要体现的部分:指向认证节点位置(URL、ENDPOINT)、调用服务、注册、提供支持等,配置文件中的所有配置参数基本都是围绕此范围(对实例生命周期管理)进行设置