千家信息网

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

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这期内容当中小编将会给大家带来有关 关于nova-manage service list检测服务状态原理 是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。环境:
千家信息网最后更新 2026年11月04日关于nova-manage service list检测服务状态原理 是什么

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

环境:centos6.5 openstack ice版

1、


2、


3、

vim /usr/bin/nova-manage


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


搜索

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

第二、第三个参数:

console_scripts、nova-manage


得到入口地址为:

nova-manage = nova.cmd.manage:main


4、





5、



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

@args('--service', metavar='', 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:


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


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


7、讲解is_up函数:




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.conf中:


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

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


接下来试验验证一下:


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

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



再来查看状态:

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

时间 服务 状态 检测 数据 原理 代码 内容 函数 参数 就是 差值 数据库 第一次 节点 分析 搜索 更新 配置 一致 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技股 互联网 科技公司 上海卓越科技 互联网 互联网科技股午盘股票涨跌 顺网科技2021年互联网排名 互联网科技博主是什么意思 银川新华互联网科技职业技术培训学校图片 移动互联网科技股 互联网大会黑科技排名 互联网科技创新服务 互联网科技有哪些公司 厦门千工互联网科技有限公司 明优互联网科技有限公司 互联网科技大赛获奖感言 区块链结合互联网科技 陕西九四连强互联网科技有限公司 互联网科技的前景 恒生科技指数 中概互联网 山东蛋芒互联网科技有限公司 恒生互联网科技趋势 互联网公司 科技公司 猪兼强互联网科技 九亚互联网科技 苏州互联网科技贷款公司 为客找房互联网科技公司怎么样 江苏互联网智能科技软件 富国互联网金融科技混合基金 科技互联网专业工作会议发言稿 互联网科技自媒体灵感 颐高云石互联网科技
0