KVM虚拟机迁徙
- KVM虚拟机迁徙,是将某一虚拟机上的环境和软件完全复制到另一台物理机上继承运行。KVM虚拟机迁徙可以优化体系负载、重新规划KVM虚拟机布局并简化KVM虚拟机的管理维护工作。
- KVM虚拟机迁徙的主要应用场景如下所示。
- 当一台KVM宿主机的负载比较高时,可将源KVM宿主机上的部分虚拟机迁徙到负载较低的KVM宿主机中,以保证服务质量。
- \通过KVM虚拟机迁徙将多台负载较低的KVM宿主机上的KVM虚拟机集中迁徙到某一台KVM宿主机上,从而达到节约资源的目标。
- 在升级KVM宿主机硬件设备时,可以将KVM宿主机上运行的KVM虚拟机迁徙到其他KVM宿主机上,以办理对硬件的依靠,从而实现业务不中断情况下对物理硬件设备的升级。
- 跨地区迁徙,实现KVM虚拟机的远程迁徙。
- 迁徙方式可分为两种如下所示:
- 静态迁徙(Offline Migration)
对于静态迁徙,你可以在宿主机上保存一个完整的客户机镜像快照,然后在宿主机中关闭大概暂停该客户机,然后将该客户机的镜像文件复制到另一台宿主机中,使用在源主机中启动该客户机时的命令来启动复制过来的镜像。
- 动态迁徙(Live Migration)(Online Migration)
动态迁徙是保证KVM虚拟机上运行的应用正常提供服务的同时,让KVM虚拟机在不同的KVM宿主机之间举行迁徙。动态迁徙的过程仅有非常短暂的停机时间,乃至可以忽略不计,同时KVM虚拟机上已经打开的应用连接不会断开,依然保持稳定。KVM的动态迁徙有两种方式:一种是基于共享存储的动态迁徙,另一种是基于数据块的动态迁徙。
利用VNC安装KVM虚拟机
- #使用virt-install 命令安装虚拟机并设置VNC Viewer连接端口
- [root@kvm01 ~]# systemctl stop firewalld
- [root@kvm01 ~]# systemctl disable firewalld
- #创建磁盘文件目录
- [root@kvm1 ~]# mkdir -p /data_kvm/store
- [root@kvm01 ~]# virt-install -n test01 -r 1024 --vcpus=1 --disk path=/data_kvm/store/test01.qcow2,size=10 -w bridge:br0 --virt-type=kvm --accelerate --autostart -c /opt/CentOS-7-x86_64-DVD-2009.iso --vnc --vncport=5901 --vnclisten=0.0.0.0
复制代码
- -n:指定虚拟机的名字。
- -r:指定内存大小。
- –vcpu:指定虚拟 CPU 个数。
- –disk:指定磁盘文件放置位置及大小。
- -w:制定所使用的网桥。
- –autostart:设置虚拟机在宿主机开机时启动。
- -c:指定镜像文件。
- –vncport:通过 vnc viewer 连接的端口。
- –vnclisten:通过 vnc
- –accelerate:当安装qemu客户机时,假如支持可用kvm或kqemu内核加速本事,KVM加速器
打开VNC Viewer
新建一个连接以安装虚拟机
- #查看是否安装成功
- [root@kvm01 ~]# virsh list --all
- #启动虚拟机
- [root@kvm01 ~]# virsh start test01
- #再次连接test01虚拟机,并登录系统
复制代码 静态迁徙
- #查看test01虚拟机当前状态‘
- [root@kvm01 ~]# virsh list --all
- #如果为开启状态则关闭
- [root@kvm01 ~]# virsh shutdown test01
- [root@kvm01 ~]# virsh list --all
- #导出虚拟机 test01 的 xml 配置文件
- [root@kvm01 ~]# virsh dumpxml test01 > test01.xml
- [root@kvm01 ~]# ls
- #定位虚拟机 test01 的磁盘文件
- [root@kvm01 ~]# virsh domblklist test01
- #拷贝配置文件与磁盘文件到迁移主机上 先在迁移主机上创建目录
- [root@kvm2 ~]# mkdir -p /data_kvm/store
- #将kvm01拷贝到kvm02上
- [root@kvm01 ~]# scp test01.xml 192.168.10.105:/etc/libvirt/qemu/
- [root@kvm01 ~]# scp /data_kvm/store/test01.qcow2 192.168.10.105:/data_kvm/store/
复制代码
- 在kvm02上配置和启动目标虚拟机
- #查看被迁移过来的配置文件和磁盘文件
- [root@kvm02 ~]# ls -l /etc/libvirt/qemu
- [root@kvm02 ~]# ls -l /data_kvm/store/
- #重新定义虚拟机 test01
- [root@kvm02 ~]# virsh define /etc/libvirt/qemu/test01.xml
- [root@kvm02 ~]# virsh list --all
- #启动虚拟机 test01
- [root@kvm02 ~]# virsh start test01
- [root@kvm02 ~]# virsh list --all
- #打开虚拟机管理器,查看虚拟机的运行
- [root@kvm02 ~]# virt-manager
复制代码 动态迁徙
- #打开新的服务器配置NFS服务
- [root@localhost ~]# systemctl stop firewalld
- [root@localhost ~]# setenforce 0
- [root@localhost ~]# hostnamectl set-hostname kvmnfs
- [root@localhost ~]# bash
- [root@kvmnfs ~]# yum -y install nfs-utils
- #配置共享目录 创建共享目录
- [root@kvmnfs ~]# mkdir /data
- [root@kvmnfs ~]# chown -R 777 /data/
- [root@kvmnfs ~]# vim /etc/exports
- /data 192.168.10.0/24(rw,sync,no_root_squash)
- #启动并检查 NFS 服务
- [root@kvmnfs ~]# systemctl start nfs
- [root@kvmnfs ~]# systemctl start rpcbind
- [root@kvmnfs ~]# showmount -e localhost
复制代码 挂载NFS目录
- #主机 kvm01和kvm02上创建 kgc 目录
- [root@kvm01 ~]# mkdir /data_kvm/kgc
- [root@kvm02 ~]# mkdir /data_kvm/kgc
- #挂载共享目录
- [root@kvm01 ~]# mount -t nfs 192.168.10.101:/data /data_kvm/kgc
- [root@kvm01 ~]# df
- [root@kvm02 ~]# mount -t nfs 192.168.10.101:/data /data_kvm/kgc
- [root@kvm02 ~]# df
- #设置自动挂载
- [root@kvm01 ~]# vim /etc/fstab
- 192.168.10.101:/data /data_kvm/kgc nfs defaults 0 0、
复制代码 通过现有的磁盘文件生成虚拟机
- #拷贝qcow2磁盘文件
- [root@kvm01 ~]# cp /opt/CentOS-7-x86_64-GenericCloud-2009.qcow2 /data_kvm/store/test02.qcow2
- #部署虚拟机 设置root用户密码
- [root@kvm01 ~]# virt-customize -a /data_kvm/kgc/test02.qcow2 --root-password password:aptech
- #安装询价
- [root@kvm01 ~]# virt-install
- --name=test02 -r 1024 --vcpus=1 --disk device=disk,bus=virtio,path='/data_kvm/kgc/test02.qcow2',size=10 \-w bridge:br0 --virt-type=kvm --boot hd
复制代码 动态迁徙
- #查看 kvm01 和 kvm02主机上虚拟机的运行状态
- [root@kvm01 ~]# virsh list --all
- [root@kvm02 ~]# virsh list --all
- #更改kvm01文件
- [root@kvm01 ~]# virsh shutdown test02
- [root@kvm01 ~]# virsh edit test02
- #找到<driver name='qemu' type='qcow2'/> 该行
- #添加以下内容
- cache='none'
- #启动test02
- [root@kvm01 ~]# virsh start test02
- [root@kvm01 ~]# virsh list --all
- #迁移虚拟到kvm02
- [root@kvm01 ~]# virsh migrate --live --verbose test02 qemu+ssh://192.168.10.105/system tcp://192.168.10.105
- migrate :迁移
- --verbose :显示迁移的进度
- --live:实时迁移
- #创建虚拟机 test02 配置文件
- [root@kvm02 ~]# ls -l /etc/libvirt/qemu
- [root@kvm02 ~]# virsh dumpxml test02 > /etc/libvirt/qemu/test02.xml
- [root@kvm02 ~]# cd /etc/libvirt/qemu/
- [root@kvm02 qemu]# ll
- #定义虚拟机 test02 配置文件
- [root@kvm02 qemu]# virsh define /etc/libvirt/qemu/test02.xml
复制代码
- 基于数据块的动态迁徙
在kvm01和kvm02上安装依靠包,需要使用阿里的yum源
- [root@kvm02 ~]# yum -y install centos-release-qemu-ev
- [root@kvm02 ~]# vim /etc/yum.repos.d/CentOS-QEMU-EV.repo
- #更改以下内容使用国内的源
- mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=virt-kvm-common
- [root@kvm02 ~]# yum -y install qemu-kvm-ev
- [root@kvm02 ~]# reboot
复制代码 迁徙前准备工作
- [root@kvm01 ~]# vim /etc/hosts
- 192.168.10.201 kvm01
- 192.168.10.202 kvm02
- [root@kvm01 ~]# virsh list --all
- [root@kvm01 ~]# virsh shutdown test01
- [root@kvm01 ~]# virt-clone -o test01 -n test03 -f /data_kvm/store/test03.qcow2
复制代码 kvm02 上的利用
- [root@kvm02 ~]# vim /etc/hosts
- 192.168.10.201 kvm01
- 192.168.10.202 kvm02
- [root@kvm02 store]# virsh pool-list --all
- [root@kvm02 ~]# mkdir -p /data_kvm/store
- [root@kvm02 store]# qemu-img create -f qcow2 /data_kvm/store/test03.qcow2 10G
复制代码 在kvm01主机上执行迁徙利用
- [root@kvm01 ~]# virsh start test03
- [root@kvm01 ~]# virsh migrate test03 qemu+ssh://192.168.10.202/system --live --persistent --undefinesource --copy-storage-all --verbose
- --persistent :将域保留为目标主机物理机器的持久性状态
- --undefinesource:删除源主机物理机器上的客户机虚拟机
- --copy-storage-all :使用全磁盘复制的非共享存储进行迁移
- #验证是否迁移成功
- [root@kvm01 ~]# virsh list --all
- [root@kvm02 ~]# virsh list --all
复制代码 KVM服务
KSM服务先容
- Linux内核特性称为Kernel Shared Memory(基于内核的共享内存)或Kernel Samepage Merging。
- KSMD作为守护进程,能够合并内存页面来增长并发虚拟机的数量。KSM 实用于宿主机过载的情况下。
- KSM 通过减少每个虚拟机实际占用的内存数,可以让多个虚拟机分配的内存数量之和大于物理内存数量。
- 而对于相同范例的虚拟机,在物理内存量稳定的情况下,可以在一个宿主机中创建更多虚拟机,从而提高虚拟化部署的密度,同时也可以提高物理资源的利用服从。
查抄当前 Linux 体系是否支持 KSM
- [root@kvm02 ~]# egrep -i ksm /boot/config-3.10.0-1160.el7.x86_64
- #看到该行则支持
- CONFIG_KSM=y
复制代码 配置KSM内存优化
- #先将虚拟机test01克隆出三份 克隆前先关闭
- [root@kvm02 ~]# virt-clone -o test01 -n test02 -f /data_kvm/store/test02.qcow2
- [root@kvm02 ~]# virt-clone -o test01 -n test03 -f /data_kvm/store/test03.qcow2
- [root@kvm02 ~]# virt-clone -o test01 -n test04 -f /data_kvm/store/test04.qcow2
- #开启所有的虚拟机
- [root@kvm02 ~]# virsh start test01
- [root@kvm02 ~]# virsh start test02
- [root@kvm02 ~]# virsh start test03
- [root@kvm02 ~]# virsh start test04
- #查看Linux宿主机的内存使用情况
- [root@kvm02 ~]# free
- [root@kvm02 ~]# systemctl start ksm
- [root@kvm02 ~]# systemctl start ksmtuned
- [root@kvm02 ~]# echo 1 > /sys/kernel/mm/ksm/run
- #再次查看Linux宿主机的内存使用情况
- [root@kvm02 ~]# free
复制代码 tart test03
[root@kvm02 ~]# virsh start test04
#查察Linux宿主机的内存使用情况
[root@kvm02 ~]# free
[root@kvm02 ~]# systemctl start ksm
[root@kvm02 ~]# systemctl start ksmtuned
[root@kvm02 ~]# echo 1 > /sys/kernel/mm/ksm/run
#再次查察Linux宿主机的内存使用情况
[root@kvm02 ~]# free
[code][/code]
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |