一、关于动态迁移

动态迁移(Live Migration):也叫在线迁移(Online Migration)。就是在保证虚拟机上服务正常运行的同时,将一个虚拟系统从一个物理主机移动到另一个物理主机的过程。该过程不会对最终用户造成明显的影响,从而使得管理员能够在不影响用户正常使用的情况下,对物理服务器进行离线维修或者升级。
与静态迁移不同的是,为了保证迁移过程中虚拟机服务的可用,迁移过程仅有非常短暂的停机时间。迁移的前面阶段,服务在源主机的虚拟机上运行,当迁移进行到一定阶段,目的主机已经具备了运行虚拟机系统的必须资源,经过一个非常短暂的切换,源主机将控制权转到目的主机,虚拟机系统在目的主机上继续运行。对于虚拟机服务本身而言,由于切换的时间非常短暂,用户感觉不到服务的中断,因而迁移过程对用户是透明的。动态迁移适用于对虚拟机服务可用性要求很高的场合。
动态迁移需要将原有的虚拟机镜像放在采用SAN(storage area network)或NAS(network-attached storage)之类的集中式共享外存设备,这样迁移的时候,不是迁移整个硬盘镜像,而是迁移内存的信息,所以迁移起来,速度比较快,停顿时间少。
动态迁移实际上是把虚拟机的配置封装在一个文件中,然后通过高速网路,把虚拟机配置和内存运行状态从一台物理机迅速传到另外一台物理机上,期间虚拟机一直保持运行状态。现有技术条件下,大多虚拟机软件如VMware、Hyper-V、Xen进行动态迁移都需要共享存储的支持。典型的共享存储包括NFS和SMB/CIFS协议的网路文件系统,或者通过ISCSI连接到SAN网络。选用哪一种网络文件系统,需要根据具体情况而定。本文的实验采用了NFS文件系统作为源主机和目的主机之间的共享存储。

二、实验环境

1、一台源主机对应IP为:192.168.80.121
2、一台目标主机对应IP为:192.168.80.161
3、一台NFS共享存储对应IP为:192.168.80.100
4、三台机器绑定同一张虚拟网卡
kvm动态迁移_第1张图片
kvm动态迁移_第2张图片

三、搭建NFS网络文件系统

源主机和目标主机都通过网卡和NFS server进行连接,所有的VM镜像都在NFS Server上,然后将VM1从源主机迁移到目标主机上,通过网络来进行迁移,所以网络的速度决定这迁移的快慢。

yum install nfs-utils       //安装nfs
mkdir -p /opt/kvmshare      //新建共享目录
vi /etc/exports     //修改文件

/opt/kvmshare 192.168.80.121(rw,sync,no_root_squash)
/opt/kvmshare 192.168.80.162(rw,sync,no_root_squash)

/opt/kvmshare //为共享文件夹
rw:可读写的权限
ro:只读的权限
no_root_squash:登录到NFS主机的用户如果是ROOT用户,就拥有ROOT权限,此参数很不安全,建议不要使用。
sync:资料同步写入存储器中。
async:资料会先暂时存放内存中,不会直接写入硬盘。

systemctl start rpcbind //先启动
systemctl start nfs //后启动
netstat -anpu | grep rpcbind //UDP 111端口在监听

kvm动态迁移_第3张图片
exportfs -av //如果显示出共享的文件夹的话,说明设置已经生效
kvm动态迁移
搭建成功后将CentOS 7镜像上传到共享目录/opt/kvmshare下

四、配置源主机

1、开启CPU虚拟化(两台都要开启)
kvm动态迁移_第4张图片
2、安装图形界面(无图形界面)
yum groupinstall "GNOME 桌面" -y
输入init 5 后:initial setup of centos linux 7 界面依次输入:1-2-q-yes-登录-设置
3、安装必要工具插件

yum install -y \
qemu-kvm.x86_64 \
qemu-kvm-tools.x86_64 \
python-virtinst.noarch \
qemu-img.x86_64 \
bridge-utils.x86_64 \
libvirt \
virt-manager \
openssh-askpass

4、验证当前主机是否满足KVM的运行条件
cat /proc/cpuinfo | egrep -o "vmx|smv" //intel CPU过滤vmx,AMD CPU过滤smv
kvm动态迁移

modprobe kvm    //初始化
lsmod | grep kvm    //查看kvm虚拟化是否开启成功

kvm动态迁移
5、创建桥接网卡
vi /etc/sysconfig/network-scripts/ifcfg-ens33 //在末尾新增一行
BRIDGE="br0"
vi /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
BOOTPROTO=static
#NM_CONTROLLED=no
ONBOOT=yes
TYPE=Bridge
IPADDR=192.168.80.121
NETMASK=255.255.255.0

systemctl restart network
6、开启虚拟系统管理器
kvm动态迁移_第5张图片
或者打开终端用virt-manager开启
7、新建存储池
kvm动态迁移_第6张图片
kvm动态迁移_第7张图片
kvm动态迁移_第8张图片
kvm动态迁移_第9张图片
kvm动态迁移_第10张图片
8、新建虚拟机
kvm动态迁移_第11张图片 kvm动态迁移_第12张图片
kvm动态迁移_第13张图片
kvm动态迁移_第14张图片
kvm动态迁移_第15张图片
kvm动态迁移_第16张图片
等待装机成功

五、配置目的主机

1、开启cpu虚拟化(步骤如上)
2、安装图形界面(步骤如上)
3、安装必备工具(步骤如上)
4、验证当前主机是否满足KVM的运行条件
5、创建桥接网卡
vi /etc/sysconfig/network-scripts/ifcfg-ens33 //在末尾新增一行
BRIDGE="br0"
vi /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
BOOTPROTO=static
#NM_CONTROLLED=no
ONBOOT=yes
TYPE=Bridge
IPADDR=192.168.80.161
NETMASK=255.255.255.0

systemctl restart network
6、添加存储池(步骤如上)
kvm动态迁移_第17张图片

六、虚拟机热迁移

1、添加目标主机的连接
kvm动态迁移_第18张图片 kvm动态迁移_第19张图片
2、迁移虚拟机
vi /etc/hostname //修改目的主机名
kvm动态迁移
vi /etc/hosts //修改对应映射表
kvm动态迁移
重启虚拟机
kvm动态迁移_第20张图片
kvm动态迁移_第21张图片
kvm动态迁移_第22张图片
3、去目的主机查看
kvm动态迁移_第23张图片