0

ロードバランサーとファイアウォールの背後にある 2 つの Web サーバーがあります。MongoDB を使用するこのセットアップにサイトを移行しています。現在、サイトは Web サーバーに MongoDB がインストールされた単一のサーバー上にあります。新しいセットアップで Mongo をセットアップするための最善の方法がわかりません。両方の Web サーバーで mongod インスタンスをセットアップしましたが、現在、独自の (独立した) データ ディレクトリがあり、両方が必要です。常に同じであること。

共有 SAN デバイス上の 1 つのデータ ディレクトリから動作するように両方のインスタンスをセットアップすることを検討しましたが、レプリケーション セットについて読んだところ、これが正しい方法だと思いました。

あるサーバーのインスタンスをプライマリとして設定し、他のサーバーのインスタンスをセカンダリとして設定するつもりでした。投票の理由からアービター インスタンスを設定するのが最善であることは理解していますが、これはどちらのサーバーでも実行できますか?

また、書き込みを受け入れるのはプライマリ インスタンスだけであることも理解しています。これはすべて MongoDB によって処理されます。つまり、どのサーバーに関係なくプライマリ インスタンスに (たとえば PHP を使用して) 接続する必要がありますか、または PHP が両方のローカル インスタンスに接続する必要がありますか?サーバーと MongoDB は、現在のプライマリ インスタンスへのすべての書き込みの送信を処理しますか?

他のオプションに関するアドバイスは大歓迎です。ありがとう

4

2 に答える 2

1

いくつかのコメント:

まず第一に、Web サーバーと同じマシンで MongoDB を実行するべきではありません。MongoDB は (他のデータベースと同様に) メモリを好み、MongoDB は必要なだけのメモリを積極的に要求します。これにより、Web サーバーが必要とするリソースが不足したり、Web サーバー プロセスが反撃して MongoDB が遅くなったりする可能性があります。Web サーバーと MongoDB インスタンスを別々のサーバーに配置したい場合。

次に、MongoDB ノードを「プライマリ」または「セカンダリ」として設定しません。それらをノードとして設定すると、MongoDB はどれがプライマリでどれがセカンダリかを分類します。アービターはどちらでもありません。

PHP から MongoDB レプリカ セットと通信するには、「シード リスト」を指定する必要があります。これは、1 つの IP アドレスだけであってはならず、常に複数の (データ) ノードを含んでいる必要があります。そのうちの 1 つがダウンした場合に備えて、複数のアドレスを提供する必要があります。ダウンしているノードに接続している場合、PHP はセカンダリを見つけることができません。次のように、レプリカセットに接続していることも指定する必要があります。

$m = new MongoClient( 'mongodb://192.168.12.4,192.168.12.5', array( 'replicaSet' => 'myReplSet' );

アービターをデータ ノードと同じノードに配置することもできますが、Web サーバー ノードに配置する方がよいでしょう。リソースをほとんど消費しないため、アービターが 1 つであっても問題ありません。

于 2013-07-24T16:10:24.890 に答える