前書き
-
PostgreSQL *は、メンテナンスの容易さ、費用対効果、および他のオープンソーステクノロジーとの簡単な統合により、Webおよびモバイルアプリケーション開発者に非常に人気のあるオープンソースデータベースプラットフォームです。
PostgreSQL環境を維持する重要なタスクの1つは、データベースを定期的にバックアップすることです。 バックアップは、あらゆる組織の災害復旧(DR)プロセスの一部を形成します。 これはいくつかの理由で重要です。
-
ストレージやサーバー自体などの基盤となるインフラストラクチャコンポーネントの障害によるデータ損失に対する保護
-
データの破損およびデータの望ましくないまたは悪意のある損失に対する保護
-
本番データベースを開発環境またはテスト環境に移行する
通常、データベースのバックアップと復元の責任はDBAの肩にかかっています。 ただし、小規模な組織や新興企業では、システム管理者、DevOpsエンジニア、またはプログラマーが独自のデータベースバックエンドを作成する必要があります。 そのため、PostgreSQLを使用するすべての人にとって、バックアップの仕組みとバックアップからの復元方法を理解することが重要です。
このチュートリアルでは、Barmanバックアップサーバーをセットアップし、プライマリデータベースサーバーからバックアップを作成し、スタンバイサーバーに復元します。
PostgreSQLバックアップ方法の簡単な紹介
Barmanのセットアップを開始する前に、PostgreSQLで使用可能なバックアップの種類とその使用方法を少し見てみましょう。 (バックアップ戦略のより広範な概要については、https://www.digitalocean.com/community/tutorials/how-to-choose-an-effective-backup-strategy-for-your-vps [効果的なバックアップに関する記事をお読みください]。)
PostgreSQLは、2種類のバックアップ方法を提供します。
-
論理バックアップ
-
物理的なバックアップ
論理バックアップは、データベースのスナップショットのようなものです。 これらは、PostgreSQLに同梱されている `+ pg_dump `または ` pg_dumpall +`ユーティリティを使用して作成されます。 論理バックアップ:
-
個々のデータベースまたはすべてのデータベースをバックアップします
-
スキーマのみ、データのみ、個々のテーブル、またはデータベース全体(スキーマとデータ)をバックアップします
-
独自のバイナリ形式またはプレーンSQLスクリプトでバックアップファイルを作成する
-
PostgreSQLに同梱されている `+ pg_restore +`ユーティリティを使用して復元できます
-
*ポイントインタイムリカバリ(PITR)*を提供しない
つまり、午前2時にデータベースの論理バックアップを作成し、そこから復元すると、復元されたデータベースは午前2時になります。 特定の時点、たとえば午前1時30分に復元を停止する方法はありません。 午前10時にバックアップを復元すると、8時間分のデータが失われます。
物理バックアップは、バイナリ形式のみを処理し、ファイルレベルのバックアップを作成するため、論理バックアップとは異なります。 物理バックアップ:
-
ポイントインタイムリカバリを提供する
-
PostgreSQLの_dataディレクトリ_および_WAL_(Write Ahead Log)ファイルの内容をバックアップします
-
より多くのディスク容量を確保する
-
PostgreSQLの `+ pg_start_backup `および ` pg_stop_backup +`コマンドを使用します。 ただし、これらのコマンドはスクリプト化する必要があるため、物理バックアップはより複雑なプロセスになります
-
個々のデータベース、スキーマのみなどをバックアップしないでください。 それはオールオアナッシングのアプローチです
WALファイルには、データベースで発生する_transactions_(INSERT、UPDATEまたはDELETE)のリストが含まれています。 データを含む実際のデータベースファイルは、データディレクトリ内にあります。 したがって、物理バックアップから特定の時点に復元する場合、PostgreSQLは最初にデータディレクトリの内容を復元し、次にWALファイルからその上でトランザクションを再生します。 これにより、データベースが時間内に一貫した状態になります。
-
Barmanバックアップの仕組み*
従来、PostgreSQL DBAは独自のバックアップスクリプトとスケジュールされた `+ cron +`ジョブを作成して物理バックアップを実装していました。 バーマンはこれを標準化された方法で行います。
-
Barman または Backup and Recovery Manager *は、http://www.pgbarman.org/ [2ndQuadrant]の無料のオープンソースPostgreSQLバックアップツールです。これは、プロのPostgresソリューション企業です。 BarmanはPythonで書かれており、PostgreSQLインスタンスの物理的なバックアップと復元のシンプルで直感的な方法を提供します。 バーマンを使用する利点は次のとおりです。
-
完全に無料です
-
よく管理されたアプリケーションであり、ベンダーから専門的なサポートを受けられます
-
DBA / Sysadminが複雑なスクリプトと `+ cron +`ジョブを作成およびテストする必要がなくなります
-
複数のPostgreSQLインスタンスを1つの中央の場所にバックアップできます
-
同じPostgreSQLインスタンスまたは異なるインスタンスに復元できます
-
ネットワークトラフィックとディスクスペースを最小化する圧縮メカニズムを提供します
目標
このチュートリアルでは、3つのDigitalOcean Dropletsを作成し、これらのマシンのうち2つにPostgreSQL 9.4をインストールし、3つ目にBarmanをインストールします。
PostgreSQLサーバーの1つがメインデータベースサーバーになります。ここで、運用データベースを作成します。 2番目のPostgreSQLインスタンスは空であり、バックアップから復元できるスタンバイマシンとして扱われます。
Barmanサーバーはメインデータベースサーバーと通信し、物理バックアップとWALアーカイブを実行します。
次に、ライブデータベースからテーブルを削除して、「災害」をエミュレートします。
最後に、バックアップされたPostgreSQLインスタンスをBarmanサーバーからスタンバイサーバーに復元します。
前提条件
このチュートリアルを実行するには、3つ以上のDigitalOcean Droplets(または独自のLinuxサーバー)を作成し、それぞれに少なくとも* 2 GBのRAM *と2つのCPUコアを作成する必要があります。 ドロップレットの作成の詳細については説明しません。詳細についてはhttps://www.digitalocean.com/community/tutorials/how-to-create-your-first-digitalocean-droplet-virtual-server [こちら]をご覧ください。
3つのサーバーすべてに同じOS(* CentOS 7 * x64ビット)が必要です。
次のようにマシンに名前を付けます。
-
* main-db-server *(IPアドレスをとして示します)
-
* standby-db-server *(IPアドレスをとして指定します)
-
* barman-backup-server *(IPアドレスをとして示します)
マシンの実際のIPアドレスは、DigitalOceanコントロールパネルから確認できます。
また、各サーバーにsudoユーザーを設定し、一般的なアクセスに使用する必要があります。 ほとんどのコマンドは2人の異なるユーザー(* postgres および barman *)として実行されますが、これらのアカウントに切り替えるには各サーバーにもsudoユーザーが必要です。 sudo特権の仕組みを理解するには、https://www.digitalocean.com/community/tutorials/how-to-edit-the-sudoers-file-on-ubuntu-and-centos [sudoアクセスの有効化に関するDigitalOceanチュートリアル]を参照してください。 。
ステップ1-PostgreSQLデータベースサーバーのインストール
まず、PostgreSQL 9.4を* main-db-server および standby-db-server *にインストールして、データベース環境をセットアップします。
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-two-node-lepp-stack-on-centos-7 [このLEPPスタックチュートリアル]からPostgreSQLのインストール手順を完了してください。 このチュートリアルでは、次のことを行う必要があります。
-
セクション「ステップ1-PostgreSQLのインストール」に従ってください
-
セクション*ステップ2-PostgreSQLの設定*に従ってください
ステップ2-PostgreSQLの設定*で、Webサーバーのデータベースへのアクセスを許可するために + pg_hba.conf +`ファイルを変更する代わりに、この行を追加して、Barmanサーバーが
barman-backup- server * IPアドレスとそれに続く `+ / 32 +