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/