海云捷迅云课堂专题,旨在秉承开源理念,为大家提供OpenStack技术原理与实践经验,该专题文章均由海云捷迅工程师理论与实践相结合总结而成,如大家有其他想要了解的信息,可留言给我们,我们会根据问题酌情回复。

1 驱散目的

当云主机所在节点宕机或者节点网络异常时可以触发驱散操作,可以将宕机节点上的云主机驱散到其他节点,从而可以继续访问这些云主机。

这里有必要说明一点,驱散和迁移的关联与区别,关联在于驱散操作可以使用迁移命令来查看驱散的信息,而区别在于迁移时源节点和目标节点都是正常的,节点上的nova-compute服务也是正常的,这说明在没有共享存储的情况下也是可以进行迁移的;而驱散时源节点是宕机的状态或者nova-compute服务不正常,所以驱散无法访问源节点必须访问共享存储获取云主机磁盘数据。这是二者的本质区别。

2 简要流程

1、nova-api接受驱散操作,校验云主机所在节点状态为down,并且云主机状态为active,stopped,error才能执行evacuate并创建该云主机的迁移任务,这里的迁移类型为evacuation,可以通过nova migration-list命令查看驱散执行情况。

2、之后nova-api发送rpc到nova-condu ctor进行云主机重建rebuild_instance。

3、然后nova-conductor接收到rebuild_i nstance的rpc请求后,调用nova-scheduler选择资源足够的可用节点,并获取该云主机的迁移任务,从该任务中,获取云主机相关的配置信息。

4、nova-conductor使用被选中的可用节点进行rebuild_instance

5、可用节点的nova-compute接收到rebuild_instance的rpc消息后重新设置该云主机对应的网络端口,直接使用云主机的云硬盘,最终启动云主机。

6、宕机节点恢复后,nova-compute服务会自动检测执行驱散操作成功的云主机,并对应云主机在本机的信息,而对于驱散操作失败的云主机不做任何操作。

3 代码分析

3.1  驱散api接口代码

nova-api接收驱散操作请求,代码位于nova/api/compute/evacuate.py

之后会调用nova/compute/api.py,并在调用时校验云主机状态,处于ACTIVE,STOPPED以及ERROR状态的云主机才能进行驱散操作。

这里调用了rebuild_instance函数,并且没有指定镜像,而是根据原有信息重建云主机。一般对于重建云主机功能是指定镜像进行重建,而驱散是利用原云主机的数据进行重建,这是驱散功能和重建功能的区别。

3.2 驱散conductor部分代码

之后调用到nova/conductor/api.py

然后nova/conductor/rpcapi.py

这里的cast调用是异步的,是在nova-api进程里面调用的,实际在此之前的调用都是在nova-api的进程里面,而将rebuild_instance调用发送到nova-conductor后,此时nova-api的处理才告一段落,nova-conductor服务才真正接手处理。最后会调用到nova/conductor/manager.py

这里没有将涉及nova-scheduler部分代码列出,实际这里的调度主要是通过过滤filter来实现的,检查节点是否有可用的CPU和内存等。

需要注意的是,若是没有指定目标节点则scheduler会自动选择一个合适的节点进行驱散,若没有找到合适的节点则驱散失败,云主机状态会出错;注意这里还有一个异常,不支持的策略异常UnsupportedPolicyException,这个异常一般是出现亲和性策略时的异常,也就是若云主机设置了某些亲和性策略则有可能导致驱散失败。

上述在调度节点出现的两个异常无效主机和不支持策略,从而导致驱散失败后,在节点恢复后,不会做任何操作,重置云主机状态之后,是可以在恢复后的节点启动云主机的。

3.3 驱散compute部分代码

之后调用nova/compute/rpcapi.py

然后就会调用到nova/compute/manager.py的rebuild_instance函数,最终会调用_do_rebu ild_instance函数,

一般到了nova-compute这一侧,云主机开始重建了,但不能说完全没有问题了,这里在云主机保存数据时,有可能会出错,原因就是发送消息到nova-conductor出错了,从而数据库里面的该云主机的数据没有更新,从而导致云主机出现错误状态。

需要注意的是,从代码看如果云主机已经在其他节点上启动了,但是其显示为错误状态,查看驱散为失败状态,若要恢复云主机,这个时候是不能直接重置云主机的,需要修改数据库instances表,将对应云主机的host和node字段值为启动节点的名称,宕机节点恢复后nova-compute服务启动后会自动删除本机节点上云主机信息。

4 故障

4.1 故障说明

对于云主机驱散操作失败的,一般存在以下几个原因。

1.在nova-scheduler调度时没有找到可用的节点导致驱散失败。

2.在nova-scheduler调度时若云主机存在亲和性策略可能导致驱散失败。

3.发送消息给nova-conductor保存云主机数据时出错,也即发送消息时出现异常,导致驱散出错。

4.2 故障恢复

出现的故障如何进行修复,这里有一个重要的区分条件,就是云主机是否在其他节点上对应的信息,对于前面两点,云主机在其他节点没有对应信息,待宕机节点恢复后重置云主机状态即可;对于后面一点,如果云主机在其他节点上也有对应信息了,就不能直接重置状态操作了,目前对于这样的问题没有对应具体的处理命令,所以需要修改数据库。这里重申一遍在操作数据库时请先保存数据库,也请慎重操作数据库。

4.3 重置云主机

如何重置云主机状态,在终端使用如下命令,

nova reset-state –active <server>

如果是使用海云的AWCloud产品的话,可以直接在页面上进行操作,如下图

4.4 修改数据库

对于驱散出错的云主机,先找到云主机的ID,

nova list |grep vm_name

记录返回的云主机ID,在修改数据库时需要用到这个ID值。

修改数据库前,请先备份数据库。

mysqldump -u nova -p nova > nova.sql

之后会提示输入密码,完成备份后,再修改数据库表。

登陆nova数据库,修改instances表,具体sql语句如下,

update instances set host=’node-name’, node=’node-name.node.consul’ where uuid=’ID’

修改后退出数据库,然后重置云主机状态。

【海云捷迅云课堂】云主机驱散说明相关推荐

  1. 海云捷迅的教育云实战经验分享

    在互联网时代,大数据.云计算.移动化.社交网络.物联网等新技术层出不穷,对教育信息化应用也产生了重大影响,大数据学习分析.教育云.HPC.移动教育等应用逐渐成为教育行业的热点. 然而,教育系统对于信息 ...

  2. 教育行业云迁移最佳实践:海云捷迅使用HyperMotion云迁移产品为北京某大学实施渐进式迁移,成功率100%

    项目概述 北京某大学是教育部直属的全国重点大学,是国家首批"211工程"重点建设高校和国家"优势学科创新平台"建设项目试点高校,是世界一流学科建设高校. 学校现 ...

  3. 用SaaS的方法做云管理 海云捷迅的创新之法

    [51CTO.com原创稿件]如今,OpenStack已经逐渐开始被企业所接受,将OpenStack部署在企业的生产环境中,但是,OpenStack发展了六年后,我们仍然看到不少OpenStack的失 ...

  4. 【海云捷迅云课堂】vGPU在OpenStack中的应用

    海云捷迅云课堂专题,旨在秉承开源理念,为大家提供OpenStack技术原理与实践经验,该专题文章均由海云捷迅工程师理论与实践相结合总结而成,如大家有其他想要了解的信息,可留言给我们,我们会根据问题酌情 ...

  5. 【海云捷迅云课堂】DPDK技术分享文档

    海云捷迅云课堂专题,旨在秉承开源理念,为大家提供OpenStack技术原理与实践经验,该专题文章均由海云捷迅工程师理论与实践相结合总结而成,如大家有其他想要了解的信息,可留言给我们,我们会根据问题酌情 ...

  6. 【海云捷迅云课堂】分布式存储系统纠删码技术分享

    云课堂专题 海云捷迅云课堂专题,旨在秉承开源理念,为大家提供OpenStack技术原理与实践经验,该专题文章均由海云捷迅工程师理论与实践相结合总结而成,如大家有其他想要了解的信息,可留言给我们,我们会 ...

  7. 2018最值得期待:为AI提供基础云平台的海云捷迅

    今天是大年初二,给您拜年! 今年春节不一样,中国云报携手为AI提供基础云平台的海云捷迅给您拜年! 以下是海云捷迅CTO李华的新年寄语 北京海云捷迅科技有限公司(简称AWCloud海云捷迅),国内领先的 ...

  8. 专访李华:低调的海云捷迅如何优雅做“减法”

    OpenStack刚刚在上周过完了6周岁生日,从最初的炒作到现在的趋于理性,无论是行业领袖还是初创新秀都逐渐抛弃浮躁,脚踏实地让OpenStack真正落地,6年的时光,让OpenStack这个曾经很少 ...

  9. 化繁为简 海云捷迅为企业提供应用OpenStack新“姿势”

    自2010年10月 OpenStack首个正式版本Austin发布至今,已有近七年的发展历程.相比Cloudstack.OpenNebula等开源技术,OpenStack发展最为迅速,随时间推移渐渐趋 ...

最新文章

  1. ActiviteX 服务
  2. python读取html文件中的表格数据_Python 读取各类文件格式的文本信息 | doc,excel,html,mht...
  3. 【业务知识】数字档案馆建设内容
  4. 简易版jQuery——mQuery
  5. MySQL基础---增删改查语法
  6. 解决,文件上传到 ftp 服务器,中文出现乱码问题
  7. Spring Data JPA 从入门到精通~@Query详解
  8. matplotlib中color可用的颜色
  9. 标注工具——yarn的学习笔记
  10. Manecher算法
  11. Iaas,paas,saas区别与联系
  12. 简述Java面向对象的基本思想_Java面向对象的基本思想理解
  13. lomboz连接mysql数据库_将Lomboz Eclipse 连接上 Oracle 11g
  14. 千博日志索引,收录了带头大哥、laok、王国强、严为民等人的博客
  15. 我只用了3步,实现了一个逼真的3D场景渲染
  16. 【javascript】js面试题原型和原型链
  17. 【ZJOJ 5454】【NOIP2017提高A组冲刺11.5】仔细的检查
  18. 区块链仿真工具SimBlock
  19. 软件测试-按测试阶段/对象/测试手段分类
  20. 人工智能、机器学习和深度学习的区别

热门文章

  1. python 在sublime上搭建谷歌翻译器平台
  2. 编程之美:三盏灯问题
  3. 两个软件,让你对主机内显卡的信息和性能有一个更深刻的认识
  4. Flutter学习之路(一)
  5. UICC 之 USIM 详解全系列——Commands与Responses结构
  6. 华硕RX310拆机图教程,加固态/加内存
  7. EMC-如何改善开关电源电路的EMI特性?-dv/dt和di/dt
  8. 后端开发【一大波有用知识】Redis的线程模型和异步机制
  9. linux cd 两点,Linux cd命令详解
  10. 用 Python 远程控制你的电脑