9

フェイルオーバーを処理できるデータベースをセットアップする必要があります(一方がクラッシュした場合、もう一方が引き継ぎます)。そのために、mongodbを使用することにしました。2つのインスタンスでレプリカセットをセットアップしました。各インスタンスは個別のVMで実行されています。いくつか質問があります。

  • レプリカセットで少なくとも3つのインスタンスを使用することをお勧めします。2つだけ使っても大丈夫ですか?

  • 2つのインスタンスがあり、次に2つのIPアドレスがあります。データベースで読み取り/書き込みを行う必要があるアプリケーションにどのIPを与える必要がありますか?データベースがダウンしている場合、リクエストはまだアップしているインスタンスにどのようにリダイレクトされますか?

始めるためのいくつかの助けは素晴らしいでしょう!

4

1 に答える 1

12

レプリカセットで少なくとも3つのインスタンスを使用することをお勧めします。2つだけ使っても大丈夫ですか?

いいえ、レプリカセットの最小要件は3つのプロセス(ドキュメント)ですが、3つ目は、推奨されていなくてもアービターになる可能性があります。

2つのインスタンスがあり、次に2つのIPアドレスがあります。データベースで読み取り/書き込みを行う必要があるアプリケーションにどのIPを与える必要がありますか?データベースがダウンしている場合、リクエストはまだアップしているインスタンスにどのようにリダイレクトされますか?

2つの選択肢があります。

#1(推奨)

ドライバーにすべてのアドレスを提供します(詳細については、ドキュメントにアクセスしてください)。たとえば、nodejsドライバー(他のドライバーと同様)を使用します。このようにして、ドライバーはすべてのインスタンス、または少なくとも1つ以上のインスタンスを直接認識します。これにより、指定されたすべてのインスタンスがダウンした場合の問題を防ぐことができます(#2を参照)。

var MongoClient = require('mongodb').MongoClient;

MongoClient.connect('mongodb://[server1],[server2],[...]/[database]?replicaSet=[name]', function(err, db) {
});

#2

それらの1つ(おそらくプライマリ)をドライバーに提供すると、mongodbが残りを把握します。ただし、指定されたインスタンスがダウンしているときにアプリが起動すると、ドライバーは他のインスタンスを見つけることができないため、mongodbに接続できません。

于 2013-02-10T16:07:00.163 に答える