Liberty nova-api启动流程分析

本博客欢迎转载,但请注明出处 http://blog.csdn.net/ringoshen/article/details/51321540

由于能力与时间有限,文章内容难免错漏,望大家多加指正,相互进步!

0. 总览

nova的服务在功能上主要分为应用层和逻辑层两类,nova-api就是应用层的服务,而nova-scheduler、nova-conductor等则是逻辑层服务。本文主要通过注释的方式讲述nova-api服务的启动流程。
首先看一下main函数,之后针对几个重要的部分简单跟踪一下。

# nova/cmd/api.py

def main():
    # 加载命令行传入的参数,设置数据库和RPC,argv是服务启动命令的参数列表,
    # ['/usr/local/bin/nova-api', '--config-file', '/etc/nova/nova.conf']
    config.parse_args(sys.argv)

    # 直接调用oslo_log.log设置服务的日志文件
    logging.setup(CONF, "nova")
    # 打补丁的方式导入模块,但默认不开启
    utils.monkey_patch()
    # 其实就是import objects模块的各个object,在RPC接收时用到
    objects.register_all()

    # 根据wiki的解释,应用于admin了解系统运行细节,
    # 通过信号量的方式进行触发,可生成极为详细的运行报告
    gmr.TextGuruMeditation.setup_autorun(version)

    # 创建一个ProcessLauncher对象,也就是服务启动器
    launcher = service.process_launcher()

    # 创建api,我的默认配置是enabled_apis = osapi_compute,metadata
    for api in CONF.enabled_apis:
        # 默认都不使用ssl
        should_use_ssl = api in CONF.enabled_ssl_apis、
        # 创建相应api的WSGIService对象
        server = service.WSGIService(api, use_ssl=should_use_ssl)
        # 启动相应api的服务
        launcher.launch_service(server, workers=server.workers or 1)
    # 监控api服务的worker,不正常结束就reset;接收到终止的信号量就kill workers
    launcher.wait()

以下是本文涉及到的一些文件目录
这里写图片描述

1. 解析命令行参数

主要是设置默认的配置,其中最主要的是RPC的设置和初始化,我的环境的默认driver是rabbitmq。

# nova/config.py

def parse_args(argv, default_config_files=None, configure_db=True,
               init_rpc=True):
    # 设置oslo_log使用的默认选项
    log.set_defaults(_DEFAULT_LOGGING_CONTEXT_FORMAT, _DEFAULT_LOG_LEVELS)
    # 注册命令行和配置选项
    log.register_options(CONF)
    # 设置DB相关的默认选项
    options.set_defaults(CONF, connection=_DEFAULT_SQL_CONNECTION,
                         sqlite_db='nova.sqlite')
    # 设置RPC的默认选项,设置默认exchange为nova
    rpc.set_defaults(control_exchange='nova')

    # ===== 这三个默认配置并不是很懂,之后看懂了补上 =====
    cache.configure(CONF)
    debugger.register_cli_opts()
    config.set_middleware_defaults()
    # ====================================================

    # 解析命令行参数和配置文件
    CONF(argv[1:],
         project='nova',
         version=version.version_string(),
         default_config_files=default_config_files)

    # 初始化RPC。之前都是些默认配置,RPC的初始化过程稍微复杂一些,涉及stevedore模块,
    # 主要涉及几个对象:TRANSPORT, NOTIFICATION_TRANSPORT, LEGACY_NOTIFIER, NOTIFIER
    if init_rpc:
        rpc.init(CONF)
    # 配置sqlalchemy api
    if configure_db:
        sqlalchemy_api.configure(CONF)

2. Guru Meditation Reports

这个模块主要是进行对系统操作的监控,这里可以看一看wiki里的一个展示看一下效果。
如果有兴趣可以看一下wiki的详细解释 Guru Meditation Reports

========================================================================
====                     Guru meditation report                     ====
========================================================================
UUID: 6d4faf99-480c-4d0c-90be-b7d090ecd83e
Time: Mon, 18 Feb 2013 18:01:11 +0000
========================================================================
====                             Config                             ====
========================================================================
DEFAULT:
  allow_resize_to_same_host=True
  allow_same_net_traffic=True
  allowed_direct_url_schemes=[]
  allowed_rpc_exception_modules=['nova.openstack.common.exception', 'nova.exception', 'cinder.exception', 'exceptions']
  api_paste_config=/etc/nova/api-paste.ini
  api_rate_limit=True
  auth_strategy=keystone
  auto_assign_floating_ip=False
  backdoor_port=None
  bandwidth_poll_interval=600
  base_dir_name=_base
  bindir=/home/berrange/src/cloud/nova/bin

  ... ...  ... ...
  ... ...  ... ...

  Thread ID 3
  /usr/lib/python2.7
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值