2

脚光を浴びているnoSQLデータベースの多くは、マスター/スレーブパターンを使用して「可用性」を提供していますが、それが行うことは(少なくとも私の観点からは)、チェーンにいつでも壊れる弱いリンクを作成することです. - マスターがダウンし、スレーブが機能を停止します。

大量のデータを処理し、読み取り/書き込みを均等にするのに最適な方法ですが、可用性の観点から見れば? それほどでもない...

一部のnoSQLから、スレーブを簡単にマスターに変更できることは理解していますが、これを行うと、ほとんどのアプリケーションで処理するのが頭痛の種になります。右?

では、皆さんはこの種のことをどのように処理していますか? マスター/スレーブデータベースは実際にどのように機能しますか?

4

1 に答える 1

4

これはかなり一般的な質問です。具体的に話しているデータストアを指定できますか?

私は MongoDB を使用してきましたが、MongoDB はこれを非常に適切に処理します。「レプリカ セット」(基本的にはマスター/スレーブ クラスター) 内のすべてのメンバーは、マスターになる資格があります。レプリカ セットに接続すると、セットは接続しているクライアントにセット内のすべてのメンバーについて通知します。セット内のマスターがオフラインになると、スレーブは自動的に新しいマスターを選択し、クライアントは (セット内のすべてのノードのリストを持っているため) 接続するまで新しいノードを試します。接続先のノードはクライアントに新しいマスターについて通知し、クライアントは接続を切り替えます。これにより、アプリケーションを変更することなく、完全に透過的なマスター/スレーブ フェイルオーバーが可能になります。

これは明らかに単一の接続では問題ありませんが、再起動についてはどうでしょうか? MongoDB ドライバーもこれを処理します。接続を試行するノードのリストを受け入れることができ、接続先が見つかるまで順番に試行します。接続すると、マスターが誰であるかをノードに尋ね、そこに接続を転送します。

最終的な結果として、レプリカ セットが確立されていれば、単一のノードが爆発してオフラインになることを事実上心配する必要はありません。

于 2010-09-04T21:56:17.637 に答える