Barman 3.11.1 和 3.11.0 版本发布公告

发布于 2024-08-29 由 EDB
相关开源

EDB 很高兴地宣布 Barman 3.11.1 和 3.11.0 版本的发布。

此版本亮点

版本 3.11.1 - 2024 年 8 月 22 日

Bug 修复

  • 修复 `barman-cloud-backup-delete` 中的失败问题。由于上一个版本引入的错误,此命令在应用保留策略时会失败。

版本 3.11.0 - 2024 年 8 月 22 日

功能

  • 添加对 Postgres 17+ 增量备份的支持。此主要功能由几个小的更改组成

    • `barman backup` 命令添加 `--incremental` 命令行选项。这用于指定进行增量备份时的父备份。父备份可以是完整备份或另一个增量备份。

    • 添加 `latest-full` 快捷备份 ID。与 `latest` 一起,这可以用作选择增量备份的父备份的快捷方式。虽然 `latest` 独立获取最新的备份(无论它是完整备份还是增量备份),但 `latest-full` 获取最新的完整备份。

    • `backup_method = postgres` 时,`barman keep` 命令只能应用于完整备份。如果完整备份有依赖于它的增量备份,则所有增量备份也会被 Barman 保留。

    • 删除备份时,所有依赖于它的增量备份(如果有)也会被删除。

    • 保留策略不考虑增量备份。由于在没有完整备份可用的完整备份链的情况下无法恢复增量备份,因此只有完整备份才会计入保留策略。

    • `barman recover` 在恢复时需要将完整备份与增量备份链组合在一起。新的 CLI 选项 `--local-staging-path` 和相应的 `local_staging_path` 配置选项用于指定在恢复增量备份时将备份组合在 Barman 主机中的路径。

  • 更改 `barman show-backup` 输出

    • 添加“估计集群大小”字段。在恢复备份时,估计集群的数据目录大小很有用。当恢复压缩备份或增量备份时,这尤其有用,因为在这些情况下,备份的大小不能反映 Postgres 中数据目录的大小。在 JSON 格式中,它存储为 `cluster_size`

    • 添加“WAL 汇总器”字段。此字段显示在进行备份时是否在 Postgres 中启用了 `summarize_wal`。在 JSON 格式中,它存储为 `server_information.summarize_wal`。对于 Postgres 16 及更早版本,将省略此字段。

    • 添加“数据校验和”字段。这显示在进行备份时是否在 Postgres 中启用了 `data_checkums`。在 JSON 格式中,它存储为 `server_information.data_checksums`

    • 添加“备份方法”字段。这显示此备份使用的备份方法。在 JSON 格式中,它存储为 `base_backup_information.backup_method`

    • 将“磁盘使用量”字段重命名为“备份大小”。后者提供了一个更全面的名称,表示 Barman 主机中备份的大小。`base_backup_information` 下的 JSON 字段也从 `disk_usage` 重命名为 `backup_size`

    • 添加“WAL 大小”字段。这显示备份所需的 WAL 的大小。在 JSON 格式中,它存储为 `base_backup_information.wal_size`

    • 重构“增量大小”字段。它现在被命名为“资源节省”,现在显示在使用 `rsync``pg_basebackup` 进行增量备份时节省的资源估计值。它将备份大小与估计的集群大小进行比较,以估计通过进行增量备份节省的磁盘和网络资源量。在 JSON 格式中,该字段从 `incremental_size` 重命名为 `base_backup_information` 下的 `resource_savings`

    • `system_id` 字段添加到 JSON 文档。此字段包含 Postgres 的系统标识符。它以控制台格式存在,但在 JSON 格式中缺失。

  • 添加与 Postgres 增量备份相关的字段

    • “备份类型”:指示 Postgres 备份是完整备份还是增量备份。在 JSON 格式中,它存储为 `base_backup_information` 下的 `backup_type`

    • “根备份”:一个或多个增量备份链的根的完整备份的 ID。在 JSON 格式中,它存储为 `catalog_information.root_backup_id`

    • “父备份”:从中进行此增量备份的完整或增量备份的 ID。在 JSON 格式中,它存储为 `catalog_information.parent_backup_id`

    • “子备份”:以此备份为父备份进行的增量备份的 ID。在 JSON 格式中,它存储为 `catalog_information.children_backup_ids`

    • “备份链大小”:从该增量备份到根备份的链中的备份数。在 JSON 格式中,它存储为 `catalog_information.chain_size`

  • 更改 `barman list-backup` 输出

    • 它现在在 JSON 输出中包含备份类型,对于使用 rsync 进行的备份,该类型可以是 `rsync`,对于使用 `pg_basebackup` 进行的备份,该类型可以是 `full``incremental`,对于云快照,该类型可以是 `snapshot`。当打印到控制台时,备份类型由相应的标签 `R``F``I``S` 表示。

    • 从输出中删除表空间信息。这会使输出膨胀。表空间信息仍然可以在 `barman show-backup` 的输出中找到。

  • 在通过 `barman recover` 配置 `recovery_target_time` 时,始终设置一个带有时间戳的时间戳。以前,如果没有通过 `--target-time` 显式设置时区,Barman 将在 Postgres 中配置没有时区的 `recovery_target_time`。如果没有时区,Postgres 会假定通过 Postgres 中的 `timezone` GUC 配置的内容。从现在开始,如果用户没有通过 `--target-time` 选项设置时区,Barman 将发出警告并使用 Barman 主机的时区配置 `recovery_target_time`

  • 当使用“no get wal”方法恢复备份并且设置了 `--target-lsn` 时,仅复制到达配置目标所需的 WAL 文件。以前,Barman 会将其存档中的所有 WAL 文件复制到 Postgres。

  • 当使用“no get wal”方法恢复备份并且设置了 `--target-immediate` 时,仅复制到达一致点所需的 WAL 文件。以前,Barman 会将其存档中的所有 WAL 文件复制到 Postgres。

  • `barman-wal-restore` 现在将 WAL 从 spool 目录移动到 `pg_wal` 而不是复制它们。如果 spool 目录和 `pg_wal` 目录位于同一分区,则可以提高性能。

  • `barman check-backup` 现在在输出和日志中显示备份被标记为 `FAILED` 的原因。以前,用户要了解备份被标记为 `FAILED` 的原因,他们需要运行 `barman show-backup` 命令。

  • `barman-cloud-backup` 上添加配置选项 `aws_await_snapshots_timeout` 和相应的 `--aws-await-snapshots-timeout` 命令行选项。这指定等待快照备份达到完成状态的超时时间(以秒为单位)。

  • 为基于 rsync 的备份添加保持活动机制。以前,Barman 创建的运行 `pg_backup_start()``pg_backup_stop()` 的 Postgres 会话会保持空闲状态,只要基础备份复制需要花费时间。这可能会导致防火墙或路由器因为长时间空闲而断开连接。保持活动机制通过该连接向 Postgres 发送心跳查询,从而降低连接被断开的可能性。心跳之间的间隔可以通过新的配置选项 `keepalive_interval``barman backup` 命令的相应 CLI 选项 `--keepalive-interval` 来控制。

Bug 修复

  • 当使用“no get wal”方法恢复备份并设置了 `--target-time` 时,复制所有 WAL 文件。以前,Barman 会尝试“猜测”Postgres 需要的 WAL 文件才能达到配置的目标时间。但是,该机制不够强大,因为它基于 Barman 主机中 WAL 文件的统计信息(更具体地说,是创建时间)。例如:如果 Postgres 和 Barman 之间存在归档或流式传输延迟,则这可能足以导致恢复失败,因为 Barman 会因为基于文件统计的薄弱检查而遗漏复制所有需要的 WAL 文件。

  • 在通过 Python 3.6 或更早版本运行 Barman 时,将 `python-snappy` 固定到 `0.6.1`。较新版本的 `python-snappy` 需要 `cramjam` 版本 `2.7.0` 或更高版本,而这些版本仅适用于 Python 3.7 或更高版本。

  • `barman receive-wal` 现在在以下情况下以代码 `1` 而不是 `0` 退出

    • 由于 `pg_receivewal` 正在运行,因此无法使用 `--reset` 标志运行。

    • 由于 `pg_receivewal` 进程已在运行,因此无法启动该进程。

  • 修复并改进 `barman diagnose` 输出中有关 Python 的信息

    • 该命令现在确保在通过 `python_ver` JSON 键输出 Python 版本时,使用安装 Barman 时所用的同一个 Python 解释器。之前,如果一个环境中有多个 Python 安装和/或虚拟环境,输出结果可能会产生误导,因为它可能从不同的 Python 解释器获取。

    • 在 JSON 输出中添加了一个 `python_executable` 键。它包含 Barman 正在使用的确切 Python 解释器的路径。

此信息也发布在 Barman 的 NEWS 中。

关于 Barman

备份和恢复管理器(Barman)是一个开源的管理工具,用于在业务关键环境中远程备份和灾难恢复 PostgreSQL 服务器。它依赖于 PostgreSQL 强大而可靠的即时点恢复技术,允许 DBA 从一个位置远程管理完整的备份目录和多个远程服务器的恢复阶段。Barman 基于 GNU GPL 3 许可发布,并由 EDB 维护。