鲲鹏社区首页
中文
注册
虚拟机热迁移方案指导(Qemu-2.12&Libvirt-4.5)

虚拟机热迁移方案指导(Qemu-2.12&Libvirt-4.5)

跨平台迁移openEuler

发表于 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)
Qemu2.12.02.12.0
Libvirt4.5.04.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、如果不能连接,在目标主机上按以下步骤进行配置。

  1. 编辑/etc/libvirt/libvirtd.conf文件,添加以下内容。

    listen_tls = 0

    listen_tcp = 1

    tcp_port = "16509"

    listen_addr = "0.0.0.0"

    auth_tcp = "none"

  2. 编辑/etc/sysconfig/libvirtd文件,修改LIBVIRTD_ARGS参数的值。

    LIBVIRTD_ARGS="--listen"

  3. 重启libvirt。

    service libvirtd restart

  4. 如果无法重启服务,还原/etc/sysconfig/libvirtd文件配置,并用以下命令启动。

    libvirtd --daemon --listen --config /etc/libvirt/libvirtd.conf

  5. 配置完毕后请再次检查源主机上通过以下命令是否可以传输数据。

    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

本页内容