Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2619236
  • 博文数量: 258
  • 博客积分: 9440
  • 博客等级: 少将
  • 技术积分: 6998
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-03 10:28
个人简介

-- linux爱好者,业余时间热衷于分析linux内核源码 -- 目前主要研究云计算和虚拟化相关的技术,主要包括libvirt/qemu,openstack,opennebula架构和源码分析。 -- 第五届云计算大会演讲嘉宾 微博:@Marshal-Liu

文章分类

全部博文(258)

文章存档

2016年(1)

2015年(4)

2014年(16)

2013年(22)

2012年(41)

2011年(59)

2010年(40)

2009年(75)

分类: 云计算

2013-02-07 13:03:01

    OpenNebula支持虚拟机的冷迁移(migrate)和热迁移(live_migrate,也可称为在线迁移),下面从代码的角度来分析下虚拟机迁移的代码执行路径。


1. OpenNebula中定义的Action的生命周期

    OpenNebula通过定义多种action来表示不同的操作,同时,OpenNebula通过一个统一的框架来处理所有的action,整个处理过程我称为action的生命周期,也可以这样理解,每个对虚拟机的操作都是由一个或多个action组成,所以,action的生命周期也可以理解为虚拟机的生命周期。

    Actions的生命周期如下图所示。

    

   对于OpenNebula的用户来说,每个对虚拟机的操作都是通过RPC请求发起的(rpc的原理和机制不熟悉的同学,可以参见前面的文章《opennebula源码分析 -- XML-RPC 原理分析 》),RPC server(OpenNebula节点)接收到RPC请求后,会进行如下的处理和操作:

    (1)将RPC请求转化为DM(DispatchManager)类的action, DM类负责ation的派发工作

    (2)DM类将action又转化为LCM(LifeCycleManager)类的action,LCM类负责虚拟机的生命状态的设置,如用户看到的Pending,Prolog,Boot,Running,Failed等状态

    (3)LCM类将action又转化为VMM类的(VirtualMachineManager)action,VMM类负责虚拟机相关的实际操作,如创建,删除等,这里的实际操作指的是通过virsh命令执行的操作

    (4)VMM类将通过ssh,登录到物理机上执行virsh命令,来完成action代表的用户的请求

    以Migrate为例,看一下在整个migrate action的生命周期中,虚拟机的状态的变化。

           RUNNING  -->  SAVE_MIGRATE --> PENDING --> PROLOG --> BOOT --> RUNNING

    首先,只有处于RUNNING状态的虚拟机才能进行迁移操作;其次,迁移之前首先要SAVE当前的虚拟机;再次,将SAVE好的虚拟机拷贝到要迁移到的主机;最后,就是一个虚拟机部署操作的生命周期了!


2. Migrate action相关的代码执行流程


3. libvirt层的迁移命令

(1)冷迁移:

    virsh  migrate vm0 qemu+ssh://192.168.35..16/system

将名称为vm0的虚拟机通过ssh协议迁移到主机192.168.35.17上

(2)在线迁移:

    virsh  migrate --live vm0 qemu+ssh://192.168.35.16/system

这里都采用了ssh来进行数据传输,其实还可以利用tcp,如:

    virsh  migrate vm0 qemu+tcp://192.168.35..16/system

阅读(3548) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

mcumsigscr2013-12-25 17:24:17

好文章~~