下篇预告: 玩转KVM:浅谈虚拟机lifecycle
前言
上篇一招打开vm的console口,让你轻轻松松管理vm。下面讲虚拟机是如何在kvm集群中来去自如。
为什么要迁移
迁移描述了将虚拟机从一台主机物理机移动到另一台主机的过程。
虚拟机迁移可以分为:冷迁移(offline migration)和热迁移(live migration/online migration)
为什么要迁移呢?
1.负载平衡 - 当主机物理机器过载或其他主机物理机器未充分利用时,可将客户机虚拟机移动到主机物理机器,使用率较低。
2.硬件独立性 - 当我们需要在主机物理机上升级,添加或删除硬件设备时,我们可以安全地将虚拟机重定位到其他主机物理机。这意味着虚拟机不会遇到硬件改进的停机时间。
3.节能 - 客户虚拟机可以重新分配到其他主机物理机器,因此可以关闭电源以节省能源并在低使用率期间降低成本。
4.地理迁移 - 可以将虚拟机移动到其他位置,以降低延迟或在严重情况下使用。
迁移的要求
共享存储
虚拟机迁移要求是虚拟机存放在KVM集群的共享存储中。
如下:
基于光纤通道的LUN
iSCSI的
FCoE的
NFS
GFS2
CEPH RBD
SCSI RDMA协议(SCSI RCP):Infiniband和10GbE iWARP适配器中使用的块导出协议
# 虚拟机的管理工具
KVM 仅仅是 Linux 内核的一个模块。管理和创建完整的 KVM 虚拟机,需要更多的辅助工具。
QEMU-KVM:在 Linux 系统中,首先我们可以用 modprobe 系统工具去加载 KVM 模块,如果用 RPM 安装 KVM 软件包,系统会在启动时自动加载模块。加载了模块后,才能进一步通过其他工具创建虚拟机。
Libvirt、virsh、virt-manager:尽管 QEMU-KVM 工具可以创建和管理 KVM 虚拟机,RedHat 为 KVM 开发了更多的辅助工具,比如 libvirt、libguestfs 等。原因是 QEMU 工具效率不高,不易于使用。使用 libvirt,你只需要通过 libvirt 提供的函数连接到 KVM 或 Xen 宿主机,便可以用同样的命令控制不同的虚拟机了。Libvirt自带一套基于文本的管理虚拟机的命令—— virsh,你可以通过使用 virsh 命令来使用 libvirt 的全部功能。 virt-manager是一套用 python 编写的虚拟机管理图形界面,用户可以通过它直观地操作不同的虚拟机。
迁移实战
虚拟机冷迁移:
源物理主机:
确定虚拟机关闭状态
[root@node1 ~]# virsh list --all
准备迁移test虚拟机,查看该虚拟机的磁盘文件
[root@node1 ~]# virsh domblklist test
导入虚拟机配置文件
[root@node1 ~]# virsh dumpxml test > /root/test.xml
拷贝配置文件到目标虚拟主机上。
[root@node1 ~]# scp /root/test.yml 10.10.10.10:/etc/libvirt/qemu/test.yml
目标物理主机:
查看目标主机KVM环境
[root@node2 ~]# virsh list
查看虚拟机描述文件
[root@node2 ~]# ls -l /root
查看虚拟机磁盘文件,目录结构与源虚拟主机一致。
[root@node2 ~]# virsh domblklist test --输出需要与源主机一样
定义注册虚拟主机
[root@node2 ~]# virsh define /etc/libvirt/qemu/test.yml
启动虚拟主机并确认
[root@node2 ~]# virsh start test
[root@node2 ~]# virsh list
# 虚拟机热迁移:
共享存储可以用以上罗列的方式
准备NFS存储,全部节点挂载nfs目录
[root@node1 ~]# mount -t nfs 10.10.10.200:/data /data -o rw,rsize=12768,wsize=12768,hard
节点1虚拟机状态,test虚拟机开机状态
[root@node1 ~]# virsh list
节点2虚拟机状态,无虚拟机运行
[root@node2 ~]# virsh list
在主机1上执行迁移命令
[root@node1~]#virsh migrate --live --verbose test qemu+ssh://10.10.10.10/system tcp://10.10.10.10br/>[email protected]'spassword:
Migration:[100%]
迁移过程:客户机一直ping查看迁移,可以看到中间有两个包的中断,基本上没有太大影响。
节点2上,可以看到虚拟机test已经启动了,进入虚拟机观察
[root@node2 ~]# virsh list
[root@node2 ~]# virsh console test