如何将 LXD VM 移动/迁移到 Linux 上的另一台主机
有两种方法可以在两个节点之间迁移 LXD VM。我假设您已经设置并运行了 LXD(请参阅如何在 Fedora Linux 上安装 LXD)。我向所有人推荐方法 2。它更优雅,也支持实时迁移。
教程详细信息 | |
---|---|
难度等级 | 先进的 |
Root 权限 | 不 |
要求 | Linux 上的 LXD |
预计阅读时间 | 5 分钟 |
如何将 LXD VM 移动/迁移到 Linux 上的另一台主机
我将在本教程中演示两种不同的方法。
方法 1:通过 ssh 使用备份和恢复
首先,您需要备份 /var/lib/lxd 包括存储池。接下来,您需要将备份复制到 /var/lib/lxd/ 包括存储池中的远程 LXD 实例。假设您有以下设置:
图 01:我们的示例设置
$ lxc list
示例输出:
+-----------------+---------+---------------------+------+------------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +-----------------+---------+---------------------+------+------------+-----------+ | newsletter | RUNNING | 10.105.28.45 (eth0) | | PERSISTENT | 0 | +-----------------+---------+---------------------+------+------------+-----------+ | www-vm | RUNNING | 10.105.28.42 (eth0) | | PERSISTENT | 0 | +-----------------+---------+---------------------+------+------------+-----------+
我假设您使用 DIR 作为备份存储池。
步骤 1 – 在server1上创建 www-vm 的备份
键入以下 tar 命令:
$ sudo tar -zcvf /root/www-vm.tar.gz /var/lib/lxd/storage-pools/default/containers/www-vm/
步骤 2 – 将 www-vm-tar.gz 从server1复制到server2
键入以下 scp 命令/rsync 命令:
$ sudo scp /root/www-vm.tar.gz root@server2:/root/
或
$ sudo rsync -v /root/www-vm.tar.gz root@server2:/root/
步骤 3 – 在server2上恢复名为 www-vm-tar.gz 的备份文件
键入以下 tar 命令,在 /var/lib/lxd/storage-pools/default/containers/目录中解压名为 www-vm.tar.gz 的 tarball :最后,使用 ln 命令创建软链接,运行:
$ sudo -i
# cd /var/lib/lxd/storage-pools/default/containers/
# tar -zxvf /root/www-vm-tar.gz
# cd /var/lib/lxd/containers/
# ln -s /var/lib/lxd/storage-pools/default/containers/www-vm/
步骤 4 – 在server2上恢复并导入容器
LXD 在每个容器的存储卷中维护一个 backup.yaml 文件。使用它来恢复或还原给定容器,例如容器配置、附加设备和存储。该文件可以通过以下命令处理:
# lxd import {containerNameHere}
# lxd import www-vm
步骤 5 - 在server2上启动导入的容器
键入以下命令:
$ lxc list
$ lxc start www-vm
$ lxc list
$ lxc exec www-vm bash
方法 2:使用 LXD API 和 Simplestreams 进行 LXD VM 容器迁移
下面是我使用 LXD API 和 Simplestreams 协议进行迁移的示例设置:
图 01:使用 LXD API 进行本地到远程主机和容器迁移
步骤 1 – 配置名为 server2 的远程服务器
输入以下命令以通过 API 启用远程访问:
$ lxc config set core.https_address 192.168.1.6:8443
设置 server2 lxd 守护程序的密码:将此处的 PASSWORD
替换为实际密码。您需要在下面的步骤 #2 中使用相同的密码。您必须使用 Ubuntu Linux 上的 ufw 防火墙打开端口 8443,运行:
$ lxc config set core.trust_password PASSWORDhere
$ sudo ufw allow from 192.168.1.5 to 192.168.1.6 port 8443 proto tcp comment 'Allow lxd client to talk to lxd-server'
步骤 2 - 配置名为 server1 的本地服务器
在 server1 上键入以下命令来添加 server2:
$ lxc remote add server2 192.168.1.6
示例输出:
Certificate fingerprint: f4fb0a34a61498d79726079bc...
ok (y/n)? y
Admin password for server2: PASSWORDhere
Client certificate stored at server: server2
您可以列出您的遥控器,您将看到“server2”列出如下:
$ lxc remote list
示例输出:
+-----------------+------------------------------------------+---------------+--------+--------+ | NAME | URL | PROTOCOL | PUBLIC | STATIC | +-----------------+------------------------------------------+---------------+--------+--------+ | server2 | https://192.168.1.6:8443 | lxd | NO | NO | +-----------------+------------------------------------------+---------------+--------+--------+ | images | https://images.linuxcontainers.org | simplestreams | YES | NO | +-----------------+------------------------------------------+---------------+--------+--------+ | local (default) | unix:// | lxd | NO | YES | +-----------------+------------------------------------------+---------------+--------+--------+ | ubuntu | https://cloud-images.ubuntu.com/releases | simplestreams | YES | YES | +-----------------+------------------------------------------+---------------+--------+--------+ | ubuntu-daily | https://cloud-images.ubuntu.com/daily | simplestreams | YES | YES | +-----------------+------------------------------------------+---------------+--------+--------+
您必须允许两台服务器之间进行通信。在 server1 上也打开端口 8443:
$ sudo ufw allow from 192.168.1.6 to 192.168.1.5 port 8443 proto tcp comment 'Allow lxd server2 client to talk to server1 lxd-server'
步骤 3 – 将名为 www-vm 的容器从 server1 复制到 server2
首先通过运行以下命令创建快照(第一个快照将被命名为 snap0,依此类推)。以下操作需要先停止“www-vm”,但我将复制快照并在源容器运行时执行此操作,如下所示:
示例输出:
$ lxc snapshot www-vm
$ lxc info www-vm
$ lxc copy www-vm/snap0 server2:www-vm --verbose
INFO[08-15|20:03:32] Connecting to a local LXD over a Unix socket INFO[08-15|20:03:32] Sending request to LXD etag= method=GET url=http://unix.socket/1.0 INFO[08-15|20:03:32] Connecting to a remote LXD over HTTPs INFO[08-15|20:03:32] Sending request to LXD etag= method=GET url=https://192.168.1.6:8443/1.0 INFO[08-15|20:03:33] Sending request to LXD etag= method=GET url=http://unix.socket/1.0/containers/www-vm/snapshots/snap0 INFO[08-15|20:03:33] Sending request to LXD etag= method=POST url=http://unix.socket/1.0/containers/www-vm/snapshots/snap0 INFO[08-15|20:03:33] Sending request to LXD etag= method=POST url=https://192.168.1.6:8443/1.0/containers INFO[08-15|20:03:33] Sending request to LXD etag= method=GET url=https://192.168.1.6:8443/1.0/operations/f4df846e-d7ca-4c15-a429-6d1256180a84 Transferring container: www-vm: 341.40MB (56.87MB/s)
步骤 4 - 在 server2 上启动名为 www-vm 的容器
在server1上输入以下命令:
$ lxc list server2:
$ lxc start server2:www-vm
$ lxc list cbz02:
$ lxc exec server2:www-vm bash
结论
好了,您已经了解了如何将 LXD VM 移动/迁移到 Linux 操作系统上的另一台主机。有关更多信息,请参阅以下文档:
- LXD 2.0:远程主机和容器迁移 [6/12]
- 曼 lxc
- 在 Ubuntu 16.04 LTS 上安装 LXD 容器管理程序
- 如何在 Fedora Linux 26 上安装和设置 LXC(Linux 容器)
- 在KVM或Xen虚拟机下设置LXD容器
- 列出 LXD(Linux 容器)中的 VM 映像
- 升级由 Ubuntu/Debian 或 CentOS Linux 驱动的 LXD 容器
- 在 Linux 启动时自动启动 LXD 容器
- 重命名 LXD / LXC 容器的命令
- 在配置启动时在 Linux 容器 (LXD) 实例上运行命令
- 在云实例启动时,使用 shell 脚本中的 LXD(Linux 容器)创建 VM
- 将 LXD VM 移动/迁移到 Linux 上的另一台主机
- Fedora 安装并设置 LXD
- CentOS 7.x 安装并设置 LXD 服务器
- 在 Ubuntu 18.04 LTS 上安装 LXD 纯容器管理程序
- 使用 lxc 命令为 LXD 创建快照
- 在 CentOS/RHEL 8 上设置并安装 LXD
- Ubuntu 20.04 LTS 安装并设置 LXD
- 完整备份和恢复 LXD 容器
- 禁用 LXD 桥上的防火墙和 NAT 规则
- 使用 lxc 删除或移除 LXD 容器
- Linux 文件系统错误:事务失败解决方案
- Ubuntu 22.04 LTS 设置 LXD
- Debian 11 设置 LXD