如何在服务器之间移动现有的 Incus 实例¶
要将实例从一个 Incus 服务器移动到另一个服务器,请使用 incus move
命令
incus move [<source_remote>:]<source_instance_name> <target_remote>:[<target_instance_name>]
或者,如果您想复制实例,可以使用 incus copy
命令
incus copy [<source_remote>:]<source_instance_name> <target_remote>:[<target_instance_name>]
在这两种情况下,如果它是您的默认远程,则无需指定源远程,并且如果要使用相同的实例名称,则可以省略目标实例名称。如果要将实例移动到特定的集群成员,请使用 --target
标志指定它。在这种情况下,不要指定源和目标远程。
您可以添加 --mode
标志来选择传输模式,具体取决于您的网络设置
pull
(默认)指示目标服务器连接到源服务器并拉取相应的实例。
push
指示源服务器连接到目标服务器并推送实例。
relay
指示客户端连接到源服务器和目标服务器,并通过客户端传输数据。
如果需要调整实例在目标服务器上运行的配置,您可以直接指定新配置(使用 --config
、--device
、--storage
或 --target-project
)或通过配置文件(使用 --no-profiles
或 --profile
)。有关所有可用标志,请参阅 incus move --help
。
实时迁移¶
实时迁移是指在实例正在运行时迁移它。此方法适用于虚拟机。对于容器,支持有限。
虚拟机的实时迁移¶
虚拟机可以在运行时移动到另一台服务器,因此无需任何停机时间。
要允许实时迁移,必须启用有状态迁移的支持。为此,请确保以下配置
将
migration.stateful
设置为true
。
容器的实时迁移¶
对于容器,使用 CRIU 对实时迁移的支持有限。但是,由于存在大量的内核依赖项,因此只有非常基本的容器(非 systemd
容器,没有网络设备)才能可靠地迁移。在大多数现实场景中,您应该停止容器,将其移动,然后重新启动它。
如果要对容器使用实时迁移,则必须首先确保在两个系统上都安装了 CRIU。
为了优化容器的内存传输,请将 migration.incremental.memory
属性设置为 true
以利用 CRIU 中的预复制功能。通过此配置,Incus 指示 CRIU 对容器执行一系列内存转储。在每次转储之后,Incus 将内存转储发送到指定的远程。在理想情况下,每次内存转储都会减少与先前内存转储的差异,从而增加已同步内存的百分比。当已同步内存的百分比等于或大于通过 migration.incremental.memory.goal
指定的阈值,或通过 migration.incremental.memory.iterations
指定的最大允许迭代次数达到时,Incus 指示 CRIU 执行最终内存转储并将其传输。