温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

关于nova-manage service list检测服务状态原理 是什么

发布时间:2021-12-01 16:52:41 来源:亿速云 阅读:189 作者:柒染 栏目:云计算

这期内容当中小编将会给大家带来有关 关于nova-manage service list检测服务状态原理 是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

环境:centos6.5 openstack ice版

1、

关于nova-manage service list检测服务状态原理 是什么


2、

关于nova-manage service list检测服务状态原理 是什么


3、

vim /usr/bin/nova-manage

关于nova-manage service list检测服务状态原理 是什么


load_entry_point('nova==2014.1.1', 'console_scripts', 'nova-manage')()

第一个参数定向到 /usr/lib/python2.6/site-packages/nova-2014.1.1-py2.6.egg-info/

然后搜索EGG-INFO/entry_points.txt

 vim /usr/lib/python2.6/site-packages/nova-2014.1.1-py2.6.egg-info/entry_points.txt 

关于nova-manage service list检测服务状态原理 是什么


搜索

load_entry_point('nova==2014.1.1', 'console_scripts', 'nova-manage')()

第二、第三个参数:

console_scripts、nova-manage

关于nova-manage service list检测服务状态原理 是什么


得到入口地址为:

nova-manage = nova.cmd.manage:main


4、

关于nova-manage service list检测服务状态原理 是什么



关于nova-manage service list检测服务状态原理 是什么


关于nova-manage service list检测服务状态原理 是什么


5、

关于nova-manage service list检测服务状态原理 是什么



 @args('--host', metavar='<host>', help='Host')

    @args('--service', metavar='<service>', help='Nova service')

    def list(self, host=None, service=None):

        """Show a list of all running services. Filter by host & service

        name

        """

        servicegroup_api = servicegroup.API()

        ctxt = context.get_admin_context()

        services = db.service_get_all(ctxt)  #获取nova service数据库表所有数据

        services = availability_zones.set_availability_zones(ctxt, services)

        if host:

            services = [s for s in services if s['host'] == host]

        if service:

            services = [s for s in services if s['binary'] == service]

        print_format = "%-16s %-36s %-16s %-10s %-5s %-10s"

        print(print_format % ( #此处打印出图1.1

                    _('Binary'),

                    _('Host'),

                    _('Zone'),

                    _('Status'),

                    _('State'),

                    _('Updated_At')))

        for svc in services:

            alive = servicegroup_api.service_is_up(svc)  #检测服务是否为alive 、重点解析此处的代码根据

            art = (alive and ":-)") or "XXX"

            active = 'enabled'

            if svc['disabled']:

                active = 'disabled'

            print(print_format % (svc['binary'], svc['host'],

                                  svc['availability_zone'], active, art,

                                  svc['updated_at']))


图1.1:

关于nova-manage service list检测服务状态原理 是什么


6、 service_is_up:(根据到7讲解is_up函数)

关于nova-manage service list检测服务状态原理 是什么

关于nova-manage service list检测服务状态原理 是什么


注:大家可以再下图中看到,判断服务状态,可以有多重方式,有db、还有zookeeper等。从上图可知本次中使用的为db检查服务状态。

关于nova-manage service list检测服务状态原理 是什么


7、讲解is_up函数:


 

关于nova-manage service list检测服务状态原理 是什么



    def is_up(self, service_ref):

        """Moved from nova.utils

        Check whether a service is up based on last heartbeat.

        """

        last_heartbeat = service_ref['updated_at'] or service_ref['created_at']  #获取服务最后一次更新时间,或者第一次创建时间,最为心跳时间

         if isinstance(last_heartbeat, six.string_types):  #此处代码就是将上面获取的心跳时间,转换成datetime时间

            # NOTE(russellb) If this service_ref came in over rpc via

            # conductor, then the timestamp will be a string and needs to be

            # converted back to a datetime.

            last_heartbeat = timeutils.parse_strtime(last_heartbeat)

        else:

            # Objects have proper UTC timezones, but the timeutils comparison

            # below does not (and will fail)

            last_heartbeat = last_heartbeat.replace(tzinfo=None)

        # Timestamps in DB are UTC.

        elapsed = timeutils.delta_seconds(last_heartbeat, timeutils.utcnow())  #此处计算出心跳时间与当前时间的差值

        LOG.debug('DB_Driver.is_up last_heartbeat = %(lhb)s elapsed = %(el)s',

                  {'lhb': str(last_heartbeat), 'el': str(elapsed)})

        return abs(elapsed) <= CONF.service_down_time#此处根据差值来判断服务是否正常(比较时间为配置文件配置。如下图:)

关于nova-manage service list检测服务状态原理 是什么


nova.conf中:

关于nova-manage service list检测服务状态原理 是什么


所以最近更新时间,或者第一次创建时间与当前时间间隔少于CONF.service_down_time(60秒),则认为服务alive

从这里也可以得知为什么控制节点和计算节点的时间要一致。


接下来试验验证一下:

关于nova-manage service list检测服务状态原理 是什么

关于nova-manage service list检测服务状态原理 是什么


现在强制修改数据库表中nova-compute的update_at时间:

由2014-08-04 23:51:24修改为:2014-08-04 22:51:24


关于nova-manage service list检测服务状态原理 是什么


再来查看状态:

关于nova-manage service list检测服务状态原理 是什么

上述就是小编为大家分享的 关于nova-manage service list检测服务状态原理 是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI