nova部分操作源码分析

nova进行volume retype

nova.compute.api.API.swap_volume
  -> cinderclient.v3.volumes.VolumeManager.begin_detaching # 将源盘状态修改为detaching
    -> cinder.volume.api.API.begin_detaching
  -> nova.volume.cinder.API.attachment_create # 创建新盘的挂载信息并保留新盘,如果是cinderclient版本低于3.44,这里会调用reserve_volume
    -> cinder.volume.api.API.attachment_create
  -> nova.compute.manager.ComputeManager.swap_volume
    -> _do_swap_volume
      -> _swap_volume
        -> _init_volume_connection
          -> cinder.volume.api.API.attachment_update # 挂载新盘,更新新盘挂载信息
        -> nova.virt.libvirt.driver.LibvirtDriver.swap_volume
          -> _connect_volume # 扫盘
            -> os_brick.initiator.connect_volume
          -> _swap_volume
            -> nova.virt.libvirt.guest.BlockDevice.abort_job # 中止源盘工作
            -> BlockDevice.copy # 数据拷贝
            -> BlockDevice.abort_job # 结束
            -> nova.virt.libvirt.host.Host.write_instance_config # 更新虚机xml配置
          -> _disconnect_volume
            -> os_brick.initiator.disconnect_volume
        -> cinderclient.v3.attachments.VolumeAttachmentManager.complete
        -> cinder.volume.api.API.attachment_delete # 卸载源盘
        -> cinder.volume.api.API.migrate_volume_completion 
    -> bdm.update # 更新bdm信息

热迁移

nova.compute.api.API.live_migrate
  -> nova.conductor.api.ComputeTaskAPI.live_migrate_instance
    -> nova.conductor.manager.ComputeTaskManager.live_migrate_instance
      -> _live_migrate
        -> nova.conductor.tasks.live_migrate.LiveMigrationTask._execute
          # 两种实现: 指定目标节点,
          -> _find_destination # 没有指定节点,则筛选目标节点
          -> _check_compatible_with_source_hypervisor # 如果指定了目标节点,对指定的目标节点进行信息查询以及可用性检测
            -> _call_livem_checks_on_host
              -> nova.compute.manager.ComputeManager.check_can_live_migrate_destination # 通过rpcapi向目标nova-compute确实是否可以热迁移
                -> nova.compute.manager.ComputeManager.check_can_live_migrate_source # 通过rpcapi向源nova-compute确实是否可以热迁移
          -> nova.compute.mananger.ComputeManager.live_migration
            -> _do_live_migration
              -> _do_pre_live_migration_from_source
                -> _get_instance_block_device_info
                -> ComputeManager.pre_live_migration # 通过rpc在目标节点开始准备热迁移
                  -> cinder.volume.api.API.attachment_create # 在目标节点映射磁盘
                  -> nova.virt.libvirt.driver.LibvirtDriver.pre_live_migration
                    -> _connect_volume # 目标节点扫盘
                    -> _pre_live_migration_plug_vifs # 目标节点挂载网络设备
                  -> nova.network.neutron.API.setup_networks_on_host # 目标节点初始化网络
            -> nova.virt.libvirt.driver.LibvirtDriver.live_migration
              -> _live_migration
                -> _live_migration_operation # spawn一个绿色线程来完成迁移
                  -> nova.virt.libvirt.guest.Guest.migrate
                -> opthread.link
                -> _live_migration_monitor # 循环查询并等待guest的type变为VIR_DOMAIN_JOB_COMPLETED
                  -> nova.compute.manager.ComputeManager._post_live_migration # 传入的post_method为_post_live_migration
                    -> nova.virt.libvirt.LibvirtDriver.post_live_migration
                      -> _disconnect_volume  # 源节点卸载磁盘
                    -> _post_live_migration_remove_source_vol_connections
                      -> cinder.volume.api.API.attachment_delete # 源节点解除映射
                    -> nova.network.neutron.API.migrate_instance_start # 迁移网络实例
                    -> nova.virt.libvirt.LibvirtDriver.post_live_migration_at_source
                      -> unplug_vifs
                        -> _unplug_vifs # 源节点挂载网络设备
                    -> free_pci_device_allocations_for_instance # 清理源节点pci设备
                    -> nova.virt.libvirt.LibvirtDriver.cleanup # 其余清理工作,包含本地磁盘,虚机文件等
                    -> nova.compute.manager.ComputeManager.post_live_migration_at_destination # 通过rpcapi让目标节点完成迁移结尾工作
                      -> nova.network.neutron.API.setup_networks_on_host # pre节点已经调用过一次
                      -> nova.network.neutron.API.migrate_instance_finish  # 完成网络实例的迁移
                      -> nova.virt.libvirt.LibvirtDriver.post_live_migration_at_destination
                      -> instance.save # 设置虚机电源状态、节点信息
                      -> nova.network.neutron.API.setup_networks_on_host # 停止源节点网络设备
                      
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值