4.4. 使用 virsh 进行实时 KVM 迁移


可以使用 virsh 命令将客户机虚拟机迁移到另一台主机物理机器。migrate 命令接受以下格式的参数:
# virsh migrate --live GuestName DestinationURL
请注意,如果不需要实时迁移,可以删除 --live 选项。其它选项在 第 4.4.2 节 “virsh migrate 命令的其它选项” 中列出。
GuestName 参数代表您要迁移的客户机虚拟机的名称。
DestinationURL 参数是目标主机物理机器的连接 URL。目标系统必须运行与 Red Hat Enterprise Linux 相同的版本,它使用相同的虚拟机监控程序,且在 libvirt 正在运行。
注意
用于正常迁移和对等迁移的 DestinationURL 参数有不同的语义:
  • 常规迁移: DestinationURL 是目标主机物理机器的 URL,如源客户机虚拟机中看到。
  • peer-to-peer migration: DestinationURL 是目标主机物理机器的 URL,如源主机物理机器所示。
输入完该命令后,会提示您输入目标系统的 root 密码。
重要
在源服务器上的 /etc/hosts 文件中,需要有目标主机物理机器的条目才能成功迁移。在此文件中输入目标主机物理机器的 IP 地址和主机名,如下例所示,替换您的目标主机物理机器的 IP 地址和主机名:
10.0.0.20	host2.example.com

示例:使用 virsh 进行实时迁移

本例从 host1.example.com 迁移到 host2.example.com。更改您的环境的主机物理机器名称。本例迁移一个名为 guest1-rhel6-64 的虚拟机。

这个示例假设您已完全配置共享存储并满足所有先决条件(在此列出: 迁移要求)。
  1. 验证客户机虚拟机正在运行

    从源系统 host1.example.com,验证 guest1-rhel6-64 是否正在运行:
    [root@host1 ~]# virsh list
    Id Name                 State
    ----------------------------------
     10 guest1-rhel6-64     running
    
  2. 迁移客户机虚拟机

    执行以下命令,将 guest 虚拟机实时迁移到目的地 host2.example.com。在目标 URL 的末尾附加 /system,以告知 libvirt 您需要完全访问。
    # virsh migrate --live guest1-rhel6-64 qemu+ssh://host2.example.com/system
    输入完该命令后,系统将提示您输入目标系统的 root 密码。
  3. Wait

    根据负载和客户机虚拟机的大小,迁移可能需要一些时间。virsh 仅报告错误.在完全迁移前,客户机虚拟机将继续在源主机物理机器中运行。
    注意
    在迁移过程中,完成百分比指示符数可能会在进程完成前减少多次。这是因为重新计算整个进度造成的,因为需要再次复制迁移后更改的源内存页面。因此,此行为是预期的,并不代表迁移中的任何问题。
  4. 验证客户机虚拟机已到达目标主机

    从目标系统 host2.example.com,验证 guest1-rhel6-64 是否正在运行:
    [root@host2 ~]# virsh list
    Id Name                 State
    ----------------------------------
     10 guest1-rhel6-64     running
    
实时迁移现已完成。
注意
libvirt 支持各种网络方法,包括 TLS/SSL、UNIX 套接字、SSH 和未加密 TCP。有关使用其它方法的详情,请参考 第 5 章 客户机的远程管理
注意
无法使用 virsh migrate 命令迁移非运行 guest 虚拟机。要迁移非运行的客户机虚拟机,应使用以下脚本:
virsh dumpxml Guest1 > Guest1.xml
virsh -c qemu+ssh://<target-system-FQDN>  define Guest1.xml
virsh undefine Guest1

4.4.1. 使用 virsh 进行迁移的额外提示

每次迁移在单独的命令 shell 中运行时,可以执行多个并发实时迁移。但是,这要小心谨慎,并且应谨慎地进行计算,因为每个迁移实例各自使用一个 MAX_CLIENT(源和目标)。由于默认设置为 20,在不更改设置的情况下运行 10 个实例。如果您需要更改设置,请参阅 过程 4.1, “Configuring libvirtd.conf” 过程。
  1. 打开 libvirtd.conf 文件,如 过程 4.1, “Configuring libvirtd.conf” 所述。
  2. 查找处理控制部分。
    #################################################################
    #
    # Processing controls
    #
    
    # The maximum number of concurrent client connections to allow
    # over all sockets combined.
    #max_clients = 20
    
    
    # The minimum limit sets the number of workers to start up
    # initially. If the number of active clients exceeds this,
    # then more threads are spawned, upto max_workers limit.
    # Typically you'd want max_workers to equal maximum number
    # of clients allowed
    #min_workers = 5
    #max_workers = 20
    
    
    # The number of priority workers. If all workers from above
    # pool will stuck, some calls marked as high priority
    # (notably domainDestroy) can be executed in this pool.
    #prio_workers = 5
    
    # Total global limit on concurrent RPC calls. Should be
    # at least as large as max_workers. Beyond this, RPC requests
    # will be read into memory and queued. This directly impact
    # memory usage, currently each request requires 256 KB of
    # memory. So by default upto 5 MB of memory is used
    #
    # XXX this isn't actually enforced yet, only the per-client
    # limit is used so far
    #max_requests = 20
    
    # Limit on concurrent requests from a single client
    # connection. To avoid one client monopolizing the server
    # this should be a small fraction of the global max_requests
    # and max_workers parameter
    #max_client_requests = 5
    
    #################################################################
    
  3. 更改 max_clientsmax_workers 参数设置。建议两个参数中的数字都是相同的。max_clients 将每迁移(每个一侧)使用 2 个客户端(每个一侧),在目标执行阶段,并在完成阶段的 0 个 worker 中使用 1 个 worker。max_workers
    重要
    max_clientsmax_workers 参数设置适用于所有向 libvirtd 服务的连接的客户机虚拟机。这意味着,使用同一客户机虚拟机的任何用户,并同时执行迁移将保留至 max_clientsmax_workers 参数设置中设置的限值。这就是为什么在执行并发实时迁移前需要仔细考虑最大值。
  4. 保存文件并重启该服务。
    注意
    有些情况下,迁移连接会丢弃,因为已启动但尚未进行身份验证的 ssh 会话太多。默认情况下,sshd 允许任何时候都允许 10 个会话处于"预先身份验证的状态"。此设置由 sshd 配置文件中的 MaxStartups 参数控制(在此位置: /etc/ssh/sshd_config),这可能需要进行一些调整。应谨慎调整这个参数,因为限制会被实施以防止 DoS 攻击(一般使用资源)。将此值设置为高时,将满足其用途。要更改此参数,请编辑文件 /etc/ssh/sshd_config,从 MaxStartups 行的开头删除 #,并将 10 (默认值)改为一个更高的数字。记住保存文件并重新启动 sshd 服务。如需更多信息,请参阅 sshd_config man page。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.