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 日

錯誤修復

  • 修正 `barman-cloud-backup-delete` 中的失敗。由於先前版本引入的錯誤,此命令在應用保留策略時會失敗。

3.11.0 版 - 2024 年 8 月 22 日

功能

  • 新增對 Postgres 17+ 增量備份的支援。此主要功能由幾個小變更組成

    • `--incremental` 命令行選項新增至 `barman backup` 命令。這用於在進行增量備份時指定父備份。父備份可以是完整備份或另一個增量備份。

    • 新增 `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` 重新命名為 `resource_savings`,位於 `base_backup_information` 下。

    • `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 檔案從暫存目錄移動到 `pg_wal`,而不是複製它們。如果暫存目錄和 `pg_wal` 目錄位於同一個分割區,這可以提高效能。

  • 現在 `barman check-backup` 會在輸出和日誌中顯示備份被標記為 `FAILED` 的原因。先前,使用者需要執行 `barman show-backup` 命令才能知道備份被標記為 `FAILED` 的原因。

  • `barman-cloud-backup` 中新增配置選項 `aws_await_snapshots_timeout` 以及對應的 `--aws-await-snapshots-timeout` 命令列選項。這指定等待快照備份達到完成狀態的逾時時間(秒)。

  • 為基於 rsync 的備份新增了 keep-alive 機制。先前,Barman 為了執行 `pg_backup_start()``pg_backup_stop()` 所建立的 Postgres 會話,會閒置很長時間,直到基本備份複製完成。這可能導致防火牆或路由器因為長時間閒置而中斷連線。keep-alive 機制會透過該連線向 Postgres 發送心跳查詢,從而降低連線被中斷的可能性。心跳間隔可以透過新的配置選項 `keepalive_interval` 以及 `barman backup` 命令的對應 CLI 選項 `--keepalive-interval` 來控制。

錯誤修復

  • 當使用 “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` 程式已經在執行中,所以無法啟動 `pg_receivewal` 程式。

  • 修正並改進 `barman diagnose` 輸出中關於 Python 的資訊

    • 現在,該命令確保在使用 `python_ver` JSON 金鑰輸出 Python 版本時,使用與安裝 Barman 時相同的 Python 直譯器。 先前,如果環境有多個 Python 安裝和/或虛擬環境,則輸出最終可能會產生誤導,因為它可能是從不同的 Python 直譯器獲取的。

    • 新增了 `python_executable` 金鑰到 JSON 輸出。 其中包含 Barman 正在使用的確切 Python 直譯器的路徑。

此資訊也發佈在 Barman 的 NEWS 中。

關於 Barman

備份與還原管理器 (Barman) 是一個開放原始碼的管理工具,用於企業關鍵環境中 PostgreSQL 伺服器的遠端備份和災難還原。 它依賴於 PostgreSQL 強大且可靠的 Point-In-Time Recovery 技術,讓 DBA 可以從一個位置遠端管理完整備份目錄,並管理多個遠端伺服器的還原階段。 Barman 根據 GNU GPL 3 發布,並由 EDB 維護。