why 发表于 2018-6-2 08:36:42

Openstack Nova 二次开发之Nova

主要是讲如何启动openstack nova-extend services,该服务用于Openstack 二次扩展及部分需求开发,例如 ,节点巡检,动态迁移(基于FUSE 文件系统实现,分布式系统,如MooseFS),文件注入,Nova 服务的自身修复,instances IO 控制,instances CPU 隔离技术实现等其他需求开发

第一章:如何create openstack nova-extend service

   a) 创建python-extend 文件
      cp -fr /usr/bin/python /usr/bin/python-extend
      用于启动openstack nova-extend 服务,Python 服务启动nova-extend ,socket 模块不能正常果子,具体原因在于协程分装,无法使用socket,threading等模块属性

b)创建启动程序python-extend 文件,保留在/usr/bin/
#!/usr/bin/python-extend
# PBR Generated from 'console_scripts'
import sys
from nova.cmd.extend import main
if __name__ == "__main__":
    sys.exit(main())   c) 创建fromnova.cmd.extend import main 程序,调用nova.services.py
# vim: tabstop=4 shiftwidth=4 softtabstop=4
#    Copyright 2012 IBM Corp.
#
#    Licensed under the Apache License, Version 2.0 (the "License"); you may
#    not use this file except in compliance with the License. You may obtain
#    a copy of the License at
#
#         http://www.apache.org/licenses/LICENSE-2.0
#
#    Unless required by applicable law or agreed to in writing, software
#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
#    License for the specific language governing permissions and limitations
#    under the License.
"""Starter script for Nova Extend."""
import sys
from oslo.config import cfg
from nova import config
from nova import objects
from nova.openstack.common import log as logging
from nova import service
from nova import utils
CONF = cfg.CONF
CONF.import_opt('topic', 'nova.extend.api', group='extend')
def main():
    objects.register_all()
    config.parse_args(sys.argv)
    logging.setup("nova")
    utils.monkey_patch()
    server = service.Service.create(binary='nova-extend',
                                    topic=CONF.extend.topic,
                                    manager=CONF.extend.manager)
    service.serve(server, workers=CONF.extend.workers)
    service.wait()   d) /etc/nova.conf 配置
extend_manager=nova.extend.manager.ExtendManager
    e) 创建openstack-nova-extend 启动服务脚步
#!/bin/sh
#
# openstack-nova-extendOpenStack Nova Compute DB Access service
#
# chkconfig:   - 98 02
# description: Implementation of an S3-like storage server based on local files.
### BEGIN INIT INFO
# Provides:
# Required-Start: $remote_fs $network $syslog
# Required-Stop: $remote_fs $syslog
# Default-Stop: 0 1 6
# Short-Description: OpenStack Nova Compute DB Access service
# Description: Service to handle database access for compute nodes
### END INIT INFO
. /etc/rc.d/init.d/functions
suffix=extend
prog=openstack-nova-$suffix
exec="/usr/bin/nova-$suffix"
config="/etc/nova/nova.conf"
pidfile="/var/run/nova/nova-$suffix.pid"
logfile="/var/log/nova/$suffix.log"
[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
lockfile=/var/lock/subsys/$prog
start() {
    [ -x $exec ] || exit 5
    [ -f $config ] || exit 6
    echo -n $"Starting $prog: "
    daemon --user nova --pidfile $pidfile "$exec --logfile $logfile &>/dev/null & echo \$! > $pidfile"
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}
stop() {
    echo -n $"Stopping $prog: "
    killproc -p $pidfile $prog
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}
restart() {
    stop
    start
}
reload() {
    restart
}
force_reload() {
    restart
}
rh_status() {
    status -p $pidfile $prog
}
rh_status_q() {
    rh_status >/dev/null 2>&1
}
case "$1" in
    start)
      rh_status_q && exit 0
      $1
      ;;
    stop)
      rh_status_q || exit 0
      $1
      ;;
    restart)
      $1
      ;;
    reload)
      rh_status_q || exit 7
      $1
      ;;
    force-reload)
      force_reload
      ;;
    status)
      rh_status
      ;;
    condrestart|try-restart)
      rh_status_q || exit 0
      restart
      ;;
    *)
      echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
      exit 2
esac
exit $?f) 启动openstack-nova-extend服务

# service openstack-nova-extend restart
# tar -xzf /var/log/nova/extend.log
2014-08-04 23:18:58.325 47419 INFO nova.openstack.common.service [-] Caught SIGTERM, exiting
2014-08-04 23:19:00.151 45666 INFO nova.openstack.common.periodic_task [-] Skipping periodic task _periodic_update_dns because its interval is negative
2014-08-04 23:19:00.183 45666 AUDIT nova.service [-] Starting extend node (version 2013.2.1-1.el6)
2014-08-04 23:19:00.513 45666 INFO nova.openstack.common.rpc.common Connected to AMQP server on 192.168.8.180:5672g) openstack-nova-extend 消息队列信息
# rabbitmqctl list_queues|grep extend
extend 0
extend.athCloud.8.180.abs.com.cn 0
extend_fanout_6dbb351ab48445cfaadc9de37e87d68f 0
extend_fanout_e870b14296354eddba09389319a9c590 0h) nova-manager service list 查看nova-extend服务状态
# nova-manage service list
Binary         Host                                 Zone             Status   State Updated_At
nova-conductor   athController.8.180.abs.com.cninternal         enabled    :-)   2014-08-04 15:22:20
nova-consoleauth athController.8.180.abs.com.cninternal         enabled    :-)   2014-08-04 15:22:19
nova-cert      athController.8.180.abs.com.cninternal         enabled    :-)   2014-08-04 15:22:20
nova-scheduler   athController.8.180.abs.com.cninternal         enabled    :-)   2014-08-04 15:22:18
nova-network   athController.8.180.abs.com.cninternal         enabled    :-)   2014-08-04 15:22:11
nova-compute   athController.8.180.abs.com.cnnova             enabled    :-)   2014-08-04 15:22:10
nova-console   athController.8.180.abs.com.cninternal         enabled    :-)   2014-08-04 15:22:17
nova-extend      athController.8.180.abs.com.cninternal         enabled    :-)   2014-08-04 15:22:10    i) 总结
    openstack开发其实并不是很难,只要了解nova-compute,nova-api启动过程,参照文档基本都能实现
    到此openstack Nova extend 服务启动实现完毕,下一章节将会在下周一撰写openstack nova-extend nova.extend.manager 功能实现,谢谢大家,如有不明白的地方请留言,我会在中午时间一一帮助大家解答,欢迎点评
    写的不好的地方还希望大牛们指点,共同学习
页: [1]
查看完整版本: Openstack Nova 二次开发之Nova