跨多个节点进行备份和恢复

在多个 pve 节点之间进行虚拟机的备份和恢复,以便快速创建虚拟机

背景

有多台机器安装有 pve 8.0, 但是由于这些机器不是24小时在线,而是按需开机。

按照 pve 标准的做法, 应该建立一个 cluster 集群,然后将所有机器都加入集群,之后就可以在任意一台机器的pve控制台操作集群内的任意机器,还可以在集群内跨节点的执行一些操作和配置。比如 clone 和 migrate 虚拟机和模板。

但因为我的机器不是 24 小时在线,如果建立并加入集群,那么当有大部分机器没有在线时,会因为 法定人数 不足造成无法锁定集群配置进行写操作,恶劣时连虚拟机都无法启动。

因此,不得已只能让每个节点都成为独立节点,不建立 pve 的集群。

当这样一来就无法使用到 pve 集群的跨节点功能,比如这篇文章中涉及到的在多个 pve 节点之间进行虚拟机的备份和恢复,以便实现快速复制虚拟机和模板。

解决方案和思路

尝试找到方便可行速度快的解决方案,首先考虑的就是利用虚拟机的备份和恢复功能。

  • 虚拟机备份之后,可以得到文件大小10-20G级别的 vma 文件
  • 这些 vma 文件可以以普通二进制文件的方式下载/保存/上传,方便在多个pve节点之间分发虚拟机的 vma 文件
  • 将 vma 文件上传到 pve 节点后,可以通过恢复功能得到本地存储上运行的虚拟机或者模板
  • 之后本地存储上的虚拟机或者模板就可以用 pve 自己的 clone 功能进行复制

因此,这个方案的关键在于如何快速的在不同 pve 节点之间分发 vma 文件,由于文件大小有 10-20g 级别, 因此必须考虑节点间的文件传输速度。

节点间文件传输

scp 命令

scp 命令按说是最简单直接的方案,pve 自带随时可以使用。

测试速度结果如下:

  • 2.5G 网络: 实际测试文件传输速度约为 220 MB/s, 19GB的 vma 文件用时 86 秒
  • 56G 网络: 实际测试文件传输速度约为 290 MB/s, 19GB的 vma 文件用时 64 秒

56G 网络下的速度有点离谱,感觉有其他的瓶颈。

nfs 共享