web-dev-qa-db-ja.com

WindowsServer上のPostgreSQLフェールオーバークラスター

アプリケーションの基本的なフェールオーバークラスターをセットアップする方法に関するアドバイスを探しています。

  • 4台のマシン Microsoft Windows Server(おそらく2003年)を実行します。
  • 4つすべては常にアプリケーションを実行します。これは本質的にWebサービスです。
  • 負荷分散は「外部委託」されています。他の誰かがサーバー間でのWeb要求の分散を処理します。
  • 常にoneのサーバーのみがPostgreSQLサーバーをアクティブに実行します。別のサーバー(4つのうち)にもDBがインストールされていますが、スタンバイ/パッシブになっています。
  • DBデータは共有ストレージに保存されます。サーバー間でデータをコピーする必要はありません。
    • 読み取りは、多くのエンドユーザーによって非常に頻繁に行われ、データのかなり小さなチャンクで行われます。
    • 書き込みは、はるかに少ない頻度で、少ないユーザーによって、非常に大量のデータで実行されます。

では、DBサーバーの1つのインスタンスとアプリケーションの4つのインスタンス(サーバーごとに1つ)のみを常に保持するようにMicrosoft ClusterServiceを構成するにはどうすればよいでしょうか。そして、PostgreSQLはMSCSとうまく統合されていますか?

更新:共有ストレージにデータを保持する代わりに、ログ配布を使用していくつかのDBサーバーにデータを複製することも検討します。このオプションには2つの問題があります。

  • ログ配布では、すべてのデータを取得して引き継ぐ準備ができている2番目のサーバーがあることを確認するだけです。実際の障害検出およびフェイルオーバースイッチを実装するにはどうすればよいですか?
  • 切り替え:マスターに障害が発生し、システムが自動的にスレーブにフェイルオーバーし、後でマスターがオンラインに戻ったとします。 WAL配送では、ログ配送をもう一度再構成する必要があり、元に戻すのはシームレスにはほど遠いことを理解しています。そうですか?
4
Yodan Tauber

PostgreSQLは、汎用サービスモードを使用して、MSCSで正常に動作します。共有ドライブにもPostgreSQLバイナリをインストールし、そこにサービスを指定することをお勧めします。そうすれば、バージョンの不一致が発生しないことが確実になります。

Larsには、dbとappserverを同じマシンで実行することは推奨されないという良い点があります。代わりに、dbに2台、appserverに2台のマシンを使用することを検討することをお勧めします。または、少なくともPostgreSQLが実行されているノードでMSCSにappserverを停止させます(それができるかどうかはわかりませんが、想像できます)そうすべき)

1
Magnus Hagander