2017-07-05 16 views
2

Windows Server 2012 R2でPostgreSQLを使用して、私たちのプロジェクトで24時間7分の稼働時間を稼ぐことができます。同じデータベース上の2つのマスターインスタンス

私は、2つの異なるサーバA & Bで2つのマスタインスタンスを持つことができるかどうかコミュニティに尋ねると、lanの共有ファイルストレージにある同じDB上で「動作」します。何らかの理由でサーバA上の1つのマスタインスタンスがオンラインになり、何らかの理由でオフラインになった場合(私が推測する)、powershellスクリプトはpostgresqlサービスが停止したことを認識し、サーバBでサービスを開始します。サーバA & Bのサービスは競合を避けるために動作しています。

これが可能かどうか、または私の設定に適した方法をお尋ねしたいと思います。 (サーバAがサーバBをシャットダウンするときに、サーバBが読み込み専用モードでないために複製を使用できません)

答えて

3

PostgreSQLの2つのインスタンスを同じデータディレクトリで起動すると、深刻なデータの破損は、が発生します。

通常は、それを防ぐファイルpostmaster.pidがありますが、同じファイルシステムにアクセスする別のマシンのPostgreSQLサーバプロセスは、クラッシュ時に残っていると思われるログメッセージを吐き出した後、うまくリンクを解除します。

あなたは本当にそのようなソリューションで薄い氷の上を歩いています。

あなたが考えなかったもう1つの問題は、サーバーがまだ実行中かどうかを確認するスクリプトです。たとえば、2つのサーバー間のネットワーク接続がダウンしているのに、サーバーがまだうまく動作しているため、スクリプトが失敗するとどうなりますか?このような“スプリットブレイン”シナリオでは、セットアップでデータが破損する可能性があります。

注意:Windows(Powershell?)を使用しているように見えるので、共有ストレージについて話しているときは、おそらくCIFSファイルシステムを想定しています。 Windows “ネットワーク共有”はではありません。信頼できるファイルシステム—最後に私がチェックしたのは_commitでした。

信頼性の高いフェールオーバークラスタを作成することは思ったより難しく、自分でロールしようとする前に既存のソリューションを確認することをお勧めします。

+0

まずはお返事ありがとうございます。あなたが正しいと私はここで尋ねている理由ですが、私はWindowsサーバーで動作している既存のソリューションを見つけることはできませんでした。すべてのツールはLinuxシステム用です。私が上記のように私が見つけた唯一の解決策は、ウォールアーカイブであり、マスターがダウンしているときにスレーブサーバーが常に読み取り専用モードにあり、私たちのアプリケーションでは動作しないシナリオです。あなたは、Windows環境で提案することを念頭に置いて他の設定がありますか? –

+0

私はWindowsをやっていません...クラスタリングソリューションをリストした[PostgreSQL Wikiページ](https://wiki.postgresql.org/wiki/Clustering)を見ましたか?おそらく[this](https://wiki.postgresql.org/wiki/Shared_Storage)も面白いです。 –

+0

はい、このシナリオは私が上記で説明していますが、うまく動作するかどうかわかりません。 –

関連する問題