Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
nosql mongodb复制集自动存储,运行实验时数据丢失_Mongodb_Sharding_Nosql - Fatal编程技术网

nosql mongodb复制集自动存储,运行实验时数据丢失

nosql mongodb复制集自动存储,运行实验时数据丢失,mongodb,sharding,nosql,Mongodb,Sharding,Nosql,我一直在将数据插入自动硬拷贝的mongodb。 (不更新,仅插入) 实验装置 2个碎片,每个碎片有2个节点 在shard1->node1(主节点)中,node2 在shard2->node3(主节点)中,node4 在一个碎片中,我将辅助节点(node2)放下->数据仍然正确插入 现在我把主(node1)也放下了->完整的碎片现在放下了 令人惊讶的是,整个mongo设置没有进行任何写入 故事中还有另一个转折点。 现在我打开了node2,因为这是唯一可用的节点,它成为主节点并开始接受数据 大约10

我一直在将数据插入自动硬拷贝的mongodb。 (不更新,仅插入)

实验装置 2个碎片,每个碎片有2个节点

在shard1->node1(主节点)中,node2 在shard2->node3(主节点)中,node4

在一个碎片中,我将辅助节点(node2)放下->数据仍然正确插入 现在我把主(node1)也放下了->完整的碎片现在放下了

令人惊讶的是,整个mongo设置没有进行任何写入

故事中还有另一个转折点。 现在我打开了node2,因为这是唯一可用的节点,它成为主节点并开始接受数据

大约10分钟后,我也提到了node1

但是当我检查插入node1的数据时(node2关闭时),数据丢失了:(

在最后一步中,当我提起n1时,它从n2中获得了新记录,但是在上面的第2步中n1获得的记录完全丢失了:(

这是mongo的预期行为吗

有人请帮助我,我可以运行更多的实验,如果需要:)

提前感谢,,
Vivekananda Tadala

如果您在两个成员的副本集中关闭了一个成员,另一个将停止接受写入。请了解为什么您需要三个成员,并且在玩游戏时始终使用安全模式

MongoDB中的复制是单向的:从节点从更新的从节点或主节点复制数据。您还不能让两个节点相互复制数据。同时,您可能会对此感兴趣


插入已关闭的碎片上的块不起作用,但您可以插入另一个碎片上的碎片上的块。您可以使用
db.printShardingStatus()
查看哪些块在哪里。

感谢您的回答,这消除了我的许多疑问,但是有没有办法获取已死亡主机上的数据并将其推送到新主机上?我们可以用oplog做些什么吗?是的……至少在理论上是这样。每当发生回滚时,数据都应该写入数据目录中的.bson文件。您可以使用mongorestore将其应用于当前主机。但是,我们(MongoDB开发人员)我们今天谈论的是我们如何不确定它是否真的写入了回滚文件,因此可能存在错误。但是如果有,它将被1.8.0修复。假警报,它没有损坏。数据将存储在回滚/目录中,请参阅。非常感谢您的回复,我刚刚阅读了您的博客,将尝试您的建议。
    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