如何将LXD VM移动/迁移到Linux上的另一个主机
如何在由Ubuntu Linux或Fedora Linux驱动的两个Linux节点之间迁移LXD VM /容器?
有两种方法可以在两个节点之间迁移LXD VM。
推荐使用方法2。它更加优雅,也支持实时迁移。
如何将LXD VM移动/迁移到Linux上的另一个主机
我将在本教程中演示两种不同的方法。
方法1:使用ssh进行备份和还原
首先,您需要备份/var/lib/lxd包括存储池。
接下来,您需要将备份副本复制到/var/lib/lxd /中的远程LXD实例,包括存储池。
要查看server1上的vms列表,请执行:
$ 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的备份文件
在/var/lib/lxd/storage-pools/default/containers /目录中,执行以下tar命令解压缩名为www-vm.tar.gz的tar包:
$ sudo -i # cd /var/lib/lxd/storage-pools/default/containers/ # tar -zxvf /root/www-vm-tar.gz
最后,使用ln命令创建一个软链接,运行:
# 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协议进行迁移的示例设置:
使用LXD API从本地到远程主机和容器迁移
同样,您需要两个配置了LXD的服务器。
您将在本地计算机上调用server1,将在远程服务器上调用server2。
步骤1配置名为server2的远程服务器
执行以下命令以启用通过API的远程访问题描述:
$ lxc config set core.https_address 192.168.1.6:8443
设置server2 lxd守护程序的密码:
$ lxc config set core.trust_password PASSWORDhere
在此处用实际密码替换PASSWORD。
您需要在下面的步骤2中使用相同的命令。
您必须在Ubuntu Linux上使用ufw防火墙打开端口8443,运行:
$ 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