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

[经验分享] Openstack nova组件基本原理总结

[复制链接]

尚未签到

发表于 2018-5-31 12:47:07 | 显示全部楼层 |阅读模式
1、       nova-compute 在计算节点上运行,负责管理节点上的 instance。

OpenStack 对 instance 的操作,最后都是交给 nova-compute 来完成的。

nova-compute 与 Hypervisor 一起实现 OpenStack 对 instance 生命周期的管理。

———————————————————————————————————————————————————————————————————————————

2、nova-compute 的功能可以分为两类:


  •   定时向 OpenStack 报告计算节点的状态(通过hypervisor来获取主机资源信息)
  •   实现 instance     生命周期的管理·

3、虚拟机创建

nova-compute 创建 instance 的过程可以分为 4 步:


  •   为 instance 准备资源(根据规格flavor准备内存,cpu,硬盘等)
  •   创建 instance 的镜像文件(通过glance下载image并创建instance的镜像文件)
  •   创建 instance 的 XML 定义文件
  •   创建虚拟网络并启动虚拟机
——————————————————————————————————————————————————————————————————————————

4、日志查看:

每个操作都被分配唯一的Request ID,且夸文件


OpenStack 的日志格式都是统一的,如下

<时间戳><日志等级><代码模块><RequestID><日志内容><源代码位置>

简单说明一下
时间戳       日志记录的时间,包括 年 月 日 时 分 秒 毫秒
日志等级          有INFO WARNING ERRORDEBUG等
代码模块          当前运行的模块Request ID     日志会记录连续不同的操作,为了便于区分和增加可读性,每个操作都被分配唯一的Request ID,便于查找
日志内容          这是日志的主体,记录当前正在执行的操作和结果等重要信息
源代码位置日志代码的位置,包括方法名称,源代码文件的目录位置和行号。这一项不是所有日志都有

下面举例说明

2015-12-10 20:46:49.566 DEBUG nova.virt.libvirt.config [req-5c973fff-e9ba-4317-bfd9-76678cc96584None None] Generated XML('<cpu>\n  <arch>x86_64</arch>\n <model>Westmere</model>\n <vendor>Intel</vendor>\n  <topologysockets="2" cores="3" threads="1"/>\n  <featurename="avx"/>\n  <feature name="ds"/>\n <feature name="ht"/>\n  <featurename="hypervisor"/>\n  <featurename="osxsave"/>\n  <featurename="pclmuldq"/>\n  <featurename="rdtscp"/>\n  <feature name="ss"/>\n <feature name="vme"/>\n  <featurename="xsave"/>\n</cpu>\n',) to_xml/opt/stack/nova/nova/virt/libvirt/config.py:82

这条日志我们可以得知:


  •   代码模块是 nova.virt.libvirt.config,由此可知应该是 Hypervisor Libvirt 相关的操作
  •   日志内容是生成 XML
  •   如果要跟踪源代码,可以到 /opt/stack/nova/nova/virt/libvirt/config.py 的 82 行,方法是 to_xml
5、Suspend 和 Pause 操作做个比较:

相同点
两者都是暂停 instance 的运行,并保存当前状态,之后可以通过 Resume 操作恢复

不同点
1.   Suspend 将 instance 的状态保存在磁盘上;Pause 是保存在内存中,所以 Resume 被 Pause的 instance 要比 Suspend 快。

2.   Suspend 之后的 instance,其状态是 Shut Down;而被 Pause 的 instance 状态是Paused。

3.   虽然都是通过 Resume 操作恢复,Pause 对应的 Resume 在OpenStack 内部被叫作 “Unpause”;Suspend对应的 Resume 才是真正的 “Resume”。这个在日志中能体现出来。

6、Nova 虚拟机快照(snapshot)

暂停Instance à对Instance的镜像文件创建快照à恢复Instanceà将快照(snapshot)上传到Glance上


7、恢复故障虚拟机(Rebuild Instance)

RebuildInstance 会用snapshot替换Instance当前的镜像文件,并且保持该Instance的其他资源属性不变

流程:

Rebuild请求à关闭当前Instanceà下载新的Image,并准备Instance的镜像文件 à启动Instance


8、Instance shelve(释放占用的资源)

Instance 被 Suspend 后虽然处于 Shut Down 状态,但 Hypervisor 依然在宿主机上为其预留了资源,以便在以后能够成功 Resume。

如果希望释放这些预留资源,可以使用 Shelve 操作。Shelve 会将 instance 作为 image 保存到 Glance 中,然后在宿主机上删除该 instance。

流程:

接收shelve消息à关闭instanceà对Instance 执行snapshot操作,成功后将snapshot生成的image保存到glance上,命名为<instance name>-shelvedà最后删除 instance 在宿主机上的资源à暂停操作成功执行后,instance 的状态变为 Shelved Offloaded,电源状态是 Shut Down

—————————————————————————————————————————————————————————————————————————————————————

9、Unshelve (相当于用snapshot快照生成的image去重新创建一个与原来的instance一样的虚拟机,故流程与launch instance时一直的)

因为 Glance 中保存了 instance 的 image,unshelve 的过程其实就是通过该 image launch 一个新的 instance,nova-scheduler 也会调度合适的计算节点来创建该 instance。

instance unshelve 后可能运行在与 shelve 之前不同的计算节点上,但 instance 的其他属性(比如 flavor,IP 等)不会改变。


10、Migrate 虚拟机迁移

迁移schedule时防止选择源主机的机制:nova-compute 在做 migrate 的时候会检查目标节点,如果发现目标节点与源节点相同,会抛出 UnableToMigrateToSelf 异常。Nova-compute 失败之后,scheduler 会重新调度,由于有RetryFilter,会将之前选择的源节点过滤掉,这样就能选到不同的计算节点了。

总体思路:

nova-scheduler 发送消息,通知计算节点可以迁移instance 了ànova-compute 执行操作 à源节点的instacne关闭,将instance的镜像文件上传到目的主机

详细流程:

nova-compute 首先会尝试通过 ssh 在目标节点上的 instance 目录里 touch 一个临时文件,如果 touch 失败,说明目标节点上还没有该 instance 的目录,也就是说,源节点和目标节点没有共享存储。那么接下来就要在目标节点上创建 instance 的目录à关闭 instanceà将 instance 的镜像文件通过 scp 传到目标节点上à在目标节点上启动 instance(类似launch)

注:ssh 和scp需要密码验证,各个计算节点之间需要无密码连接,因为后台无法输入密码

11、虚拟机热迁移(Live Migrate):

a、基于共享存储的虚拟机热迁移(instance的镜像文件不需要迁移,只需要将instance的状态迁移到目标节点)

b、基于本地存储的整机热迁移(block Migrate:instance在迁移的时候需要将其镜像文件从源节点传到目标节点)

虚拟机block Migrate

源和目标节点的CPU类型需要一致。

源和目标节点的Libvirt版本要一致。

块迁移(block Migrate)目前只支持vfat类型的config driver 所以在nova-compute.conf中指定config_drive_format=vfat

具体流程:

Api接收消息(live_migrate)à目标节点执行迁移前的准备工作(首先将instance的数据迁移过来,包括镜像文件,虚拟机网络,内存等资源,目标节点会创建Instance目录)à源节点暂停Instance à在目标节点上Resume instance à在源节点上执行迁移后的处理工作,删除instance à在目标节点上创建XML文件,在hyphervisor中定义instance 使之下次可以正常启动。


共享存储迁移:

流程:

1、instance在迁移的时候需要将其镜像文件从元节点传到目标节点


12、虚拟机系统挂了(rescue)

流程:

Nova rescue 虚拟机名 (默认使用当前instance的image) à使用image创建引导盘 disk.rescue à启动虚拟机 à使用virsh edit 虚拟机名 修改disk.rescue为vda 真正的启动盘修改为vdb


13计算节点宕机,nova-compute进程已经挂掉

Rebuild 可以恢复损坏的 instance。

那如果是宿主机坏了怎么办呢? 比如硬件故障或者断电造成整台计算节点无法工作,该节点上运行的 instance 如何恢复呢?

用 Shelve 或者 Migrate 可不可以? 很不幸,这两个操作都要求 instance 所在计算节点的 nova-compute 服务正常运行。幸运的是,还有 Evacuate 操作。

Evacuate可在 nova-compute 无法工作的情况下将节点上的instance 迁移到其他计算节点上。但有个前提: Instance 的镜像文件必须放在共享存储上。

流程:(只能在后台执行

执行命令nova evacuate 主机名--no-shared-storage  à消息下发到nova-api ànova-schedule筛选好主机 ànova-compute分配资源,使用共享存储上的镜像文件à启动instance

  

运维网声明 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-485350-1-1.html 上篇帖子: 部署 instance 到 VXLAN 下篇帖子: Ceph+Openstack相关入门
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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