Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/36.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
为什么我的MongoDB复制品一直落后?_Mongodb_Replication - Fatal编程技术网

为什么我的MongoDB复制品一直落后?

为什么我的MongoDB复制品一直落后?,mongodb,replication,Mongodb,Replication,昨晚在将一个集合转换为封顶集合时,我的中学的optime开始落后于小学。它进展缓慢,每隔几分钟就有几秒钟,最终从primary的oplog窗口掉了出来。按照说明,我停止了辅助服务器上的mongod,删除了所有数据文件,并重新启动了它,尽管我忘记了锁定主服务器的写操作。Secondary完成了它的初始化阶段,这花费了大量的时间,最终恢复了业务,但当我登录时,复制现在甚至落后了 因为这是云,毕竟,我创建了我的主映像(应该复制所有数据),尽管当时我无法运行db.fsyncLock(),因为它需要一些写

昨晚在将一个集合转换为封顶集合时,我的中学的optime开始落后于小学。它进展缓慢,每隔几分钟就有几秒钟,最终从primary的oplog窗口掉了出来。按照说明,我停止了辅助服务器上的mongod,删除了所有数据文件,并重新启动了它,尽管我忘记了锁定主服务器的写操作。Secondary完成了它的初始化阶段,这花费了大量的时间,最终恢复了业务,但当我登录时,复制现在甚至落后了

因为这是云,毕竟,我创建了我的主映像(应该复制所有数据),尽管当时我无法运行db.fsyncLock(),因为它需要一些写入操作。新映像完成后,我基于该映像启动了一个新服务器,将其添加到我的副本集中,删除旧的辅助映像,这样生活就很好了,对吗?不完全是这样——新的中学落后了大约一个小时,一整天(以及今晚)终于落后了14个小时(尽管奇怪的是仍然在oplog窗口内)

我从“重新同步过时的成员页面”开始执行下一步。关闭两台服务器上的mongod,gzip并将我的数据文件夹从主服务器复制到辅助服务器,解压缩并启动它们,db.fsyncLock()我的主服务器。让我震惊的是,即使使用相同的数据,在初始化之后,我的中学说它落后了1个小时。我把它添加回副本集中,它很快就落后了5分钟

很好,对吗?不,快闪前进,二级正在缓慢前进,现在落后了20分钟。Mongostat的secondary被锁定在95%以上,iostat-xm2没有显示出任何疯狂的东西-由于没有进行写操作,secondary目前处于空闲状态,secondary肯定没有做多少事情(.04 wMB/秒)。不确定这是否值得一提,但primary目前感觉狗狗在登录mongo shell时反应迟钝,等等

Mongo,你怎么了?你为什么不能迎头赶上呢?我试图让我的第二个孩子赶上我,这有什么错

编辑 回答问题:

  • 版本:2.0.4
  • 硬件:两个节点都是相同的硬件,我可以说是-8GB内存,四核CPU。我想这是虚拟化的东西
  • 写入速率:不同。如前所述,昨晚我正在转换成一个封顶系列,这引发了整个事件。一夜之间,有一个进程每小时编写大约几百个小文档(每个约155字节)几次,所以我估计最大值约为100-200KB/小时。白天,处理过程更加紧张,更新了数十万个500字节的文档,并编写了数十万个文档。仍然没有谈论大量的数据EDIT找到今天早些时候的一些iostat输出:
设备:rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq sz avgqu sz WAIT r_wait w_wait svctm%util xvda 1.00 2564.50 243.50 282.50 8986.00 11388.00 77.47 11.32 21.46 2.36 37.93 0.50 26.50 这一次在11个wMB/s时特别火爆,7个wMB/s时UTI%达到34%,52个rMB/s时达到72%。所以不是饱和,但肯定是早上阅读的繁重工作量。有趣的是,尽管有obj。大小~5GB,索引~1GB(见下文),磁盘活动太多。这些不都应该在RAM中吗

  • 工作集:我还没有找到公认的计算工作集的方法,但如果有帮助的话:
“收藏”:21, “对象”:15540092, “avgObjSize”:325.26198326238995, “数据大小”:5054601144, “存储大小”:5874327552, “numExtents”:132, “指数”:43, “指数化”:864366720, “文件大小”:10666115072, “nsSizeMB”:16, “好”:1 我无法想象这是压倒性的8GB内存,尽管我可能错了

  • 一些来自次级市场的近期mongostat样本:
insert query update delete getmore命令刷新映射的vsize res错误已锁定%idx未命中%qr | qw ar | aw网络输出连接设置回复时间 *0*0*0*0 0 1 | 0 22.2g 44.9g 912m 0 99.2 0 | 0 0 | 0 0 | 1 2k 303b 151 mySet SEC 03:47:54 *0*0*0*0 01 | 0 22.2g 44.9g 1.85g 0 101 0 | 0 0 | 1 3k 303b 151 mySet SEC 03:48:04 编辑

尝试了更多的东西。我关闭了主服务器(现在称为A,次服务器将为B),删除了它的数据,并解压缩了它的快照(现在已经有几个小时了,但现在我们没有写任何新的东西)。用--fastsync启动了A,它仍然比B的optime(现在是主要的)慢了45秒,optime大约在UTC 02:19:52挂起。最后大约一个小时后,A赶上了,所以我在B上调用rs.steppdown()。立即,rs.status()向我显示,两台服务器在UTC 04:08左右都有优化,但B(现在是次要服务器)再次落后17秒…然后是30秒…现在是7分钟

编辑

在采纳@matulef的建议并在我的封顶集合上重新创建索引,以及重新启动secondary的mongod进程几分钟后,它的optime只增加了几秒钟。mongostat的二级锁定率仍在95-104%之间徘徊,有趣的是,res大小在100到2GB之间摇摆不定,然后又回到1GB左右

编辑(第二天晚上)

故事的结论-@matulef走上了正确的道路,我应该更加小心地将复制的集合转换为有上限的集合。下面是发生的事情,虽然我没有宣传这是数据安全的-我自由地承认我可能在这个过程中丢失了一些数据,所以YMMV。 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util xvda 1.00 2564.50 243.50 282.50 8986.00 11388.00 77.47 11.32 21.46 2.36 37.93 0.50 26.50 "collections" : 21, "objects" : 15540092, "avgObjSize" : 325.26198326238995, "dataSize" : 5054601144, "storageSize" : 5874327552, "numExtents" : 132, "indexes" : 43, "indexSize" : 864366720, "fileSize" : 10666115072, "nsSizeMB" : 16, "ok" : 1 insert query update delete getmore command flushes mapped vsize res faults locked % idx miss % qr|qw ar|aw netIn netOut conn set repl time *0 *0 *0 *0 0 1|0 0 22.2g 44.9g 912m 0 99.2 0 0|0 0|1 2k 303b 151 mySet SEC 03:47:54 *0 *0 *0 *0 0 1|0 0 22.2g 44.9g 1.85g 0 101 0 0|0 0|1 3k 303b 151 mySet SEC 03:48:04