libvirt migration

客户机在主机之间的迁移是一个复杂的问题,有许多可能的解决方案,每个解决方案都有其优缺点。为了最大限度地提高hypervisor集成和管理员部署的灵活性,libvirt实现了几个迁移选项

Network data transports

迁移过程中使用的数据传输有两种方式,一种是hypervisor自己的原生(native)传输,另一种是通过libvirtd连接进行隧道(tunnelled)传输。

Hypervisor native transport

native数据传输支不支持加密,这取决于所涉及的管理程序,但是通常通过最小化所涉及的数据拷贝的数量来降低计算成本。native 数据传输还需要管理员在部署主机时执行一些额外的、特定于管理程序的网络配置步骤。对于某些管理程序,可能需要在防火墙上打开大量端口,以允许多个并发迁移操作。


Migration native path

libvirt tunnelled transport

隧道数据传输能够进行强加密,因为它们能够利用libvirt RPC协议中内置的功能。然而,隧道传输的缺点是,当数据在libvirtd和hypervisor之间移动时,源主机和目标主机上都会涉及额外的数据copy。对于RAM非常大的云主机来说,这可能是一个严重的问题,因为RAM会很快污染内存页面。在部署端,隧道传输不需要任何额外的网络配置。除了libvirtd远程访问所需要的端口以外,只需要在防火墙上打开一个端口来支持多个并发迁移操作。

Migration tunnel path

Communication control paths/flows

虚拟机的迁移需要 两台主机以及迁移程序的密切协作,迁移程序可能在源、目标或其他主机上。

Managed direct migration

通过受管理的direct migration,libvirt client 进程控制迁移的各个阶段。client必须能够连接源主机和目标主机上的libvirtd daemon进程并通过身份验证。两个libvirtd daemon 进程之间不需要进行通信。如果client 崩溃了,或者在迁移过程中失去与libvirtd的连接,那么将尝试中止迁移并重新启动源主机上的云主机cpu。可能会出现这样的情况,即不能安全地完成此操作,在这种情况下,云主机在两边都被置于暂停状态。

Migration direct, managed

Managed peer to peer migration

通过对等迁移,libvirt client进程只与源主机上的libvirtd daemon进程对话。源libvirtd daemon进程通过直接连接目标主机libvirtd来控制整个迁移过程。如果client应用程序崩溃,或者失去与libvirtd的连接,迁移过程不会打断,还会继续完成。注意,源libvirtd使用自己的credentials(通常是root)连接到目标,而不是client用于连接到源的凭据。如果不是这样,通常会遇到这样一种情况:client可以直接连接到目的主机,但是源主机不能建立连接来设置对等迁移。

Migration peer-to-peer

Unmanaged direct migration

对于非托管的直接迁移,libvirt client和libvirtd守护进程都不能控制迁移过程。相反,控制权被委托给hypervisor的管理服务(如果有的话)。libvirt client仅仅通过hypervisor的管理层启动迁移。如果libvirt client或libvirtd崩溃,迁移过程将继续进行,直到完成。

Migration direct, unmanaged

Data security

由于迁移数据流包含云主机操作系统RAM的完整副本,因此对迁移数据流的窥探可能会导致敏感云主机信息的泄露。如果云主机具有多个网络接口,或者网络交换机支持带标记的vlan,那么应该将云主机网络流量与迁移或管理流量分开。
在某些场景中,即使是单独的迁移数据网络也可能无法提供足够的安全性。在这种情况下,可以对迁移数据流应用加密。如果hypervisor本身不提供加密,那么就应该使用 libvirt 的隧道迁移机制

Offline migration

脱机迁移传递 将一个domain的定义置于inactive 。成功完成后,domain在源主机上保持当前状态,并在目标主机上被定义但处于inactve。就像 先在源主机上virsh dumpxml然后再目标主机上的virsh define 不过更好,因为脱机迁移将运行预迁移钩子来更新目标主机上的domain XML。目前,脱机迁移期间不支持复制非共享存储或其他基于文件的存储(例如UEFI变量存储)。

Migration URIs

启动一个云主机迁移需要clietnt 应用指定最多三个URI,这取决于所使用的控制流和api的选择。第一个URI是到源主机的libvirt连接的URI。第二个URI是到目标主机的libvirt连接的URI。第三个URI是一个特定于hypervisor的URI,用于控制如何迁移客户机。对于任何受管理的迁移流,前俩个uri是必须的第三个是可选的。而对于非托管迁移流第一第三个是必须的,第二个未使用。

通常,管理应用程序只需要关心第一个URI和第二个URI,它们都是标准的libvirt连接URI格式。然后,Libvirt将通过查找目标主机的配置主机名,自动确定hypervisor特定的URI。在一些场景中,管理应用程序可能希望直接控制第三个URI。

  • 配置的主机名不正确,或者DNS损坏。如果主机的主机名不能与其公共IP地址匹配,那么libvirt将生成错误的URI。在这种情况下,管理应用程序应该使用IP地址或正确的主机名显式地指定hypervisor特定的URI。
  • 主机有多个网络接口。如果主机有多个网络接口,出于安全性或性能的原因,迁移数据流可以通过特定的接口发送。在这种情况下,管理应用程序应该使用与要使用的网络相关联的IP地址指定hypervisor特定的URI。
  • 防火墙限制哪些端口可用。当libvirt生成迁移URI时,它将使用hypervisor特定的规则选择端口号。一些管理程序只需要在防火墙中打开一个端口,而另一些管理程序则需要一整个端口号范围。在后一种情况下,管理应用程序可能希望选择默认范围之外的特定端口号,以便符合本地防火墙策略。

Configuration file handling

libvirt已知两种类型的虚拟机。transient虚拟机只在运行时存在,并且没有在磁盘上存储配置文件。persistent虚拟机在磁盘上维护配置文件,即使它没有运行。

默认情况下,迁移操作不会尝试修改可能存储在源或目标主机上的任何配置文件。管理员或管理应用程序负责管理配置文件的分发(如果需要的话)。需要注意的是,主机之间决不能共享/etc/libvirt目录。以下是一些可能适用的典型场景:
-Centralized configuration files outside libvirt, in shared storage:支持集群的管理应用程序可以在集群文件系统中维护所有主客户配置文件。在尝试启动客户机时,将从集群FS读取配置并用于部署persistent客户机。对于迁移,需要将配置复制到目标主机并在原始主机上删除。

  • Centralized configuration files outside libvirt, in a database. 数据中心管理应用程序可能根本不存储配置文件。它在虚拟机boot时生成libvirt XML,因为只是生成transient虚拟机,所以不需要在迁移时考虑配置文件。
  • Distributed configuration inside libvirt. 每个客户的配置文件被复制到每个客户能够运行的主机上。在迁移时,现有配置只需要在出现更改时进行更新。
  • Ad-hoc configuration management inside libvirt. 每个客户机都绑定到特定的主机,很少迁移。当需要迁移时,配置将从一个主机移动到另一个主机。

正如上面说的默认情况下libvirt不会在迁移时更改配置。
virsh命令有两个参数来影响这种行为。 --undefine-source 参数,在迁移成功之后在源主机上删除配置文件。 --persist参数,在迁移成功后在目标主机上创建配置文件。下表总结了所有可能的状态与标志组合下的配置文件处理。

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容