Heroku Postgres のデータの安全性と継続的保護
最終更新日 2024年03月26日(火)
Table of Contents
Heroku Postgres は、ファイルシステムの増分スナップショットまたはベースバックアップ、および先行書き込みログ (WAL) ファイルを外部の信頼性の高いストレージに保持することによって、継続的保護のために物理バックアップを使用します。この記事では、Heroku Postgres で物理バックアップを実行する方法について説明します。
Heroku Postgres での物理バックアップ
スナップショットはほとんどのデータベースで、データベースが完全に使用可能な間に取得され、インスタンスのディスクのそのままのコピーを作成します。これには、現在実行中のデータベースのデッドタプル、肥大化、インデックス、すべての構造的特性が含まれます。スナップショットを取得する頻度は動的です。変更が平均またはそれより低いデータベースの場合、スナップショットは 24 時間おきに取得されます。もっと頻繁に変更されるデータベースの場合、もっと頻繁に取得されます。
場合によっては、ベースバックアップが引き続き使用されます。ベースバックアップは、データベースが完全に使用可能な間に取得され、Postgres のデータファイルのそのままのコピーを作成します。これには、現在実行中のデータベースのデッドタプル、肥大化、インデックス、すべての構造的特性が含まれます。Heroku Postgres では、ベースバックアップの取得は約 10 MB/秒にレート制限されており、実行中のデータベースで発生する負荷は最小限に抑えられます。
コミットされたトランザクションは WAL ファイルとして記録されます。このファイルは、スナップショットまたはベースバックアップ上で再生できるため、これによりデータベースの状態を完全に再構成する方法が提供されます。スナップショットは AWS の S3 オブジェクトストアに直接格納されます。ベースバックアップと WAL ファイルは、Postgres によって使用可能になるとすぐに S3 にプッシュされます。
Heroku Postgres によって管理されるデータベースはすべて、スナップショット、ベースバックアップ、および WAL ファイルを S3 に保持することによって継続的保護を提供します。また、スナップショットまたは永続的なベースバックアップと WAL ファイルをフェッチし、それを新しい Postgres インストール上で再生することによって、フォークとフォロワーのデータベースが実装されます。これらの物理バックアップを可用性の高いオブジェクトストアに保存することにより、ハードウェア障害、データ破損、または大規模なサービス中断が発生した場合にデータベース全体を復旧することもできます。
すべての Heroku Postgres データベースが継続的な物理バックアップによって保護されます。これらのバックアップはデータベースと同じリージョンに格納され、Standard 層以上のデータベースで Heroku Postgres ロールバック経由で取得されます。ただし、Essential 層のデータベースではロールバック、フォーク、フォロワーが提供されません。
これらのスナップショット、バイナリベースバックアップ、および WAL ファイルは、その性質のために、ソースデータベースと同じアーキテクチャ、メジャーバージョン、ビルドオプションを備えた Postgres インストールにしか復元できません。つまり、Postgres の複数のアーキテクチャやメジャーバージョンにわたってアップグレードするには、論理バックアップを完了する必要があります。
物理バックアップと論理バックアップの比較
Postgres で使用可能なバックアップのタイプは、物理バックアップと論理バックアップに大きく分類されます。Heroku Postgres での物理バックアップはそのままのコピーですが、論理バックアップはデータベース内の特定のオブジェクトのスキーマやデータの SQL のようなダンプです。
物理バックアップは、完全な障害復旧の場合に便利で、使用可能なデータ耐久性の計算量の最も少ない方法のいくつかを提供しますが、データの復元方法は非常に制限されています。論理バックアップはそれより柔軟ですが、非常に低速で、バックアップや復元中に膨大な計算リソースを必要とする場合があります。
すべての Heroku Postgres データベースが継続的な物理バックアップによって保護されますが、データの可搬性を高めるために、必要に応じて論理バックアップを取得することも選択できます。論理バックアップは、テスト、ステージング環境の設定、データの移行について柔軟性が高くなっています。詳細は、「Heroku Postgres Logical Backups」 (Heroku Postgres の論理バックアップ) を参照してください。