PostgreSQLは、最も進んだオープンソースのリレーショナルデータベース管理システムの1つであると考えられているオブジェクト関係データベース管理システム(ORDBMS:Object Relational Database Management System)です。すべてのリレーショナルデータベースと同様に、ACID準拠のシステムであり、トランザクションクエリ、DDLステートメント、マスター/スレーブレプリケーションアーキテクチャをサポートしています。さらに、PostgreSQLは、Postgres Plusでデータインポートツールを使用する簡単な方法を提供し、ユーザーはOracleなどのエンタープライズデータベースからデータをインポートできます。PostgreSQLはオープンソースコミュニティによって管理されており、最新のバージョンであるPostgreSQL 9.4は2014年12月22日にリリースされました。
クラウドコンピューティングの進歩に伴い、クラウド管理データベースがますます普及しています。クラウド管理データベースには価格設定モデル、スケーラビリティ、簡単な管理など、さまざまな利点があります。大手クラウドサービスプロバイダとして、AWSはPostgreSQLを2つの異なる方法でホストします。1つはAWS管理のデータベースサービスRDSを使用し、2つ目はAWS EC2インフラストラクチャでデータベースを自己ホスティングすることです。
一部のユーザーは管理されたサービスであるRDSの使用を好みますが、他の多くの人が依然として独自のデータベースの管理を好み、次のことを可能にしています:
- リージョン間レプリケーションの実現(レプリカの読み取り)
- 書き込み容量のあるレプリカを設定(例えば、1日の終わりにデータを生成することができる報告データベース)
- 自動フェイルオーバーを設定してリージョンを区切る
- RDSではすべてのパラメータを変更できない可能性があるため、非常に優れた管理機能を備えている場合は、すべてのデータベースレベルのパラメータを手動で微調整しています。
この記事では、EC2がホストするPostgreSQLデータベースの例を使用します。
信頼性の高いデータベース管理については、適切なバックアップとリストアのメカニズムを持つことも非常に重要です。これにより、より良い災害復旧を達成し、データ損失を防止することができます。本番環境では、人為的なエラーが発生すると貴重なデータが失われる可能性があります。そのため、定期的に計画されたバックアップと一緒に、運用データベースを変更する前にシステムをバックアップすることをお勧めします。
クラウドホスト型データベースを使用してバックアップとリカバリを行うには、主に次の2つの方法があります:
- クラウドホストデータベースインスタンス上で実行される、データベースエンジンによる固有のバックアップとリカバリ
- クラウドプロバイダのインフラストラクチャ(AWSのEBSスナップショットなど)を使用したボリューム/ディスクレベルのバックアップとリカバリ
バックアップとリカバリの両方のオプションについては、記事の後半で説明します。
まず、PostgreSQLのデータバックアップ用に実装できる様々な固有のレプリケーション戦略を紹介しましょう。
PostgreSQLには2種類のバックアップがあります。物理バックアップは、ファイルシステムレベルバックアップとPITR(継続的なアーカイブとポイントインタイムリカバリ)、および論理バックアップに分類されています。
- 物理バックアップ:PostgreSQLが開始すると、バックエンドはコピーされたデータファイルを作成します。
- ファイルシステムレベルバックアップ:この方式では、データファイルをコピーして別の場所に保存し、必要に応じてアーカイブまたは圧縮することができます。
ファイルをバックアップするコマンドは次のとおりです:
tar -cf backup-dd-mm-yy.tar <postgresql installation directory>l/data
長所:ファイルシステムレベルのバックアップは通常、SQLダンプよりも大きくなります(pg_dumpはインデックスの内容をダンプしません。インデックスを再作成するコマンドだけです)。ただし、ファイルシステムのバックアップを実行する方が高速になる場合があります。
短所:バックアップ中にデータの矛盾がチェックされないと、バックアップが矛盾する可能性があります。バックアップの整合性をより確実にするには、バックアップの前にデータベースを停止してください。
使用する場所:単一のデータベースサーバーには推奨されませんが、PostgreSQLのマスター/スレーブアーキテクチャが実装されている場所で使用できます。これは、tarコマンドで使用可能なバックアップを実行するためにデータベースを停止する必要があるためです。
- PITR(継続的なアーカイブとポイントインタイムリカバリ):PostgreSQLはデータベースに加えられた変更を記録するWAL(Write Ahead Log)ファイルを作成します。この方法では、WALを定期的にバックアップし、ファイルシステムレベルバックアップと組み合わせてデータベースを再作成することができます。
長所:このアプローチの利点の一つとして、データベースを以前の時点に更新できるように、特定の間隔でWALファイルの作成、作成、および停止を行う機能があります。PITRを使用すると、WALファイルの作成時に最新の変更データのみがバックアップされ、データのバックアップに必要なストレージ容量が削減されます。
- 論理バックアップ:PostgreSQLには2つのユーティリティ(’pg_dump’と’pg_dumpall’)があり、一瞬に整合性のあるデータベーススナップショットを取得します。ただし、他のユーザーにデータベースを使用させることはありません。どちらのユーティリティも*.sqlファイルを作成する効果的なツールです。これらのユーティリティを使用すると、ローカルデータベースでバックアップを実行し、リモートデータベースでバックアップを復旧できます。
クラッシュ整合性スナップショット
AWS EBSスナップショットは、クラッシュ整合性のあるスナップショットと見なされるポイントインタイムバックアップを提供します。これらのスナップショットは、特定の時点でディスクのすべてのデータをバックアップします。ただし、ファイルがまだ開いている場合、たとえばデータベース内の進行中のI/Oトランザクションの場合、データがディスクに完全に書き込まれないことがあります。これにより、スナップショットが作成されていることをファイルシステムが認識しない可能性があるため、データが不一致になる可能性があります。これを解消するには、アプリケーション整合性のあるスナップショットを使用することをお勧めします。
アプリケーション整合性スナップショット
スナップショットはまずスナップショットが取られていることをOSに通知してから、バックアップを実行することをお勧めします。これらのタイプのスナップショットは、アプリケーション整合性スナップショットと呼ばれます。N2W Software CPMは、アプリケーション整合性のあるスナップショットを実現するのに役立ちます。
完全なブロックレベルのスナップショットを取るため、AWS EBSのスナップショットは、固有のPostgreSQLバックアップオプション(ファイルシステムバックアップなど)と比べて非常に高速です。
CPM – Cloud Protection Manager
CPMは、EC2のエンタープライズバックアップ、リカバリ、災害復旧ソリューションです。これにより、EC2環境全体のバックアップを自動化および維持し、アプリケーション整合性のあるバックアップを実現できます。これは、スナップショットの前後で特定のタスクを実行するメカニズムを提供し、バックアップをOSに通知することによって行われます。
CPMを使用すると、EC2上のPostgreSQLバックアップの前に実行できるスクリプトを記述できます。
バックアップスクリプトを実行するには、次のようにポリシーを設定します:
CPMは、“before”,“after”および“complete”という3つの異なるスクリプトを実行できます。
- “before”スクリプトは、EBSスナップショットが作成される前に起動されます。ここで’pg_start_backup’コマンドを実行すると、バックアップが開始されるトランザクションログの場所が表示されます。CPMは’pg_start_backup’が完了した後にスナップショット手順を開始します。
- “after”スクリプトは、バックアップの開始直後に実行されます。ここで’pg_stop_backup’コマンドを実行すると、現在のトランザクションログ挿入ポイントが次のトランザクションログファイルに移動します。
- “complete”スクリプトは、すべてのスナップショットが完了した後に実行されます。この時点でWALファイルを削除するかどうかを決定し、それに応じてコードに組み込むことができます。
このブログでは、Cloud Protection Manager(CPM)のスクリプトを実行することで、PostgreSQLでアプリケーション整合性のあるバックアップを実現する方法を紹介しました。CPMはEBS&RDSスナップショットに基づくEC2のエンタープライズクラスのバックアップソリューションです。LinuxおよびWindowsサーバー上での整合性アプリケーションバックアップをサポートします。
(注) 現在CPMはN2WS Backup & Recoveryへ製品名が変わっています。
関連トピックス
- Jobを管理しているデータベースのバックアップ手順について【VMWare専用 バックアップ & レプリケーションソフト Veeam】
- リポジトリデータベースの圧縮手順 [CloudBerry Backup]
- Veeam構成情報データベースとして任意のPostgreSQLを使用する手順
- Amazon S3へSQL Serverデータベースのバックアップ手法
- Veeam構成情報データベースの移行手順 [SQL Server ⇒ PostgreSQL]
- クラウドに保存したOracleバックアップからのリストア【CloudBerry Backup】
- CloudBerry Backup Ver 4.7 のリリース
- クラウドから直接SQL Server DBへのリストアが可能に【CloudBerry Backup】
- Cloud Berry (MSP360) Backupを使用したOracleデータベースのAmazon S3, Microsoft Azure等クラウド・ストレージへのバックアップ 手法
- SQL Serverのデータをバックアップ~データをクラウドへ、データを他DBへ、仮想マシンごとNASやSANへ~