Webサイトをホストしたいのですが、バックエンドはPostgreSQLデータベースサーバーになります。冗長性を確保するために、異なるデータセンターに複数のWebサーバーを配置したいと思います。次に、各WebサーバーでDNSをラウンドロビンして、負荷を分散します。
これを行うには、複数のデータベースを用意し、何らかのレプリケーションを使用する必要がありますか?または、1つのデータベースを用意し、各Webサーバーがインターネット経由でそのデータベースを指すようにする方がよいでしょうか。
更新1
単一障害点を排除するために、複数のWebサーバーに複数のDBサーバーを配置する必要があるという考えが持ち上がりました。各データセンターに複製を設定したいのですが。各データセンターにWebサーバーとDBサーバーがあります。これが可能かどうかはわかりませんでした。そのため、DBサーバーを1つだけにするか、すべてのDBを1つの場所に置くかを考えました。しかし、理想的には、各データセンターに独自のデータセンターがあります。
私は最近、同様のプロジェクトでもそれを理解しようとしました。私が見つけたのは、それはそれほど簡単ではないということです。レプリケーションに関しては、いくつかのオープンソースおよび商用の代替手段があります。ただし、それらのほとんどは複数のマスター-マスターソリューションをサポートしておらず、それらの多くは保守とセットアップが困難です。
Webアプリケーションのセットアップ方法と必要な冗長性に応じて、先に進むためのいくつかの選択肢があります。最も簡単な方法は、おそらくウォームスタンバイを実行することです(その機能はバージョン8.3にすでに含まれています)が、クラッシュが発生した場合、ダウンタイムが発生します。
私が調べた他のレプリケーションソリューションは次のとおりです。
その中で、ブカルドはマスターマスター(マルチではありません)をサポートし、セットアップが非常に簡単なようであるため、最も興味深いと思いました。
Slonyはセットアップが少し難しく、テーブルを更新するときに多くのメンテナンスが必要です(DDLの変更は複製されません)。また、マスタースレーブにすぎないため、1つのデータベースにしか書き込むことができません。
PgClusterは維持されていないようで、ドキュメントやWebサイトに深刻な印象を与えることはありません(Webサイトは2005年以降更新されていません)。
DNSを介してグローバルラウンドロビンを実行すると、接続が非永続的になる可能性があります。コードがノードを認識しない場合は、複製されたデータベースへの書き込みを期待する必要があります。
ソリューションのカップル を使用してマルチマスターレプリケーションのセットアップを行うことができます。私は以前にPgClusterを使用して成功しました。 Postgres-R にも興味深いプロジェクトがあります。
ここでは一貫性が敵であることに注意してください。あるノードに書き込んでから別のノードから読み取ると、リクエストが他のデータベースへのコミットを上回る可能性があります。
クエリの大部分が読み取りである場合は、通常のレプリケーションスキームを設定してから、コードに中央のマスターデータベースへの書き込みを実行させることができます。それはより多くの作業ですが、一貫性の問題に対処しやすくなります。 Slony のようなものを使用して、「通常の」レプリケーションを実行できます。
編集:PgClusterの設定が難しく、ドキュメントが悪いというコメントに同意します。私がこれを書いているときに彼らのサイトがダウンしているので、私は彼らにリンクしませんでした。