NAME

pvesr - Proxmox VE 存储复制

SYNOPSIS

pvesr <COMMAND> [ARGS] [OPTIONS]

常用命令示例:

pvesr list
pvesr status

pvesr create-local-job <id> <target> [OPTIONS]

创建新的复制任务。

<id>: [1-9][0-9]{2,8}-\d{1,9}

复制任务 ID。该 ID 由客户机 ID 和任务编号组成,中间用连字符分隔,即 <GUEST>-<JOBNUM>。

<target>: <string>

目标节点。

--comment <string>

说明。

--disable <boolean>

用于禁用/停用该条目的标志。

--rate <number> (1 - N)

速率限制,单位为 mbps(兆字节每秒),使用浮点数表示。

--remove_job <full | local>

将复制任务标记为待删除。该任务会移除所有本地复制快照。设置为 full 时,还会尝试移除目标节点上的已复制卷。随后该任务会从配置文件中删除自身。

--schedule <string> (default = */15)

存储复制调度计划。其格式是 systemd 日历事件的一个子集。

--source <string>

供内部使用,用于检测客户机是否已被接管。

pvesr delete <id> [OPTIONS]

将复制任务标记为待删除。

<id>: [1-9][0-9]{2,8}-\d{1,9}

复制任务 ID。该 ID 由客户机 ID 和任务编号组成,中间用连字符分隔,即 <GUEST>-<JOBNUM>。

--force <boolean> (default = 0)

会移除任务配置条目,但不会执行清理。

--keep <boolean> (default = 0)

保留目标端的已复制数据(不移除)。

pvesr disable <id>

禁用复制任务。

<id>: [1-9][0-9]{2,8}-\d{1,9}

复制任务 ID。该 ID 由客户机 ID 和任务编号组成,中间用连字符分隔,即 <GUEST>-<JOBNUM>。

pvesr enable <id>

启用复制任务。

<id>: [1-9][0-9]{2,8}-\d{1,9}

复制任务 ID。该 ID 由客户机 ID 和任务编号组成,中间用连字符分隔,即 <GUEST>-<JOBNUM>。

pvesr finalize-local-job <id> [<extra-args>] [OPTIONS]

完成复制任务。此操作会移除时间戳不同于 <last_sync> 的所有复制快照。

<id>: [1-9][0-9]{2,8}-\d{1,9}

复制任务 ID。该 ID 由客户机 ID 和任务编号组成,中间用连字符分隔,即 <GUEST>-<JOBNUM>。

<extra-args>: <array>

需要纳入处理的卷 ID 列表。

--last_sync <integer> (0 - N)

上次成功同步的时间(UNIX epoch)。如果未指定,则会移除所有复制快照。

pvesr help [OPTIONS]

获取指定命令的帮助。

--extra-args <array>

显示特定命令的帮助。

--verbose <boolean>

详细输出格式。

pvesr list

列出复制任务。

pvesr prepare-local-job <id> [<extra-args>] [OPTIONS]

为启动复制任务做准备。此命令会在复制开始前于目标节点上调用。该调用供内部使用,并在 stdout 上返回一个 JSON 对象。该方法首先测试 VM <vmid> 是否位于本地节点;如果是,则立即停止。随后该方法扫描所有卷 ID 的快照,并移除时间戳不同于 <last_sync> 的所有复制快照。它还会移除所有未使用的卷。返回值是一个哈希,其中用布尔标记表示哪些卷存在复制快照。

<id>: [1-9][0-9]{2,8}-\d{1,9}

复制任务 ID。该 ID 由客户机 ID 和任务编号组成,中间用连字符分隔,即 <GUEST>-<JOBNUM>。

<extra-args>: <array>

需要纳入处理的卷 ID 列表。

--force <boolean> (default = 0)

允许移除所有现有卷(空卷列表)。

--last_sync <integer> (0 - N)

上次成功同步的时间(UNIX epoch)。如果未指定,则会移除所有复制快照。

--parent_snapname <string>

快照名称。

--scan <string>

要扫描陈旧卷的存储 ID 列表。

pvesr read <id>

读取复制任务配置。

<id>: [1-9][0-9]{2,8}-\d{1,9}

复制任务 ID。该 ID 由客户机 ID 和任务编号组成,中间用连字符分隔,即 <GUEST>-<JOBNUM>。

pvesr run [OPTIONS]

该方法由 systemd-timer 调用,用于执行所有同步任务或指定的同步任务。

--id [1-9][0-9]{2,8}-\d{1,9}

复制任务 ID。该 ID 由客户机 ID 和任务编号组成,中间用连字符分隔,即 <GUEST>-<JOBNUM>。

--mail <boolean> (default = 0)

发生失败时发送电子邮件通知。

--verbose <boolean> (default = 0)

向 stdout 打印更详细的日志。

pvesr schedule-now <id>

调度复制任务,使其尽快启动。

<id>: [1-9][0-9]{2,8}-\d{1,9}

复制任务 ID。该 ID 由客户机 ID 和任务编号组成,中间用连字符分隔,即 <GUEST>-<JOBNUM>。

pvesr set-state <vmid> <state>

在迁移时设置任务复制状态。该调用供内部使用,接受以 JSON 对象表示的任务状态。

<vmid>: <integer> (100 - 999999999)

虚拟机的(唯一)ID。

<state>: <string>

以 JSON 解码字符串表示的任务状态。

pvesr status [OPTIONS]

列出此节点上所有复制任务的状态。

--guest <integer> (100 - 999999999)

仅列出此客户机的复制任务。

pvesr update <id> [OPTIONS]

更新复制任务配置。

<id>: [1-9][0-9]{2,8}-\d{1,9}

复制任务 ID。该 ID 由客户机 ID 和任务编号组成,中间用连字符分隔,即 <GUEST>-<JOBNUM>。

--comment <string>

说明。

--delete <string>

要删除的设置列表。

--digest <string>

如果当前配置文件的 digest 不同,则阻止更改。此项可用于防止并发修改。

--disable <boolean>

用于禁用/停用该条目的标志。

--rate <number> (1 - N)

速率限制,单位为 mbps(兆字节每秒),使用浮点数表示。

--remove_job <full | local>

将复制任务标记为待删除。该任务会移除所有本地复制快照。设置为 full 时,还会尝试移除目标节点上的已复制卷。随后该任务会从配置文件中删除自身。

--schedule <string> (default = */15)

存储复制调度计划。其格式是 systemd 日历事件的一个子集。

--source <string>

供内部使用,用于检测客户机是否已被接管。

DESCRIPTION

pvesr 命令行工具用于管理 Proxmox VE 存储复制框架。存储复制可为使用本地存储的 来宾提供冗余,并减少迁移时间。

它会将来宾卷复制到另一个节点,因此无需使用共享存储即可让所有数据保持可用。 复制使用快照来尽量减少通过网络传输的流量。因此,在首次完整同步之后,新数据只会 以增量方式发送。如果发生节点故障,来宾数据仍可在复制目标节点上使用。

复制会按可配置的间隔自动完成。最小复制间隔为一分钟,最大间隔为每周一次。用于指定 这些间隔的格式是 systemd 日历事件的一个子集,请参见 调度格式 章节:

可以将一个来宾复制到多个目标节点,但不能对同一个目标节点复制两次。

可以限制每个复制任务的带宽,以避免存储或服务器过载。

如果将来宾迁移到一个已拥有该来宾副本的节点,则只需要传输自上次复制以来的变更 (即所谓的 deltas)。这会显著减少所需时间。如果将来宾迁移到复制目标节点, 复制方向会自动切换。

例如:VM100 当前位于 nodeA,并复制到 nodeB。将其迁移到 nodeB 后,它现在会 自动从 nodeB 反向复制回 nodeA。

如果迁移到一个没有该来宾副本的节点,则必须传输完整磁盘数据。迁移完成后,复制 作业会继续将该来宾复制到已配置的节点。

Important

高可用可以与存储复制结合使用,但从最后一次同步到节点发生故障之间可能会有部分 数据丢失。

支持的存储类型

Table 1. 存储类型
描述 插件类型 快照 稳定

ZFS (local)

zfspool

是

是

调度格式

复制使用 日历事件 配置调度。

错误处理

如果复制作业遇到问题,会被置于错误状态。在此状态下,已配置的复制间隔会被临时挂起。 失败的复制会以 30 分钟为间隔反复重试。一旦重试成功,原始调度会再次激活。

可能的问题

下列是一些最常见的问题。根据具体设置,也可能存在其他原因。

  • 网络未正常工作。

  • 复制目标存储没有剩余可用空间。

  • 目标节点上没有相同存储 ID 的存储。

Note 始终可以使用复制日志查找问题原因。

发生错误时迁移来宾

在发生严重错误时,虚拟来宾可能会滞留在故障节点上。此时需要手动将其再次移动到 正常工作的节点。

示例

假设有两个来宾(VM 100 和 CT 200)运行在节点 A 上,并复制到节点 B。 节点 A 发生故障且无法恢复上线。现在必须手动将来宾迁移到节点 B。

  • 通过 ssh 连接到节点 B,或通过 Web UI 打开其 shell

  • 检查集群是否具备法定票数

    # pvecm status
  • 如果没有法定票数,强烈建议先修复该问题,使节点重新可操作。只有在当前无法做到这一点时, 才可以使用以下命令在当前节点上强制设置法定票数:

    # pvecm expected 1
Warning 设置 expected votes 后,应尽一切可能避免会影响集群的变更 (例如添加/移除节点、存储、虚拟来宾)。仅应将其用于让关键来宾重新运行,或用于解决 法定票数问题本身。
  • 将两个来宾配置文件从原始节点 A 移动到节点 B:

    # mv /etc/pve/nodes/A/qemu-server/100.conf /etc/pve/nodes/B/qemu-server/100.conf
    # mv /etc/pve/nodes/A/lxc/200.conf /etc/pve/nodes/B/lxc/200.conf
  • 现在可以再次启动来宾:

    # qm start 100
    # pct start 200

请记得将 VMID 和节点名称替换为实际值。

管理作业

screenshot/gui-qemu-add-replication-job.png

可以使用 Web GUI 轻松创建、修改和移除复制作业。此外,也可以使用命令行接口(CLI) 工具 pvesr 完成这些操作。

在 Web GUI 的所有层级(数据中心、节点、虚拟来宾)都可以找到复制面板。不同层级显示 的作业范围不同:全部作业、节点特定作业或来宾特定作业。

添加新作业时,如果尚未选中来宾,则需要指定来宾以及目标节点。如果不希望使用默认的 all 15 minutes,可以设置复制 调度。 也可以为复制作业施加速率限制。速率限制有助于让存储负载保持在可接受范围内。

复制作业由一个集群范围内唯一的 ID 标识。该 ID 由 VMID 加上作业编号组成。 只有使用 CLI 工具时才需要手动指定该 ID。

网络

复制流量会使用与来宾在线迁移相同的网络。默认情况下,这是管理网络。若要为迁移使用 其他网络,请在 Web 界面的 Datacenter -> Options -> Migration Settings 中配置 Migration Network,或在 datacenter.cfg 中配置。更多详情请参见 迁移网络。

命令行接口示例

为 ID 为 100 的来宾创建一个每 5 分钟运行一次、带宽限制为 10 Mbps(兆字节每秒)的 复制作业。

# pvesr create-local-job 100-0 pve1 --schedule "*/5" --rate 10

禁用 ID 为 100-0 的活动作业。

# pvesr disable 100-0

启用 ID 为 100-0 的已停用作业。

# pvesr enable 100-0

将 ID 为 100-0 的作业调度间隔改为每小时一次。

# pvesr update 100-0 --schedule '*/00'

版权和免责声明

Copyright © 2022-2025 成都市梨儿方信息技术有限责任公司.

本程序是自由软件:你可以依据自由软件基金会发布的 GNU Affero General Public License 条款重新分发和/或修改本程序;可使用该许可证第 3 版,或(由你选择)任何后续版本。

发布本程序是希望它能够有用,但不提供任何担保;甚至不包含对适销性或特定用途适用性的默示担保。更多详情请参见 GNU Affero General Public License。

你应当已经随本程序收到一份 GNU Affero General Public License 的副本。如果没有,请访问: https://www.gnu.org/licenses/

Copyright © 2007-2022 Proxmox Server Solutions GmbH

本程序是自由软件:你可以依据自由软件基金会发布的 GNU Affero General Public License 条款重新分发和/或修改本程序;可使用该许可证第 3 版,或(由你选择)任何后续版本。

发布本程序是希望它能够有用,但不提供任何担保;甚至不包含对适销性或特定用途适用性的默示担保。更多详情请参见 GNU Affero General Public License。

你应当已经随本程序收到一份 GNU Affero General Public License 的副本。如果没有,请访问: https://www.gnu.org/licenses/