1

自動シャーディングされたmongodbにデータを継続的に挿入していました。(更新せず、挿入のみ)

実験的なセットアップ2つのシャード、各シャードには2つのノードがあります。

shard1-> node1(primary)、node2-shard2-> node3(primary)、node4

1つのシャードでセカンダリノード(node2)をダウンさせました->それでもデータは正しく挿入されましたプライマリ(node1)もダウンさせました->完全なシャードがダウンしました

驚いたことに、mongoのセットアップ全体が書き込みを行っていませんでした。

物語には別のひねりがあります。これでnode2を起動しました。これは使用可能な唯一のノードであるため、プライマリになり、データの受け入れを開始しました。

約10分後、node1も起動しました。

しかし、node1に挿入したデータをチェックしたとき(node2がダウンしているとき)は失われました:(。

    s1             s2
   (n1,n2)       (n3,n4)  
   ---------     ---------
1. (up,up)       (up, up)  -> data was getting inserted
2. (up,down)     (up, up)  -> data was getting inserted properly (but got lost :(  )
3. (down, down)  (up, up)  -> no data inserts were happening
4. (down, up)    (up, up)  -> started taking data again
5. (up, up)      (up, up)  -> n1 picked data from n2, but couldn't give the data to n2

最後のステップで、n1を起動すると、n2から新しいレコードが取得されましたが、上記のステップ2で取得したn1は完全に失われました:(。

これはmongoの予想される動作ですか?

誰かが私を助けてください、私は必要に応じてより多くの実験を実行することができます:)。

よろしくお願いします、Vivekananda Tadala

4

1 に答える 1

3

2つのメンバーのレプリカセットの1つのメンバーを停止すると、もう1つのメンバーは書き込みの受け入れを停止します。3人のメンバーが必要な理由についてのこの説明を参照し、遊んでいるときは常にセーフモードを使用してください。

MongoDBでのレプリケーションは一方向です。つまり、スレーブはより最新のスレーブまたはマスターからデータをコピーします。(まだ)2つのノードが互いにデータをコピーすることはできません。その間、書き込みレプリケーションを確実にすることに興味があるかもしれません。

ダウンしたシャードのチャンクに挿入することはできませんが、他のシャードにあるシャードのチャンクに挿入することはできます。db.printShardingStatus()どのチャンクがどこにあるかを確認するために使用できます。

于 2011-01-17T16:01:31.073 に答える