web-dev-qa-db-ja.com

PostgreSQLレプリケーション本番の準備はできていますか?

PostgreSQLネイティブレプリケーションはMySQLとどのように比較されますか?

非同期レプリケーションが最近の同期よりも長くサポートされていることを知っています。同期は実際のプロジェクトで使用できますか?

16
SrgHartman

生産準備は?

はい、本番環境に対応し、広く使用されています。 Herokuフォロワーは、AWS RDSスタンバイやリードレプリカと同様に、PostgreSQLの組み込み非同期レプリケーションなどに基づいています。ストリーミングレプリケーションは、PostgreSQLでほぼ普遍的に使用されます。

レプリケーションの設定は正確ではありませんが、 repmgr のようなツールはそれをある程度助け、メジャーリリースごとに徐々に改善されます。 pg_basebackupがストリーミングレプリケーションを使用してシステムのコピーを取得する(および別のスタンバイから取得する)機能は、非常に役立ちます。

一般に、機能が本番稼働可能になるまで、PostgreSQLでリリースされることはありません。バグは他のソフトウェアと同じように発生しますが、通常は特定された直後に修正されます。本当に大きな新機能には、.0リリース後に発見されたバグや問題がある場合がありますが、そうであれば、それらの修正が最優先されます。バグはただ残っているだけではありません。

ストリーミングレプリケーションに関する深刻な問題(同期または非同期)については認識していません。また、報告されていることもありません。導入されたメジャーバージョンの.0リリースでは、Pgの通常の標準よりも安定性が劣っていましたが、どちらも迅速に成熟し、完全に本番環境に対応しています。

(更新:9.3.4より前の新しい9.3バージョンには、レプリケーションの問題を引き起こす特定のバグがありました。9.3のユーザーは、すぐに9.3.4に更新する必要があります。古いバージョンは影響を受けません。)

言及したい唯一の注意点は、同期レプリケーションに関する細かい詳細です。マスターでコミットし、レプリカが確認するのを待つ間にコミットした後、クエリをキャンセルすると、レプリケートされる前であっても、マスターでコミットされたものとして扱われます。レプリカが応答するのを待っている間にマスターを再起動しても、同じ効果が得られます。実際にはこれは無関係ですが、私が考えることができる唯一の問題についてです。

MySQLと比較しますか?

Pgのネイティブレプリケーションは、MySQLとはかなり異なります。

MySQLは論理レプリケーションを使用して、テーブルデータ、テーブル構造などに加えられた論理変更を送信し、レプリカがそれらの変更を適用します。

PostgreSQLのレプリケーションは下位レベルです(9.5以降では、将来のバージョンでは論理レプリケーションも追加される可能性があります)。テーブルで変更されたブロックを送信します。これは、よりシンプルで適切な方法であり、レプリカサーバーの負荷が低くなりますが、ネットワーク帯域幅をより多く消費し、まだレプリケートされていない変更を保持するために、マスター上により多くのストレージが必要です。 WALアーカイブフォールバックでストリーミングレプリケーションを使用するように構成すると、MySQLよりも構成が複雑になります。タプルの変更だけでなく、VACUUMアクティビティのような低レベルの変更をレプリケートし、レプリカのディスク上の状態をマスターと同じ状態に保ちます。 1つのデータベースのみを複製することはできません。システム全体をレプリケートする必要があります。1つの大きくてチャーンが少なく重要でないデータベースと1つの小さくてチャーンが少なく重要なデータベースがある場合、これは苛立たしい場合があります。

全体として、それはあなたがそれで何をしたいかによります。

私は、PostgreSQLのレプリケーションを、バックアップ、高可用性、災害復旧に使用されるレプリカにとってかなり優れていると考えています。特に ポイントインタイムリカバリ(PITR) と組み合わせるとそうなります。

一方、長いトランザクションの実行中に複製されたデータの適用を遅らせる必要があるということは、非常に長い実行中のクエリをキャンセルするか、マスターに大幅に遅れて消費する必要があるため、読み取り専用のレポートレプリカにはあまり適していませんマスターのディスク容量が増え、それを維持するためにハードワークを強制します。

PostgreSQLで論理レプリケーションを有効にする の進行中の作業があります。ここでは、テーブルの構造、テーブルの内容などの論理的な変更が、ディスク上の状態ではなく複製されます。 Pgのカタログ設計とユーザー定義のすべてのサポートにより、これは非常に複雑な作業になります。一部の基盤は9.4で導入されていますが、完全な論理レプリケーションは9.6以降では使用できそうにありません。

31
Craig Ringer