云计算之2---KVM

介绍

KVM

  KVM:就是Keyboard Video Mouse的缩写。KVM 交换机通过直接连接键盘、视频和鼠标 (KVM) 端口,让您能够访问和控制计算机。KVM 技术无需目标服务器修改软件。这就意味着可以在 Windows 的 BIOS 环境下,随时访问目标计算机。KVM 提供真正的主板级别访问,并支持多平台服务器和串行设备。

  KVM 技术已经从最初的基础SOHO办公型,发展成为企业 IT 基础机房设施管理系统。可以从kvm 客户端管理软件轻松的直接访问位于多个远程位置的服务器和设备。KVM over IP 解决方案具备完善的多地点故障转移功能、符合新服务器管理标准 (IPMI) 的直接界面,以及将本地存储媒体映射至远程位置的功能。

  KVM 是个"怪胎",原本是类型2的全虚拟化;但一旦在OS 上加载了kvm.ko 模块,就会"感染"OS,使其变为hypervisor(kvm),原本的软件空间作为控制台,转化成类型1的模拟器虚拟化。

img

KVM组件

kvm.ko:内核模块

  • API 应用程序编程接口
  • KVM模块load进内存之后,系统的运行模式:
    • 内核模式:GuestOS执行IO类的操作时,或其它的特殊指令操作时的模式;它也被称为"Guest-Kernel"模式;
    • 用户模式:Host OS的用户空间,用于代为GuestOS发出IO请求;
    • 客户机模式:GuestOS的用户模式;所有的非IO类请求。

qemu-kvm:用户空间的工具程序

  • qemu-KVM是一种开源虚拟器,它为KVM管理程序提供硬件仿真。

  • 运行中的一个kvm虚拟机就是一个qemu-kvm进程,运行qemu-kvm程序并传递给它合适的选项及参数即能完成虚拟机启动,终止此进程即能关闭虚拟机;

libvirt (虚拟化库):一个C工具包,可以与最近版本的Linux(以及其他操作系统)的虚拟化功能进行交互。主包包含了导出虚拟化支持的libvirtd服务器。

  • C/S:
    • Client:
      • libvirt-client
      • virt-manager
    • Daemon:
      • libvirt-daemon

KVM要求

  1. KVM需要宿主机CPU必须支持硬件级虚拟化

    • vmx:Intel VT-x
    • svm:AMD AMD-v

    判断CPU是否支持硬件虚拟化:

grep -E "vmx|svm" /proc/cpuinfo

注意:vmx 或 svm 必须出现一个,表示是支持的

  1. 检测 kvm 模块是否装载
lsmod | grep kvm
ll /dev/kvm

KVM软件包组

Red Hat 6

包组 描述 强制性的Packages 可选的Packages
虚拟化 提供用于托管虚拟机的环境 qemu-kvm qemu-guest-agent, qemu-kvm-tools
虚拟化客户端 用于安装和管理虚拟化实例的客户端 python-virtinst, virt-manager, virt-viewer virt-top
虚拟化平台 提供用于访问和控制虚拟机和容器的界面 libvirt, libvirt-client, virt-who, virt-what fence-virtd-libvirt, fence-virtd-multicast, fence-virtd-serial, libvirt-cim, libvirt-java, libvirt-qmf, libvirt-snmp, perl-Sys-Virt
虚拟化工具 离线虚拟映像管理工具 libguestfs libguestfs-java, libguestfs-tools, virt-v2v

Red Hat 7

包组 描述 强制性的Packages 可选的Packages
虚拟化管理程序 最小的虚拟化主机安装 libvirt, qemu-kvm, qemu-img qemu-kvm-tools
虚拟化客户端 用于安装和管理虚拟化实例的客户端 gnome-boxes, virt-install, virt-manager, virt-viewer, qemu-img virt-top, libguestfs-tools, libguestfs-tools-c
虚拟化平台 提供用于访问和控制虚拟机和容器的界面 libvirt, libvirt-client, virt-who, qemu-img fence-virtd-libvirt, fence-virtd-multicast, fence-virtd-serial, libvirt-cim, libvirt-java, libvirt-snmp, perl-Sys-Virt
虚拟化工具 离线虚拟映像管理工具 libguestfs, qemu-img libguestfs-java, libguestfs-tools, libguestfs-tools-c

KVM在线资源


安装

环境准备

  • Windows主机使用VMware搭建宿主机
主机名 ip地址 内存 虚拟机
kvm01 10.0.0.11 4G(后期调整到2G) cpu开启vt虚拟化
kvm02 10.0.0.12 2G cpu开启vt虚拟化
  • 宿主机:
    • 内存4G
    • 纯净的系统CentOS-7(关闭:selinuxfirewalldNetworkManagerpostfix(非必须))(可以使用 centos 7.4 7.6 7.8,但不要使用7.5)
    • 必须要在虚拟机配置界面的处理器选项中开启虚拟机化 Intel VT-x/EPT

image-20201126114258488


宿主机准备

kvm01(IP:10.0.0.11)

  1. 安装Base源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  1. 安装kvm虚拟化管理工具
yum install libvirt virt-install qemu-kvm -y

libvirt 作用:虚拟机的管理软件 kvm,xen,qemu,lxc....

virt(virt-install virt-clone)作用:虚拟机的安装工具和克隆工具

qemu-kvm qemu-img (qcow2,raw)作用:管理虚拟机的虚拟磁盘

注意:CentO S 6 需要安装acpid服务,才能使用virsh shutdown,7 版本以后不需要

  1. 上传CentOS-7镜像包(CentOS-7-x86_64-Minimal-1511.iso)到指定目录

  2. Windows使用微软的远程桌面管理工具:VNC-Viewer-6.19.325

    或者使用xshell(企业版本,安装图形化工具)也能管理内置虚拟机。

    # 安装图形化桌面,可以远程控制,宿主机内部的虚拟机。
    yum groupinstall "GNOME Desktop"
    # 用此软件连接并远程控制内置虚拟机。
    virt-manager
    

安装一台kvm虚拟机

  1. 启动libvirtd服务,并设置为开机启动
systemctl start libvirtd
systemctl enable libvirtd
systemctl status libvirtd
  1. 安装一台kvm虚拟机(kvm宿主机 10.0.0.11)
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos2.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-Minimal-1511.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
--virt-type kvm    虚拟化的类型(支持qemu) 
--os-type=linux    系统类型 
--os-variant rhel7 系统版本 
--name centos7     虚拟机的名字 (必须唯一) 
--memory 1024      虚拟机的内存
--vcpus 1          虚拟cpu的核数
--disk /opt/centos2.raw,format=raw,size=10   虚拟硬盘路径,格式,大小(必须唯一) 
--cdrom /opt/CentOS-7-x86_64-DVD-1708.iso    镜像文件路径
--network network=default      使用默认NAT的网络
--graphics vnc,listen=0.0.0.0  图形界面使用vnc输出,监听0.0.0.0,默认127.0.0.1
--noautoconsole    不自动连接控制台(可有可无)
--boot hd          虚拟机使用硬盘引导启动

建议虚拟机内存不要低于1024M,否则安装系统特别慢!

  1. windows使用vnc连接kvm虚拟机(vnc:10.0.0.11:5900)

image-20201126121409919

  1. 配置

只要一个标准根分区就行,云主机都没有swap分区

image-20201126122057666

  1. 等待安装完成并重启(KVM虚拟机会关机)

注意:KVM安装系统的机会只有一次!!!失败只能删除重新安装。

  1. 显示所有的KVM虚拟机
[root@kvm01 ~]# virsh list --all
 Id    名称                         状态
----------------------------------------------------
 -     centos7                        关闭
  1. 启动KVM虚拟机
virsh start centos7

应用

kvm虚拟机管理配置(virsh)

常用功能:

virsh list [--all]           # 显示列表
virsh start 虚拟机名          # 开机
virsh shutdown 虚拟机名       # 关机(虚拟机有系统)
virsh destroy 虚拟机名        # 拔电源关机
virsh reboot 虚拟机名         # 重启(虚拟机有系统)
virsh suspend 虚拟机名        # 挂起(虚拟机时间停止)
virsh resume 虚拟机名         # 恢复(虚拟机时间不一致)
virsh vncdisplay 虚拟机名     # 查询vnc端口号(:N=:5000+N)

一台KVM虚拟机由磁盘文件和配置文件两部分组成:

  • 磁盘文件
[root@kvm01 ~]# ll -h /opt/centos2.raw
-rw------- 1 qemu qemu 10G 11月 26 14:50 /opt/centos2.raw
  • 配置文件
[root@kvm01 ~]# ll -h /etc/libvirt/qemu/centos7.xml
总用量 8.0K
-rw------- 1 root root 4.2K 11月 26 12:13 centos7.xml

配置文件不要手动修改!请使用专用命令:

virsh dumpxml centos7 > vm_centos7.xml  # 导出配置,到当前目录下指定文件中
virsh define vm_centos7.xml             # 导入配置

删除虚拟机步骤:

virsh destroy 虚拟机名        # 拔电源关机
virsh undefine 虚拟机名       # 只删除配置文件,不删除磁盘文件

注意:KVM虚拟机运行时,也可以删除配置文件,但是关机后就没了。交接时注意检查配置文件!


重命名虚拟机步骤

virsh shutdown 虚拟机名1            # 关机
virsh domrename 虚拟机名1 虚拟机名2  # 重命名虚拟机,需要关机时执行 (低版本不支持)
mv /opt/虚拟机名1.raw /opt/虚拟机名2.raw  # 重命名磁盘文件,和虚拟机名保持一致
virsh edit 虚拟机名2                # 修改配置文件(虚拟机名1.raw),自带语法检查
virsh start 虚拟机名2               # 开机

重命名虚拟机名和文件名,直接删除配置文件,再导入修改后的配置文件

[root@kvm01 ~]# vi web01.xml
<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
  virsh edit web01
or other application using the libvirt API.
-->

<domain type='kvm'>
  <name>web01</name> //& 修改
  <uuid>3100303a-7619-42a1-9bf1-de9a968a40a3</uuid> //& 删除,导入后自动生成
  <memory unit='KiB'>1048576</memory>
  ... ...
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw'/>
      <source file='/opt/web01.raw'/> //& 修改
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </disk>
   ... ...
  </devices>
</domain>

kvm虚拟机开机启动

virsh autostart 虚拟机名            # kvm虚拟机开机启动
virsh autostart --disable 虚拟机名  # kvm虚拟机取消开机启动
ln -s /etc/libvirt/qemu/web01.xml /etc/libvirt/qemu/autostart/ # kvm虚拟机开机启动
rm -f /etc/libvirt/qemu/autostart/web01.xml    # kvm虚拟机取消开机启动

原理:libvirtd.service 开机启动时,启动/etc/libvirt/qemu/autostart/目录下的虚拟机

# kvm虚拟机开机启动目录,软链接到配置文件
ls /etc/libvirt/qemu/autostart/

console 登录kvm虚拟机

  1. VNC登录kvm虚拟机查看IP地址

  2. 宿主机ssh登录kvm虚拟机

ssh root@192.168.122.2
  1. kvm虚拟机(centos7)更新所有内核参数并重启:
grubby --update-kernel=ALL --args="console=ttyS0,115200n8" && reboot
  1. 宿主机console 登录kvm虚拟机
virsh console 虚拟机名

退出:^]==ctrl+]


console相对于VNC的优点:

  1. 不需要安装客户端
  2. 支持复制粘贴
  3. 只要能登录宿主机,就能使用,不需要kvm虚拟机有网络

kvm虚拟机虚拟磁盘管理(qemu-img)

raw:

  • 俗称裸格式,占用空间大,不支持快照,不方便传输,读写性能较好
  • 总50G,用1G,传输50G
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos2.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-Minimal-1511.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

qcow2:qcow(copy on write)

  • 占用空间小,支持快照,性能比raw差一点,方便传输
  • 总50G,用1G,传输1G
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/oldboy.qcow2,format=qcow2,size=10 --cdrom /data/CentOS-7-x86_64-Minimal-1511.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

  • 查看虚拟磁盘信息
qemu-img info centos2.raw
  • 创建一块qcow2格式的虚拟磁盘,默认raw格式
qemu-img create -f qcow2 test.qcow2 2G
  • 扩展虚拟磁盘容量

    (先关闭kvm虚拟机 virsh shutdown

qemu-img resize test.qcow2 +1G
  • 转换磁盘格式:raw转qcow2并压缩(-c)

    (先关闭kvm虚拟机 virsh shutdown

qemu-img convert -f raw -O qcow2 web01.raw web01.qcow2 -c
[root@kvm01 ~]# virsh edit web01
... ...
<disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>   # 修改文件类型type
      <source file='/data/centos2.qcow2'/> # 修改文件名file
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</disk>
... ...

kvm虚拟机快照管理

raw不支持快照,qcow2支持快照,快照保存在qcow2磁盘文件中。

  • 创建快照
virsh snapshot-create-as web01 --name install_ok
  • 查看快照
virsh snapshot-list web01
  • 还原快照
virsh snapshot-revert web01 --snapshotname install_ok 
  • 删除快照
virsh snapshot-delete web01 --snapshotname install_ok

kvm虚拟机克隆

完整克隆

自动克隆:

virt-clone -o web01 -n web02 --auto-clone             # 磁盘文件存放在一起
virt-clone -o web01 -n web02 --file /tmp/web02.qcow2  # 磁盘文件存放在指定位置

手动克隆:

# 转换磁盘格式,去除快照并压缩
qemu-img convert -f qcow2 -O qcow2 -c web01.qcow2 web02.qcow2

# 导出配置文件
virsh dumpxml web01 > web02.xml

# 修改配置文件
vim web02.xml
## 修改虚拟机的名字
## 删除虚拟机uuid
## 删除mac地址mac add
## 修改磁盘路径disk

# 导入配置文件
virsh define web02.xml

# 启动kvm虚拟机
virsh start web02

链接克隆

  1. 生成虚拟机磁盘文件 (-b 创建引用磁盘)
qemu-img create -f qcow2 -b web02.qcow2 web03.qcow2

模板机不要启动或修改,建议删除配置文件并锁定磁盘文件:

virsh undefine web02
chattr +i /opt/web02.qcow2
  1. 生成虚拟机配置文件
# 导出配置文件
virsh dumpxml web01 > web03.xml

# 修改配置文件
vim web03.xml
## 修改虚拟机的名字
<name>web03</name>
## 删除虚拟机uuid
<uuid>8e505e25-5175-46ab-a9f6-feaa096daaa4</uuid>
## 删除mac地址
<mac address='52:54:00:4e:5b:89'/>
## 修改磁盘路径
<source file='/opt/web03.qcow2'/>
  1. 导入虚拟机并进行启动测试
virsh define web03.xml
virsh start web03

全自动链接克隆脚本:

[root@kvm01 scripts]# cat link_clone.sh
#!/bin/bash
old_vm=$1
new_vm=$2
# 1. 生成虚拟机磁盘文件
old_disk=`virsh dumpxml $old_vm|grep "<source file"|awk -F"'" '{print $2}'`
disk_tmp=`dirname $old_disk`
qemu-img create -f qcow2 -b $old_disk ${disk_tmp}/${new_vm}.qcow2
# 2. 生成虚拟机的配置文件
virsh dumpxml $old_vm >/tmp/${new_vm}.xml
# 修改虚拟机的名字
sed -ri "s#(<name>)(.*)(</name>)#1${new_vm}3#g" /tmp/${new_vm}.xml
# 删除虚拟机uuid
sed -i '/<uuid>/d' /tmp/${new_vm}.xml
# 删除mac地址
sed -i '/<mac address/d' /tmp/${new_vm}.xml
# 修改磁盘路径
sed -ri "s#(<source file=')(.*)('/>)#1${disk_tmp}/${new_vm}.qcow23#g" /tmp/${new_vm}.xml
# 3. 导入虚拟机并进行启动测试
virsh define /tmp/${new_vm}.xml
virsh start ${new_vm}

kvm虚拟机NAT网络

kvm虚拟机默认使用NAT模式,网段:192.168.122.0/24

  • 查看kvm虚拟NAT网络
virsh net-list

NAT模式访问网络基于:

  • iptables 端口转发规则
[root@kvm01 ~]# iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
RETURN     all  --  192.168.122.0/24     224.0.0.0/24        
RETURN     all  --  192.168.122.0/24     255.255.255.255     
MASQUERADE  tcp  --  192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
MASQUERADE  udp  --  192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
MASQUERADE  all  --  192.168.122.0/24    !192.168.122.0/24
  • 内核参数 IP转发
[root@kvm01 ~]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

kvm虚拟机桥接网络

宿主机环境检查

  1. 关闭NetworkManager和selinus,检测状态如下
[root@kvm01 ~]# systemctl status NetworkManager
● NetworkManager.service - Network Manager
   Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:NetworkManager(8)
[root@kvm01 ~]# getenforce
Disabled
  1. 精简网卡配置文件
TYPE=Ethernet
BOOTPROTO=static
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=10.0.0.11
PREFIX=24
GATEWAY=10.0.0.2
DNS1=223.5.5.5

宿主机创建桥接网卡

  • 创建桥接网卡
virsh iface-bridge eth0 br0 
  • 取消桥接网卡
virsh iface-unbridge br0
  • 查看桥接网卡
brctl show

新kvm虚拟机使用桥接模式

  • NAT模式(默认)
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /opt/web04.qcow2 --boot hd --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
  • 桥接模式
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole

已有kvm虚拟机改为桥接模式

  1. 关机状态下修改虚拟机配置文件:
virsh edit web01
<interface type='bridge'>
  <source bridge='br0'/>
  1. 启动虚拟机,测试虚拟机网络
  • 如果上层没有开启dhcp,需要手动配置ip地址
TYPE=Ethernet
BOOTPROTO=static
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=10.0.0.110
PREFIX=24
GATEWAY=10.0.0.2
DNS1=223.5.5.5
  • 上层开启dhcp

image-20201127104929526


kvm虚拟机热添加硬盘

  • 临时立即生效
virsh attach-disk web01 /opt/web01_add01.qcow2 vdb --subdriver qcow2
  • 永久生效(需要重启)
virsh attach-disk web01 /opt/web01_add01.qcow2 vdb --subdriver qcow2 --config
  • 临时剥离硬盘
virsh detach-disk web01 vdb
  • 永久剥离硬盘
virsh detach-disk web01 vdb --config

热添加硬盘操作流程

  1. kvm虚拟机查看磁盘信息
fdisk -l
  1. 宿主机创建虚拟磁盘
qemu-img create -f qcow2 /opt/web01_add01.qcow2 1G
  1. 宿主机热添加磁盘
virsh attach-disk web01 /opt/web01_add01.qcow2 vdb --subdriver qcow2
virsh attach-disk web01 /opt/web01_add01.qcow2 vdb --subdriver qcow2 --config
  1. kvm虚拟机格式化磁盘
mkfs.xfs /dev/vdb
  1. kvm虚拟机挂载磁盘
mount /dev/vdb /mnt
  1. kvm虚拟机向挂载目录写入数据
echo "123" > /mnt/test.txt

磁盘扩容规范操作

  1. kvm虚拟机卸载需扩容盘的挂载目录
umount /mnt
  1. 宿主机剥离需扩容盘
virsh detach-disk web01 vdb
  1. 宿主机调整需扩容盘容量
qemu-img resize /opt/web01_add01.qcow2 +1G
  1. 宿主机热添加需扩容
virsh attach-disk web01 /opt/web01_add01.qcow2 vdb --subdriver qcow2 
  1. kvm虚拟机挂载需扩容盘
mount /dev/vdb /mnt
  1. kvm虚拟机使用xfs_growfs更新需扩容盘超级块信息
xfs_growfs /dev/vdb

kvm虚拟机热添加网卡

  • 临时立即生效
virsh attach-interface web01 --type bridge --source br0 --model virtio
  • 永久生效(需要重启)
virsh attach-interface web01 --type bridge --source br0 --model virtio --config
  • 临时删除网卡(需指定mac)
virsh detach-interface web01 --type bridge --mac 52:54:00:62:f7:d8
  • 永久删除网卡
virsh detach-interface web01 --type bridge --mac 52:54:00:62:f7:d8 --config

kvm虚拟机热添加内存

  • 安装时指定最大内存参数(maxmemory)
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 512,maxmemory=2048 --vcpus 1 --disk /opt/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
  • 临时立即生效
virsh setmem web04 1024M
  • 永久生效(需要重启)
virsh setmem web04 1024M --config
  • 永久调整虚拟机内存最大值(需要关机)
virsh setmaxmem web04 2G

kvm虚拟机热添加cpu

  • 安装时指定最大CPU参数(maxvcpus)
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 512,maxmemory=2048 --vcpus 1,maxvcpus=4 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
  • 临时立即生效
virsh setvcpus web04 2
  • 永久生效(需要重启)
virsh setvcpus web04 2 --config
  • 永久调整虚拟机cpu的最大值(需要关机)
virsh setvcpus web04 --config --maximum 4

kvm虚拟机热迁移(nfs)

冷迁移kvm虚拟机:配置文件,磁盘文件

热迁移kvm虚拟机:配置文件,nfs共享磁盘文件


kvm虚拟机热迁移

  1. 环境准备
主机名 ip 内存 网络需求 软件需求 虚拟化
kvm01 10.0.0.11 2G 创建br0桥接网卡 kvm和nfs 开启虚拟化
kvm02 10.0.0.12 2G 创建br0桥接网卡 kvm和nfs 开启虚拟化
nfs01 10.0.0.31 1G nfs
  1. 部署共享存储(nfs)
yum install nfs-utils -y
mkdir /data
cat > /etc/exports << EOF
/data  10.0.0.0/24(rw,sync,no_root_squash,no_all_squash)
EOF
systemctl start rpcbind nfs
  1. kvm01和kvm02检测共享目录
showmount -e 10.0.0.31
  1. kvm01 移走磁盘目录下的文件,挂载共享目录,最后将磁盘文件移回来
mv /opt/*.qcow2 /tmp/
mount -t nfs 10.0.0.31:/data /opt
mv /tmp/*.qcow2 /opt/
  1. kvm02 挂载共享目录,配置主机名解析,SSH免密
mount -t nfs 10.0.0.31:/data /opt
echo "10.0.0.11   kvm01" >> /etc/hosts
ssh-keygen
ssh-copy-id -i ~/.ssh/id_rsa.pub 10.0.0.11
  1. kvm01 启动 web01 web02 ,配置主机名解析,SSH免密
virsh start web01
virsh start web02
echo "10.0.0.12   kvm02" >> /etc/hosts
ssh-keygen
ssh-copy-id -i ~/.ssh/id_rsa.pub 10.0.0.12
  1. kvm01 热迁移到 kvm02

    • 临时迁移(不迁配置文件)
    virsh migrate --live --verbose web01 qemu+ssh://10.0.0.12/system --unsafe
    
    • 永久迁移(迁配置文件)
    virsh migrate --live --verbose web02 qemu+ssh://10.0.0.12/system --unsafe --persistent --undefinesource
    

注意:有快照不能热迁移,请先删除快照。


原文地址:https://www.cnblogs.com/backups/p/yun_2kvm.html