3

明らかに、私は一般的にレプリカセットを使用する理由を知っています。

しかし、PRIMARY mongoインスタンスに直接接続することと、レプリカセットに接続することの違いについて混乱しています。具体的には、Mongooseを使用してnode.jsアプリからMongoに接続している場合、connect()の代わりにconnectSet()を使用するやむを得ない理由がありますか?フェイルオーバーの利点はconnect()でも存在すると思いますが、おそらくこれが間違っているところです...

私が尋ねる理由は、マングースでは、connectSet()メソッドはあまり文書化されておらず、よく使われているように見えるからです。それでも、常に3x以上のレプリカセットでMongoを実行することが推奨されているため、セットに接続したくないシナリオを想像することはできません...

4

1 に答える 1

2

プライマリのみに接続すると、フェイルオーバーが発生します(つまり、プライマリに障害が発生した場合、新しいマスターが選出されるまで一時停止します)。レプリカセット内での複製により、バックアップも容易になります。欠点は、すべての書き込みと読み取りが単一のプライマリに送られることです(MongoDBレプリカセットには一度に1つのプライマリしかありません)。そのため、ボトルネックになる可能性があります。

一方、スレーブへの接続を許可すると、読み取り用にスケーリングできます(書き込み用ではなく、プライマリに接続する必要があります)。スループットは、プライマリノードを実行しているマシンの仕様によって制限されなくなりましたが、スレーブ全体に分散させることができます。ただし、読み取りが古くなるという新しい問題が発生しました。つまり、スレーブから古いデータを読み取る可能性があります。

次に、アプリケーションの動作についてよく考えてください。読み取りが多いですか?どのくらいスケーリングする必要がありますか?状況によっては、古いデータに対処できますか?

ちなみに、レプリカセットの最低3つのメンバーのポイントは、接続する複数のノードを提供するのではなく、復元力と安全なレプリケーションを提供することです。3つのノードがあり、1つを失った場合でも、新しいプライマリを選択してバックアップノードに複製するのに十分なノードがあります。

于 2012-10-08T22:18:21.433 に答える