0

3台のマシンに2つのシャードがあります(mongodb 1.8.2を使用):

nodeI   including:   shard1(primary) and shard2(primary)
nodeII  including:   shard1(secondary) and shard2(secondary)
nodeIII including:   shard1(arbiter) and shard2 (arbiter) 

NodeIIの負荷は非常に高くなり(CPUとIO)、NodeIも高くなっていますが、nodeIIよりも少し優れています。

私のJavaクライアントでは、NodeIIのみをクエリするようにコードを指定しましたが、NodeIは書き込みにのみ使用されます。

NodeIIIの読み取り負荷を共有するために、nodeIIIをアービターからセカンダリに変換することを計画しています。

これは良い考えだと思いますか。これを行う場合、何を検討する必要がありますか、それとも負荷を下げるための他の提案がありますか?

4

2 に答える 2

0

アービターハードウェアがセカンダリと同様の仕様を持っている限り、セカンダリ読み取りを分散するため、提案しているアプローチは合理的と思われます。通常、アービターのハードウェア仕様は非常に低いか、共有ハードウェア上にありますが、これは構成には当てはまらないと思います。

レプリカセットに奇数のサーバーがある場合、アービターは不要になります。

ここで読み取り設定を確認することをお勧めします。特に、セカンダリを選択するためのタグセットを指定することに関心がある場合があります。

于 2012-09-05T18:26:24.130 に答える
0

セカンダリからの読み取りは、必ずしも期待どおりに負荷を「分散」するわけではありません。パフォーマンスの問題の根本にたどり着くことなく、さらに多くの課題に備えることができます。

特に、既存のサーバーにセカンダリを追加すると、次のようになります。

  • セカンダリを追加するサーバーのI/O負荷を増やします(これで、データの完全な追加コピーを複製して書き込みます)
  • セカンダリが同期しているサーバーから読み取るためのより多くの競合を提供します
  • 大量の読み取りアクティビティ中にセカンダリがプライマリより遅れる可能性があります(強い一貫性が期待される場合は、これが問題になる可能性があります)。

また、失敗した場合に何が起こるかを考慮する必要があります。サーバーが現在の負荷で苦労している場合、物理サーバーのいずれかに問題があり、すべてのトラフィックが1つのサーバーに到達すると、状況はおそらく劇的に崩壊します。

理想的には、mongostatまたは同様の監視ツールを実行して、サーバーのパフォーマンス特性と、負荷の原因となる可能性のあるもの(メモリの負荷、ロック率、I / O、ネットワークなど)をよりよく理解する必要があります。モンゴスタットの出力のサンプルをPasteBinなどに投稿できれば便利です。

また、 explain()を使用して一般的なクエリを確認し、インデックスの使用法を理解し、それらがすべてのシャードへのアクセスを必要とするか、特定のシャードに転送されているかを確認する必要があります。

3台のサーバーすべてが同じハードウェア仕様である場合、短期的な改善として、次のことを検討します。

  • アービターを削除し、セカンダリノードに置き換えます。これにより、サーバーの1つに障害が発生した場合に追加のデータ冗長性が提供され、すべての負荷が1つのサーバーに到達するのを防ぐことができます。

  • NodeIのプライマリをステップダウンして、NodeIとNodeIIがそれぞれプライマリとセカンダリを持つようにします(NodeIの2つのプライマリとNodeIIの2つのセカンダリではありません)。プライマリサーバーとセカンダリサーバーの書き込み特性が異なるため、負荷分散が向上する可能性があります。

  • シャードキーと一般的なクエリをチェックして、読み取りと書き込みのバランスが適切に取れていることを確認します。コレクションへのすべての書き込みが単一のシャードにヒットする「ホットスポット」や、結果を得るためにすべてのシャードにヒットするクエリなどの潜在的な問題。

  • セカンダリから読み取らない場合のパフォーマンスの変化をテストします。直感に反しているように見えるかもしれませんが、クエリの性質によっては、セカンダリからの読み取りが実際に他の問題を引き起こしている可能性があります。

最後に、1.8.2を使用することに言及しました。MongoDB 2.0および2.2には、パフォーマンスとロック/イールドの大幅な改善、およびその他のバグ修正があります。いくつかの問題に対処できる可能性があるため、開発環境でアップグレードをテストする価値があります。

于 2012-09-07T13:21:08.150 に答える