【ITニュース解説】Setting up incremental backups with PostgreSql - Implementation - Part 2
2025年09月13日に「Dev.to」が公開したITニュース「Setting up incremental backups with PostgreSql - Implementation - Part 2」について初心者にもわかりやすく解説しています。
ITニュース概要
PostgreSQLの増分バックアップをBarmanとrsyncで設定する具体的な方法である。WALアーカイブ有効化、SSH接続、Barmanサーバー設定、自動化、監視まで、データ保護のための詳細な手順だ。
ITニュース解説
PostgreSQLデータベースのデータを安全に保護し、万が一の事態に備えるための増分バックアップシステムをBarmanというツールを使って設定する具体的な方法について解説する。この解説は、増分バックアップの基本的な考え方やBarmanの役割をある程度理解しているシステムエンジニアの初心者向けに、実装のステップを詳しく説明する。ここでは、実際の作業環境として、PostgreSQLデータベースが稼働する「pg」サーバー(IPアドレス: 192.168.58.11)と、Barmanバックアップ管理ツールが稼働する「barman」サーバー(IPアドレス: 192.168.58.12)の二台のUbuntu 22サーバーを想定する。
Barmanでバックアップを行う主な方法として、rsyncというコマンドとSSH接続を利用する方法と、PostgreSQLの組み込み機能であるpg_basebackupを利用する方法の二つがある。pg_basebackupによる増分バックアップ機能はPostgreSQL 17以降でしか利用できないため、今回は広く利用されているrsync方式を採用して設定を進める。この設定を成功させるためには、サーバー間で三種類の接続が必要となる。まず、BarmanサーバーがPostgreSQLサーバーの管理や監視を行うための、一般的なTCP/IP接続。これはPostgreSQLの標準ポートを使用する。次に、最初の完全バックアップ(ベースバックアップ)を取得する際に、BarmanサーバーからPostgreSQLサーバーへのSSH接続。このとき、BarmanサーバーのbarmanユーザーがPostgreSQLサーバーのpostgresユーザーとして接続し、必要なファイルにアクセスする。最後に、PostgreSQLのトランザクションログであるWALファイルをBarmanサーバーに送信するための、PostgreSQLサーバーからBarmanサーバーへのSSH接続。これはPostgreSQLの設定でarchive_commandとして指定され、PostgreSQLサーバーのpostgresユーザーがBarmanサーバーのbarmanユーザーとして接続し、WALファイルを送る。
これらのSSH接続をセキュアかつパスワードなしで行うために、SSHキー認証の設定が不可欠となる。まず、PostgreSQLサーバー上でpostgresユーザーに切り替え、SSHキーペアを生成する。生成された公開キーは、ssh-copy-idコマンドを使ってBarmanサーバーのbarmanユーザーにコピーする。これにより、PostgreSQLサーバーのpostgresユーザーはパスワードなしでBarmanサーバーにSSH接続できるようになる。同様に、Barmanサーバー上でbarmanユーザーに切り替え、SSHキーペアを生成し、PostgreSQLサーバーのpostgresユーザーに公開キーをコピーする。これにより、BarmanサーバーのbarmanユーザーもパスワードなしでPostgreSQLサーバーにSSH接続できるようになる。作業を開始する前に、各ユーザーに強力なパスワードが設定されていることを確認すると良い。
次に、PostgreSQLサーバー側で増分バックアップに必要な設定を行う。データベースの変更履歴を記録するWALファイルは、増分バックアップや特定の時点へのデータ復旧(ポイントインタイムリカバリ)に必要となる重要なファイルである。WALファイルは通常/var/lib/postgresql/<バージョン>/main/pg_wal/ディレクトリに保存される。PostgreSQLの設定ファイルであるpostgresql.confを開き、以下の項目を設定または確認する。listen_addresses = '*'は、PostgreSQLが全てのネットワークインターフェースからの接続を受け入れるようにする設定である。wal_level = replicaは、WALに記録する情報レベルを設定し、レプリケーションやバックアップに必要な全ての情報を記録するようにする。archive_mode = onは、WALファイルの自動アーカイブ機能を有効にする。archive_command = 'rsync -a %p barman@192.168.58.12:/var/lib/barman/pg/incoming/%f'は、新しいWALファイルが生成されるたびに実行されるコマンドを指定する。このコマンドはrsyncを使ってWALファイルをBarmanサーバーの指定されたディレクトリへ安全に送信する。max_wal_senders = 3は、同時にWALを送信できるプロセスの最大数を設定する。これらの設定後、PostgreSQLのアクセス制御ファイルであるpg_hba.confに、Barmanサーバーからの接続を許可するルールを追加する。具体的には、host replication barman 192.168.58.12/32 md5という行を追加し、BarmanサーバーのIPアドレスからのbarmanユーザーによるレプリケーション接続をパスワード認証(md5)で許可する。さらに、PostgreSQL内でbarmanという名前のユーザーを作成する。このユーザーには、--superuser(管理者権限)と--replication(レプリケーション権限)を与え、Barmanがデータベースの管理やWALの取得を行えるようにする。これらの設定変更を有効にするためには、PostgreSQLサービスを再起動する必要がある。
PostgreSQLの準備が完了したら、Barmanサーバー側の設定に取り掛かる。まず、Barmanがバックアップデータを保存するための専用ディレクトリを作成し、適切な所有者と権限を設定する。例えば、/var/lib/barman/pgというディレクトリを作成し、barmanユーザーとbarmanグループに所有権を与える。次に、Barmanのグローバル設定ファイル/etc/barman.conf、またはサーバーごとの設定ファイル/etc/barman.d/pg.confに、PostgreSQLサーバー「pg」に関する詳細な設定を追加する。[pg]というセクションを作成し、descriptionでサーバーの説明を記述する。conninfo = host=192.168.58.11 user=barman dbname=test_dbは、BarmanがPostgreSQLに接続するために使用する接続文字列を指定する。ここで指定されたユーザーとデータベースの情報を使って、BarmanはPostgreSQLと通信する。ssh_command = ssh postgres@192.168.58.11は、Barmanがベースバックアップの取得時にPostgreSQLサーバーへSSH接続する際に実行するコマンドを指定する。backup_method = rsyncは、バックアップ方法としてrsyncを使用することを明確に宣言する。streaming_archiver = onは、WALファイルをリアルタイムで取得するストリーミングアーカイブ機能を有効にする。slot_name = barmanは、PostgreSQLのレプリケーションスロット名を指定する。これは、BarmanがWALファイルを確実に取りこぼしなく受け取るために非常に重要である。
Barmanの設定には、ディスクスペースの効率的な利用やバックアップデータの保持期間に関するオプションも存在する。例えば、reuse_backup = linkを設定すると、前回のバックアップと内容が同じファイルはハードリンクとして処理され、ディスクスペースを節約できる。retention_policy = RECOVERY WINDOW OF 7 DAYSと設定すると、直近7日間のある時点への復旧を可能にするために必要なバックアップのみを保持し、それ以前の古いバックアップは自動的に削除される。これにより、ディスク使用量を最適化できる。compression = gzipを設定することで、バックアップファイルを圧縮して保存し、さらにディスクスペースを節約することが可能となる。BarmanがPostgreSQLに接続する際にパスワードなしで認証できるように、barmanユーザーのホームディレクトリに.pgpassファイルを作成する。このファイルには、接続情報とパスワードを特定の形式で記述し、chmod 0600コマンドで適切なアクセス権限を設定する。
これらの設定が全て完了したら、barman check pgコマンドを実行して、PostgreSQLとBarman間の接続状態やWALアーカイブが正常に機能しているかを確認する。このコマンドは、SSH接続、WALのアーカイブ状態、潜在的なエラーの有無などを詳細にチェックし、問題があればその原因を特定するのに役立つ。全ての項目が「OK」と表示されたら、最初のベースバックアップを実行する準備が整う。barman backup pgコマンドを実行すると、指定したPostgreSQLサーバーの完全バックアップが開始される。このコマンドはベースバックアップを取得し、その後も継続的にWALファイルのアーカイブが続くことを確認する。
手動でのバックアップが正常に完了したことを確認したら、定期的なバックアップを自動化するためにcronを設定する。sudo -u barman crontab -eコマンドを使ってbarmanユーザーのcrontabを編集し、例えば0 2 * * * barman backup pgという行を追加する。これにより、毎日午前2時に自動的にバックアップが実行されるようになる。自動化設定は、必ず手動でコマンドが正常に動作することを確認してから行うことが重要である。バックアップの管理と監視もBarmanの重要な機能である。barman list-backup pgコマンドを使用すると、取得済みのバックアップの一覧を確認できる。barman check pgはサーバーの現在の状態を監視し、barman show-backup pg <バックアップID>コマンドを使えば、特定のバックアップの詳細情報を確認できる。万が一、バックアップに失敗した場合は、まずbarman checkコマンドを実行して状況を確認し、PostgreSQL (/var/log/postgresql) とBarman (/var/log/barman/) のログファイルを詳細に調査することで、問題の原因を特定できる。
このように、Barmanを活用することで、PostgreSQLのデータを保護するための堅牢な増分バックアップシステムを効果的に構築できる。SSHキー認証による安全な通信、WALアーカイブの正確な設定、そしてBarmanによるバックアップの管理と自動化は、データベースのデータ保護と復旧の信頼性を大幅に向上させる。Barmanは強力で柔軟性のあるオープンソースのソリューションであり、様々な環境でその価値を発揮する。この解説ではシステムの実装に焦点を当てたが、バックアップ戦略を完全にマスターするためには、取得したバックアップから実際にデータを復旧する手順、特にポイントインタイムリカバリの概念と具体的な方法を学ぶことが次の重要なステップとなる。