PostgreSQLのフェールオーバーとレプリケーション


14

PostgreSQL 9.1を評価していますが、フェイルオーバーとレプリケーションの詳細に関連する質問はほとんどありません。

テストシナリオはほとんどありません。マスターサーバーと少数のスレーブを備えた最初のサーバー。マスターがクラッシュした場合、スレーブの1人がマスターになります。マスターが通常の状態に戻った後、クラスター内の他のサーバーと同期し(ダウン中に行われたすべての変更を適用)、マスターの役割を要求するか、スレーブになります。

PostgreSQLで見られる問題と現在のシナリオは次のとおりです。

1)マスターサーバーの停止を検出するための組み込みツールが表示されません。pgpoolがそれを処理し、トリガーファイルを作成できることを読みました。また、人々はこれにLinuxのハートビートまたは類似のツールを使用していることも読みました。さて、フェールオーバーを検出して、クラスター内に新しいマスターを割り当てることができます。他のスレーブは、新しいマスターが存在することを理解し、今すぐバックアップする必要がありますか?

2)フェールバック手順がわかりません。マスターとスレーブのホスト構成は異なります。マスターフェイルバックがクラッシュした後、2つのマスターを使用できますか?サーバーはどのように同期しますか?「データフォルダーをサーバーに転送して再起動する」などの手動のソリューションのみを見ました。それでは、ここでの解決策やベストプラクティス、または少なくとも主要な原則は何ですか?

3)クライアント側でサーバーの停止を処理するにはどうすればよいですか?接続を作成するときに、サーバーIPを明示的に指定します。マスター-スレーブ構造を認識し、マスターのみにリクエストを送信し、接続が失われた場合にバックアップサーバーに切り替えるなど、何らかの種類のConnectionManagerを開発する必要がありますか?私は、pgpoolがアプリケーションのエントリポイントとなり、正しい方法で接続を管理できることを読みました。ここではpgpoolのみが解決策ですか?フェールオーバーとフェールバックを適切に処理しますか?

4)手動でデータをコピーし、PostgreSQLインスタンスやその他の手作業で行うべきものを再構成することを避けるためのソリューション(商用)もありますか?だから、全員が同期しているときのクラスター構成のようなもので、誰がマスターであり、すべてがオペレーターの注意なしに自動的に切り替わるのかは明らかですか?

これらのスレッドと記事によると

PostgreSQLでのストリーミングレプリケーションとフェールオーバー

PostgreSQL 9.1でのフェイルオーバーの自動化

http://denishjpatel.blogspot.com/2010/11/possibility-of-graceful-switchover.html

これらの疑問を解決するための単一の完全自動ソリューションはありません。私は正しいですか?

ありがとう!


回答:


4
  1. スレーブは新しいマスターを理解しません。手動で行う必要があります。
  2. はい、それらは異なっており、古いマスター用に新しいものを作成する必要があります。ただし、古いスタンバイは引き続きマスターとして機能しますが、そのノードでmax_wal_sendersを設定する必要があります。また、フェイルオーバー後に新しいマスターのpg_hba.confを設定する必要があります。フェイルオーバー後(ノードがロールmaster-> slave slave-> masterを変更した場合)、recovery.confファイルで設定した新しいスタンバイフォルダーデータディレクトリに新しいwalファイルを転送する必要があります。または単にrsyncを使用できます。

  3. pgbouncerを使用できます。この方法では、pgbouncerサーバーアドレスを新しいマスターに変更するだけです。

  4. EnterpriseDBにはいくつかの商用ツールがあります。それらをチェックできるかもしれません。

そして最後に、あなたは正しいです。これらの疑問を解決するための単一の完全自動ソリューションはありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.