8

次の設定を検討してください。

通常のmongodbレプリケーションセットとしてセットアップされた2つの物理サーバーがあります(アービタープロセスを含むため、自動フェイルオーバーは正しく機能します)。

今、私が理解している限り、ほとんどの実際の作業はプライマリサーバーで実行されますが、スレーブはほとんどの場合、データセットの同期を維持するための作業を実行します。

同じ2台のサーバーに別のレプリケーションセットをセットアップする方法でこのセットアップにシャーディングを導入し、各サーバーで1つのmongodプロセスをプライマリとして実行し、1つのプロセスをセカンダリとして実行することは合理的でしょうか。

期待される結果は、両方が稼働している間、両方のサーバーが実際のクエリ/挿入のワークロードを共有することです。一方のサーバーに障害が発生した場合、もう一方のサーバーが復元されるまで、セットアップ全体がエレガントにフェイルオーバーして実行を継続する必要があります。

セットアップの全体的なオーバーヘッドとプロセスの数(mongos / configservers / artibers)を除いて、このセットアップに欠点はありますか?

4

4 に答える 4

10

それは間違いなく機能します。少し前に、#mongodb IRCチャネルで、1台のマシンで複数のmongodプロセスを実行するのは悪い考えかどうかについて質問しました。答えは「RAM/CPU /帯域幅があれば、気を抜く」でした。

高性能の読み取りを探していて、書き込みが少し遅くてもかまわない場合は、次のことができることに注意してください。

  • 書き込みを「セーフモード」で実行します。この場合、書き込みはN台のサーバーに伝播されるまで返されません(この場合、Nはレプリカセット内のサーバーの数であるため、すべてのサーバー)
  • スレーブからの読み取りを許可するには、接続コードにドライバーに適したフラグを設定します。

これにより、MySQLと同様のクラスター化されたセットアップが得られます。マスターに1回書き込むだけで、どのスレーブも読み取りに適格です。書き込みよりも読み取りが多い状況(たとえば、桁違い)では、パフォーマンスは向上する可能性がありますが、ノードがダウンしたときの動作はわかりません(書き込みが書き込みを試みて停止する可能性があるため) 3ノードまでですが、2つだけが稼働しているなど、テストが必要です)。

于 2010-09-07T19:40:14.443 に答える
1

注意すべき点の1つは、両方のマシンが稼働している間、クエリはそれらの間で分割されているということです。1つがダウンすると、すべてのクエリは残りのマシンに送られるため、マシンに対する要求が2倍になります。マシンが突然のクエリの倍増に耐えられることを確認する必要があります。

于 2013-03-14T04:35:06.023 に答える
0

重要な詳細が1つ欠けています。物理ノードが2つしかないシャード設定の場合、1つが停止すると、すべてのデータが失われます。これは、シャーディングレイヤーの下に冗長性がないためです(推奨される方法は、各シャードがレプリカセットで構成されていることです)。

ただし、レプリカセットについてあなたが言ったことは真実です。2つのシェアードナッシングノードで実行し、追加のアービターを使用できます。ただし、推奨されるセットアップは3つのノードです。1つはプライマリ、2つはセカンダリです。

http://www.markus-gattol.name/ws/mongodb.html#do_i_need_an_arbiter

于 2010-09-09T21:28:52.117 に答える
0

そのような状況では、最初にシャーディングを再検討し、2台のマシン(+1アービター)のシャーディングされていないレプリカセットにします。

于 2011-04-02T05:18:32.203 に答える