虚拟机热迁移方案指导(Qemu-2.12&Libvirt-4.5)
发表于 2025/09/11
0
作者 | 朱勇
一、介绍
从CentOS 7.6迁移到openEuler LTS-SP1虚拟机热迁移指导。
二、环境信息
类别 | 源环境 | 目标环境 |
---|---|---|
操作系统 | CentOS 7.6(kernel 3.10.0-957) | openEulerLTS-SP1(4.19.90-2012.5.0.0054) |
Qemu | 2.12.0 | 2.12.0 |
Libvirt | 4.5.0 | 4.5.0 |
三、虚拟化软件安装
1、背景介绍
这里不作源环境CentOS 7.6上qemu-2.12和libvirt-4.5的安装介绍,主要介绍目标环境openEuler上qemu-2.12和libvirt-4.5的安装。
由于项目背景,用户环境上qemu-2.12还在进行rpm包构建,libvirt-4.5的rpm包已经构建完成,因此qemu-2.12使用源码安装,libvirt使用yum安装。使用本文档进行迁移方案验证时可以先看看仓库中qemu-2.12的包是否构建完成(当前仓库中已经构建好了部分qemu-2.12的包,但是缺少qemu-common的包,还不能正常使用),如果构建完成了也可以使用yum安装。
2、卸载openEuler系统自带的libvirt
卸载openEuler系统自带的libvirt:
yum remove libvirt
3、安装qemu-2.12
1、安装依赖软件。
yum -y install gcc gcc-c++ automake make libtool zlib-devel glib2-devel bzip2-devel libuuid-devel spice-protocol usbredir-devel libaio-devel python2 python3 libgcrypt
yum install pixman-devel -y
yum -y install openssl-devel
yum -y install libjpeg-turbo-devel
yum -y install opus-devel
yum -y install gnutls-devel //该项是启用GNUTLS选项,VNC秘钥启用需要
2、配置yum源。
1.备份repo文件。
mv /etc/yum.repos.d/openEuler.repo /etc/yum.repos.d/openEuler.repo.bak
2. 打开repo文件。
vim /etc/yum.repos.d/epol_update.repo
3.按“i”进入编辑模式,添加以下内容。
[compatible]
name=compatible
baseurl=https://api.compass-ci.openeuler.org/rpm/testing/openeuler-20.03-LTS-SP1/compatible/f35/$basearch/
enabled=1
gpgcheck=0
[extras]
name=extras
baseurl=https://api.compass-ci.openeuler.org/rpm/testing/openeuler-20.03-LTS-SP3/extras/$basearch/
4.按“Esc”键退出编辑模式,输入:wq!,按“Enter”键保存并退出文件。
7、安装qemu-2.12.0。
yum install qemu*
8、(可选)如果缺少依赖,还原yum源设置进行安装。
mv /etc/yum.repos.d/openEuler.repo.bak /etc/yum.repos.d/openEuler.repo
mv /etc/yum.repos.d/epol_update.repo /etc/yum.repos.d/epol_update.repo.bak
4、安装libvirt-4.5.0
1、安装libvirt-4.5.0。
yum install libvirt-4.5.0
2、如果缺少依赖,还原yum源设置进行安装。
mv /etc/yum.repos.d/openEuler.repo.bak /etc/yum.repos.d/openEuler.repo
mv /etc/yum.repos.d/epol_update.repo /etc/yum.repos.d/epol_update.repo.bak
3、安装完毕后输入virsh version验证。回显显示正确版本即为安装成功。
5、安装virt-install-1.5.0
1、virt-install的安装不是必需的,如果需要安装虚拟机,则通常使用virt-install较为方便。
这里采取一种较为简单的方式:
yum install virt-viewer
git clone https://github.com/virt-manager/virt-manager.git -b v1.5.0
cd virt-manager
./virt-install --version
2、验证虚拟机安装。
wget https://repo.huaweicloud.com/openeuler/openEuler-20.03-LTS-SP1/virtual_machine_img/x86_64/openEuler-20.03-LTS-SP1.x86_64.qcow2.xz
xz -d openEuler-20.03-LTS-SP1.x86_64.qcow2.xz
./virt-install --name VM01 --ram 8192 --vcpus=8 --disk path=./openEuler-20.03-LTS-SP1.x86_64.qcow2 --force --import --autostart --network network=default
3、这里虚拟机使用的是NAT模式,虚拟机启动后建议进入虚拟机执行以下命令,否则使用virsh console VM01进入虚拟机时会卡住。
echo "ttyS0" >> /etc/securetty
grubby --update-kernel=ALL --args="console=ttyS0" # 更新内核参数
reboot
四、虚拟机热迁移
目标主机需要设置主机名称并将其配置到源主机的/etc/hosts文件中。
这里假定目标主机名称已设置为target。
1、首先查看目标主机是否开启16509端口。
lsof -i:16509
2、在源主机上检查是否可以传输数据。
virsh -c qemu+tcp://root@target/system
3、如果不能连接,在目标主机上按以下步骤进行配置。
-
编辑/etc/libvirt/libvirtd.conf文件,添加以下内容。
listen_tls = 0
listen_tcp = 1
tcp_port = "16509"
listen_addr = "0.0.0.0"
auth_tcp = "none"
-
编辑/etc/sysconfig/libvirtd文件,修改LIBVIRTD_ARGS参数的值。
LIBVIRTD_ARGS="--listen"
-
重启libvirt。
service libvirtd restart
-
如果无法重启服务,还原/etc/sysconfig/libvirtd文件配置,并用以下命令启动。
libvirtd --daemon --listen --config /etc/libvirt/libvirtd.conf
-
配置完毕后请再次检查源主机上通过以下命令是否可以传输数据。
virsh -c qemu+tcp://root@target/system
4、热迁移。
-
如果使用了共享存储,则热迁移命令为:
virsh migrate --live --verbose VM01 qemu+ssh://target/system
-
如果没有使用共享存储,需先在目标主机创建和源主机相同目录的镜像文件,热迁移命令为:
virsh migrate --live --verbose VM01 qemu+ssh://target/system --unsafe --copy-storage-all
五、问题处理
ImportError: No module named gi
解决办法:
pip install pycairo
pip install PyGObject
ImportError: No module named libvirt
解决办法:
yum install libvirt-python-4.5.0-1.x86_64.rpm #需要自己构建rpm包
ImportError: No module named libxml2
解决办法:
yum install python2-libxml2
ValueError: Namespace Libosinfo not available
解决办法:
yum install libosinfo
No module named ipaddr
解决办法:
pip install ipaddr
ImportError: No module named requests
解决办法:
pip install requests
WARNING Graphics requested but DISPLAY is not set. Not running virt-viewer
解决办法:
export DISPLAY="<客户端IP>:0.0"
安装虚拟机报错
报错如下:
internal error: process exited while connecting to monitor: libvirt: error : cannot execute binary /bin/qemu-system-x86_64: Permission denied
解决办法:
setenforce 0
输入virsh version命令报错failed to get the hypervisor version
报错如下:
解决办法:
源码编译时指定的qemu安装路径在“/usr/local/qemu”下面,virsh命令寻找模拟器是在“/usr/bin”目录下找的,在“/usr/bin”目录下创建qemu-system-x86_64二进制文件的软链接即可。
ln -s /usr/local/qemu/bin/qemu-system-x86_64 /usr/bin/qemu-system-x86_64
Virt-install命令报错Failed to connect socket to '/var/run/libvirt/virtlogd-sock': Connection refused
报错如下:
Failed to connect socket to '/var/run/libvirt/virtlogd-sock': Connection refused
解决办法:
systemctl status virtlogd
Virsh console 卡住
执行命令后,界面卡住没有响应,现象如下:
解决办法,在虚拟机内执行:
echo "ttyS0" >> /etc/securetty
grubby --update-kernel=ALL --args="console=ttyS0" # 更新内核参数
reboot