kvm 热迁移
动态迁移(Live Migration):也叫在线迁移(Online Migration)。就是在保证虚拟机上服务正常运行的同时,将一个虚拟系统从一个物理主机移动到另一个物理主机的过程。该过程不会对最终用户造成明显的影响,从而使得管理员能够在不影响用户正常使用的情况下,对物理服务器进行离线维修或者升级。
与静态迁移不同的是,为了保证迁移过程中虚拟机服务的可用,迁移过程仅有非常短暂的停机时间。迁移的前面阶段,服务在源主机的虚拟机上运行,当迁移进行到一定阶段,目的主机已经具备了运行虚拟机系统的必须资源,经过一个非常短暂的切换,源主机将控制权转到目的主机,虚拟机系统在目的主机上继续运行。对于虚拟机服务本身而言,由于切换的时间非常短暂,用户感觉不到服务的中断,因而迁移过程对用户是透明的。动态迁移适用于对虚拟机服务可用性要求很高的场合。
动态迁移需要将原有的虚拟机镜像放在采用SAN(storage area network)或NAS(network-attached storage)之类的集中式共享外存设备,这样迁移的时候,不是迁移整个硬盘镜像,而是迁移内存的信息,所以迁移起来,速度比较快,停顿时间少。
动态迁移实际上是把虚拟机的配置封装在一个文件中,然后通过高速网路,把虚拟机配置和内存运行状态从一台物理机迅速传到另外一台物理机上,期间虚拟机一直保持运行状态。现有技术条件下,大多虚拟机软件如VMware、Hyper-V、Xen进行动态迁移都需要共享存储的支持。典型的共享存储包括NFS和SMB/CIFS协议的网路文件系统,或者通过ISCSI连接到SAN网络。选用哪一种网络文件系统,需要根据具体情况而定。本文的实验采用了NFS文件系统作为源主机和目的主机之间的共享存储。
####pre
------------+---------------------------+----------------------------------+
| | |
eth0|192.168.200.51 eth0|192.168.200.52 | 192.168.2.20
+-----------+-----------+ +-----------+-----------+ +----------+----------+
| [ kvm--host1 ] | | [ kvm——host2 ] | | 【nfs-server】 |
| | | | | |
| cetntos7 | | | | |
| | | centos6 | | |
+-----------------------+ +-----------------------+ +---------------------+
#######1. nfs server 安装
root@ubuntu-RH2288-V3:~# cat /etc/exports
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)
#
/nfs 192.168.200.0/24(rw,sync,no_root_squash,no_subtree_check)
root@ubuntu-RH2288-V3:~# exportfs -rv
exporting 192.168.200.0/24:/nfs
#######2. host1,host2,挂载
[root@gpu51 ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 126G 0 126G 0% /dev
tmpfs tmpfs 126G 0 126G 0% /dev/shm
tmpfs tmpfs 126G 12M 126G 1% /run
tmpfs tmpfs 126G 0 126G 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 700G 6.1G 694G 1% /
/dev/sda1 xfs 1014M 187M 828M 19% /boot
/dev/mapper/centos-home xfs 50G 40M 50G 1% /home
tmpfs tmpfs 26G 52K 26G 1% /run/user/1000
tmpfs tmpfs 26G 24K 26G 1% /run/user/0
192.168.2.20:/nfs nfs4 1.7T 79G 1.5T 6% /nfs
[root@gpu51 ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sat Aug 29 04:26:27 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=76e80ab5-93c3-44f1-9cfa-e2491bb46338 /boot xfs defaults 0 0
/dev/mapper/centos-home /home xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
192.168.2.20:/nfs /nfs nfs defaults,_netdev 0 0
#####host1 创建一台centos7 虚拟机在线迁移至 host2 ,使用virt-manager
step1.
step2.
#####host1,host2上 添加相同的共享存储
step3.
step4
step5
step6.
####在host1 新增host2的链接
step7
step8
####迁移
#####迁移中,会出现短暂的丢包
==================================
####### 命令行迁移, centos6 从 host2 迁移至host1
[root@gpu52 ~]# qemu-img create -f qcow2 -o preallocation=metadata /nfs/centos6.qcow2 20G
Formatting '/nfs/centos6.qcow2', fmt=qcow2 size=21474836480 encryption=off cluster_size=65536 preallocation='metadata' lazy_refcounts=off
[root@gpu52 ~]# qemu-img info /nfs/centos6.qcow2
image: /nfs/centos6.qcow2
file format: qcow2
virtual size: 20G (21474836480 bytes)
disk size: 3.3M
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
[root@gpu52 nfs]# virt-install --name centos6 -r 2048 --vcpus=1 --os-type=linux --accelerate -c /root/OS/CentOS-6.8-x86_64-minimal.iso --disk path=/nfs/centos6.8.img,size=20,format=qcow2,bus=virtio --bridge=br0,model=virtio --vnc --vncport=5991 --vnclisten=0.0.0.0 --force
WARNING No operating system detected, VM performance may suffer. Specify an OS with --os-variant for optimal results.
Starting install...
(virt-viewer:35090): Gtk-WARNING **: 20:49:56.317: cannot open display: localhost:10.0
Domain installation still in progress. You can reconnect to
the console to complete the installation process.
[root@gpu52 nfs]#
[root@gpu52 nfs]#
[root@gpu52 nfs]# virsh list
Id Name State
----------------------------------------------------
5 centos7.8 running
7 centos6 running
[D:\~]$ ssh root@192.168.200.156
Connecting to 192.168.200.156:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
WARNING! The remote SSH server rejected X11 forwarding request.
[root@centos6 ~]#
[root@centos6 ~]#
[root@centos6 ~]#
[root@centos6 ~]#
[root@centos6 ~]# ping -c 2 114.114.114.114
PING 114.114.114.114 (114.114.114.114) 56(84) bytes of data.
64 bytes from 114.114.114.114: icmp_seq=1 ttl=71 time=32.1 ms
64 bytes from 114.114.114.114: icmp_seq=2 ttl=65 time=32.0 ms
#####迁移
[root@gpu52 nfs]# virsh list
Id Name State
----------------------------------------------------
5 centos7.8 running
8 centos6 running
[root@gpu52 nfs]# virsh migrate centos6 --live qemu+ssh://192.168.200.51/system --unsafe
root@192.168.200.51's password:
[root@gpu52 nfs]# virsh list
Id Name State
----------------------------------------------------
5 centos7.8 running
###迁移过程中,虚机本身ping114.114.114.114
64 bytes from 114.114.114.114: icmp_seq=33 ttl=90 time=31.9 ms
64 bytes from 114.114.114.114: icmp_seq=34 ttl=92 time=31.4 ms
64 bytes from 114.114.114.114: icmp_seq=35 ttl=80 time=32.9 ms
64 bytes from 114.114.114.114: icmp_seq=36 ttl=71 time=32.0 ms
64 bytes from 114.114.114.114: icmp_seq=37 ttl=85 time=32.0 ms
64 bytes from 114.114.114.114: icmp_seq=45 ttl=87 time=31.3 ms
64 bytes from 114.114.114.114: icmp_seq=46 ttl=84 time=31.4 ms
64 bytes from 114.114.114.114: icmp_seq=47 ttl=79 time=31.7 ms
64 bytes from 114.114.114.114: icmp_seq=48 ttl=67 time=32.0 ms
64 bytes from 114.114.114.114: icmp_seq=49 ttl=74 time=31.9 ms
64 bytes from 114.114.114.114: icmp_seq=50 ttl=64 time=31.9 ms
64 bytes from 114.114.114.114: icmp_seq=51 ttl=64 time=32.0 ms
^C
--- 114.114.114.114 ping statistics ---
51 packets transmitted, 44 received, 13% packet loss, time 50176ms
rtt min/avg/max/mdev = 30.833/31.962/33.819/0.511 ms
[root@centos6 ~]#
=================37,跳到 45.
###迁移过程中,外面ping 虚机
来自 192.168.200.156 的回复: 字节=32 时间=5ms TTL=61
来自 192.168.200.156 的回复: 字节=32 时间=5ms TTL=61
来自 192.168.200.156 的回复: 字节=32 时间=5ms TTL=61
来自 192.168.200.156 的回复: 字节=32 时间=5ms TTL=61
请求超时。
请求超时。
来自 192.168.200.156 的回复: 字节=32 时间=5ms TTL=61
来自 192.168.200.156 的回复: 字节=32 时间=5ms TTL=61
来自 192.168.200.156 的回复: 字节=32 时间=5ms TTL=61
192.168.200.156 的 Ping 统计信息:
数据包: 已发送 = 39,已接收 = 37,丢失 = 2 (5% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 4ms,最长 = 6ms,平均 = 4ms
==========中间有 两个丢包状态
###引用