Nova RPC服务的工作流程,以及后面添加自定义Nova模块都是有帮助的。
以Nova Scheduler服务为例,分析Nova RPC服务的启动流程。Nova组件的“大脑”——Nova Scheduler(调度器)。
它是我们后续分析虚拟机创建的基础。这个子服务的作用前面已经介绍过,从其名称也可以看出该子服务就是负责调
度各子服务工作的。首先介绍Nova Scheduler服务的启动脚本,着重介绍Nova rpc Service类的定义。
Nova Scheduler服务的启动脚本如下:(liberty版本的路径是 /nova/cmd/scheduler.py文件)
#加载配置项
CONF = cfg.CONF
CONF.import_opt('scheduler_topic','nova.scheduler.rpcapi')
if __name__ == '__main__':
config.prase_args(sys.argv) #加载控制台传入的参数
logging.setup("nova") #配置服务的日志文件
#定义Nova Scheduler服务对象
server = service.Service.create(binary='nova-scheduler',topic=CONF.scheduler_topic)
service.serve(server) #创建线程运行Nova Scheduler服务
service.wait() #启动Nova Scheduler服务线程
1、CONF.import_opt方法加载一些必要的配置项。
import_opt方法首先加载nova.scheduler.rpcapi模块,然后检查
模块中是否定义了scheduler_topic配置项。如果没有定义则报错。
2、查看nova.scheduler.rpcapi(/nova/scheduler/rpcapi.py)模块的代码,可以看到scheduler_topic配置项定义如
下:scheduler_topic默认项的默认值为scheduler。
rpcapi_opts = [cfg.StrOpt('scheduler_topic', #配置项
default='scheduler', #默认值
help='the topic scheduler nodes listen on'),] #描述
注意:在Nova的许多文件中都定义了一些配置项的默认值,可在nova.conf文件中做相应的配置,覆盖配置项的默认
值。例如:nova.conf文件中添加如下配置scheduler_topic=my_scheduler便可将配置项的值修改。
3、Nova Scheduler服务的启动代码加载控制台传入的参数。可通过如下命令启动Nova Scheduler服务。
Python /opt/stack/nova/cmd/scheduler --config-file=/etc/nova/nova.conf来启动Nova
Scheduler服务,这里的控制台传入的参数就是配置文件的路径。
4、定义和启动Nova Scheduler服务。调用Service类的create方法创建Service对象。create方法中的binary是服务
名,topic是Nova Scheduler服务监听的RPC主题。
5、分别调用service包的serve和wait方法,创建和启动Nova Scheduler服务线程。
Nova所有服务的启动脚本都是大同小异,每个服务的启动脚本需要下面的事情:
1、加载必要的配置项,其中最重要的配置项是RPC服务监听的主题
2、加载控制台输入的配置,其中最重要的配置是配置文件路径
3、配置服务的日志文件
4、调用Service类的create方法创建Service对象
5、调用service包的serve和wait方法创建和启动服务线程。