转自: http://www.cnblogs.com/pycode/p/6494848.htmlcss
*非在线迁移 (有时也称之为‘迁移’)。也就是在迁移到另外的计算节点时的这段时间虚拟机实例是处于宕机状态的。在此状况下,实例须要重启才能工做。html
*在线迁移 (或 '真正的在线迁移')。实例几乎没有宕机时间。用于当实例须要在迁移时保持运行。在线迁移有下面几种类型:python
* 基于共享存储的在线迁移。全部的Hypervisor均可以访问共享存储。 * 块在线迁移。无须共享存储。但诸如CD-ROM之类的只读设备是没法实现的。 * 基于卷的在线迁移。实例都是基于卷的而不是临时的磁盘,无须共享存储,也支持迁移(目前仅支持基于libvirt的hypervisor)。
热迁移(Live Migration,又叫动态迁移、实时迁移),即虚拟机保存/恢复(Save/Restore):将整个虚拟机的运行状态完整保存下来,同时能够快速的恢复到原有硬件平台甚至是不一样硬件平台上。恢复之后,虚拟机仍旧平滑运行,用户不会察觉到任何差别。nginx
OpenStack有两种在线迁移类型:live migration和block migration。Livemigration须要实例保存在NFS共享存储中,这种迁移主要是实例的内存状态的迁移,速度应该会很快。Block migration除了实例内存状态要迁移外,还得迁移磁盘文件,速度会慢些,可是它不要求实例存储在共享文件系统中。
NFS容许一个系统在网络上与他人共享目录和文件。经过使用NFS,用户和程序能够像访问本地文件同样访问远端系统上的文件。数据库
权限检查,执行迁移的用户是否有足够的权限执行动态迁移。swift
参数检查,传递给 API 的参数是否足够和正确,如是否指定了 block-migrate 参数。api
检查目标物理主机是否存在。ruby
检查被迁移的虚拟机是不是 running 状态。bash
检查源和目的物理主机上的 nova-compute service 是否正常运行。markdown
检查目的物理主机和源物理主机是不是同一台机器。
检查目的物理主机是否有足够的内存(memory)。
检查目的和源物理主机器 hypervisor 和 hypervisor 的版本是否相同。
在真正执行迁移前,必须作一下热身,作一些准备工做。
* 在目的物理主机上得到和准备虚拟机挂载的块设备(volume)。
* 在目的物理主机上设置虚拟机的网络(networks)。 * 目的物理主机上设置虚拟机的防火墙(fireware)。
在源物理主机上 detach volume。
在源物理主机上释放 security group ingress rule。
在目的物理主机上更新数据库里虚拟机的状态。
在源物理主机上删除虚拟机。
上面四步正常完成后,虚拟机就成功的从源物理主机成功地迁移到了目的物理主机了
热迁移条件:
1.计算节点之间能够经过主机名互相访问
2.计算节点和控制节点的nova uid和gid保持一致 3.vncserver_proxyclient_address和vncserver_listen 监听的是本地IP 4.必须有共享存储,实例存放在共享存储中,且每一个计算节点均可以访问共享存储。不然只能使用块迁移
添加live_migration_flag
修改nova的配置文件,在[libvirt] 段下 添加以下字段
live_migration_flag="VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_PERSIST_DEST,VIR_MIGRATE_TUNNELLED"
修改libvirt配置
配置versh免密码链接,修改/etc/libvirt/libvirtd.conf
添加以下配置
listen_tls = 0 listen_tcp = 1 tcp_port = "16509" listen_addr = "172.16.201.8" #根据本身的计算节点IP改写 auth_tcp = "none"
修改/etc/sysconfig/libvirtd 添加以下参数
LIBVIRTD_CONFIG=/etc/libvirt/libvirtd.conf LIBVIRTD_ARGS="--listen"
重启libvirt
systemctl restart libvirtd.service
查看监听端口:
[root@compute1 ~]# netstat -lnpt | grep libvirtd tcp 0 0 172.16.206.6:16509 0.0.0.0:* LISTEN 9852/libvirtd
测试:
在compute1节点上:
virsh -c qemu+tcp://compute2/system 在compute2节点上 virsh -c qemu+tcp://compute1/system 若是能无密码链接上去,表示配置没问题
nova list
nova show f3d749ba-98e1-4624-9782-6da729ad164c
查看可用的计算节点
nova-manage service list
查看目标节点资源
nova-manage service describe_resource computer1
开始迁移,正常无任何回显
nova live-migration 8da00f69-05f6-4425-9a8a-df56b79a474f computer1
冷迁移须要启动nova帐户,并配置ssh 免密码认证
usermod -s /bin/bash nova su - nova ssh-keygen -t rsa #生成密钥 cp -fa id_rsa.pub authorized_keys
将密钥复制到全部计算节点的/var/lib/nova/.ssh下,并设置权限为nova用户
编辑/etc/nova/nova.conf的配置文件,修改下面参数
allow_resize_to_same_host=True scheduler_default_filters=RetryFilter,AvailabilityZoneFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter
在计算节点重启nova服务
systemctl restart openstack-nova-compute
在controller节点重启nova 相关服务
systemctl restart openstack-nova-api.service openstack-nova-scheduler.service