设为首页 收藏本站
查看: 1008|回复: 0

[经验分享] Launch和Shut Off操作详解

[复制链接]

尚未签到

发表于 2017-6-27 11:42:19 | 显示全部楼层 |阅读模式
  本节详细分析 instance launch 和 shut off 操作,以及如何在日志中快速定位有用信息的技巧。
Launch
  Launch instance 应该算 Nova 最重要的操作。
  仔细研究 lanuch 操作能够帮助我们充分理解 Nova 各个子服务的协调配合和运行机制。
  前面我们已经以 launch 操作为例详细讨论了各个 nova-* 子服务。 这里不再赘述,只是再回顾一下流程。
DSC0000.png


  •   客户(可以是 OpenStack 最终用户,也可以是其他程序)向 API(nova-api)发送请求:“帮我创建一个 Instance”
  •   API对请求做一些必要处理后,向 Messaging(RabbitMQ)发送了一条消息:“让 Scheduler 创建一个 Instance”
  •   Scheduler(nova-scheduler)从 Messaging 获取到 API 发给它的消息,然后执行调度算法,从若干计算节点中选出节点 A
  •   Scheduler 向 Messaging 发送了一条消息:“在计算节点 A 上创建这个 Instance”
  •   计算节点 A 的 Compute(nova-compute)从 Messaging 中获取到 Scheduler 发给它的消息,然后通过本节点的 Hypervisor Driver 创建 Instance。
  •   在 Instance 创建的过程中,Compute 如果需要查询或更新数据库信息,会通过 Messaging 向 Conductor(nova-conductor)发送消息,Conductor 负责数据库访问。
Shut Off
  下面是 shut off instance 的流程图
DSC0001.jpg


  •   向 nova-api 发送请求
  •   nova-api 发送消息
  •   nova-compute 执行操作
  下面我们详细讨论每一个步骤。
向 nova-api 发送请求
  客户(可以是 OpenStack 最终用户,也可以是其他程序)向 API(nova-api)发送请求:“帮我关闭这个 Instance”
DSC0002.jpg

  查看日志 /opt/stack/logs/n-api.log
DSC0003.jpg

  对于如何在日志文件中快速查找到有用的信息这里多聊几句。 对于初学者,这不是一件容易的事情,因为日志里条目和内容很多,特别是 debug 选项打开之后,容易让人眼花缭乱,无从下手。
  这里给大家几个小窍门:

  •   先确定大的范围,比如在操作之前用 tail -f 打印日志文件,这样需要查看的日志肯定在操作之后的打印输出的这些内容里。 另外也可以通过时间戳来确定需要的日志范围。
  •   利用 “代码模块” 快速定位有用的信息。 nova-* 子服务都有自己特定的代码模块:
    nova-api
    nova.api.openstack.compute.servers
    nova.compute.api
    nova.api.openstack.wsgi
    nova-compute
    nova.compute.manager
    nova.virt.libvirt.*
    nova-scheduler
    nova.scheduler.*
  •   利用 Request ID 查找相关的日志信息。 在上面的日志中个,我们可以利用 “req-1758b389-a2d0-44cc-a95a-6f75e4dc07fd” 这个 Request ID 快速定位 n-api.log 中相与 shut off 操作的其他日志条目。 需要补充说明的是,Request ID 是跨日志文件的,这一个特性能帮助我们在其他子服务的日志文件中找到相关信息,我们后面马上将会看到这个技巧的应用。
nova-api 发送消息
  nova-api 向 Messaging(RabbitMQ)发送了一条消息:“关闭这个 Instance” nova-api 没有将发送消息的操作记录到日志中,不过我们可以通过查看源代码来验证。 一提到源代码,大家可能以为要大海捞针了。其实很简单,上面日志已经清楚地告诉我们需要查看的源代码在 /opt/stack/nova/nova/compute/api.py 的 1977 行,方法是 force_stop。
DSC0004.jpg

  force_stop 方法最后调用的是对象 self.compute_rpcapi 的 stop_instance 方法。 在 OpenStack 源码中,以 xxx_rpcapi 命名的对象,表示的就是 xxx 的消息队列。 xxx_rpcapi.yyy() 方法则表示向 xxx 的消息队列发送 yyy 操作的消息。
  所以 self.compute_rpcapi.stop_instance() 的作用就是向 RabbitMQ 上 nova-compute 的消息队列里发送一条 stop instance 的消息。
  这里补充说明一下: 关闭 instance 的前提是 instance 当前已经在某个计算节点上运行,所以这里不需要 nova-scheduler 再帮我们挑选合适的节点,这个跟 launch 操作不同。
nova-compute 执行操作
  查看计算节点上的日志 /opt/stack/logs/n-cpu.log
DSC0005.jpg

  这里我们利用了 Request ID “req-1758b389-a2d0-44cc-a95a-6f75e4dc07fd” 在 n-cpu.log 中快速定位到 nova-compute 关闭 instance 的日志条目。
小结
  分析某个操作时,我们首先要理清该操作的内部流程,然后再到相应的节点上去查看日志。 例如shut off 的流程为:

  •   向 nova-api 发送请求
  •   nova-api 发送消息
  •   nova-compute 执行操作
  1,2 两个步骤是在控制节点上执行的,查看 nova-api 的日志。 第 3 步是在计算节点上执行的,查看 nova-compute 的日志。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-388588-1-1.html 上篇帖子: instance “error” 了怎么办?- 每天5分钟玩转 OpenStack(159) 下篇帖子: Boot from Volume
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表