我是mongodb的新手,我有一个问题:
我设置mongoDB测试环境,包含一个mongos,3个conf服务器,2个分片(3个服务器作为分片的复制集) 让我们说,由于原因,我有一个很大的复制滞后(如次要备份,或网络问题。或其他事情发生。万一发生) 在此期间,主服务器已关闭, 会发生什么 ?自动故障转移选择一个辅助数据库作为新主数据库,这些数据如何复制呢?
我们会丢失数据吗? 如果是这样,我们如何才能恢复数据以及需要做些什么,以避免此类问题。
非常感谢。
答案 0 :(得分:2)
在此期间,主服务器已关闭,会发生什么?
不允许写入
自动故障转移选择一个辅助数据库作为新主数据库,这些数据如何被复制呢?
如果数据没有从主数据库复制到辅助数据库然后变为主数据库,那么当主数据库作为辅助数据库返回集合时,将发生回滚:http://docs.mongodb.org/manual/core/replica-set-rollbacks/
当然,是否丢失数据取决于写入是否转到日志和/或数据文件以及成员是刚离开集合还是崩溃。如果成员在写入之前崩溃了,那么写入可能会丢失,是的。
我们如何才能恢复数据以及需要做些什么,以避免此类问题。
你可以在大多数情况下使用w=majority
,但是在边缘情况下仍然会有一些无法处理的陷阱,例如,如果主要事件在写入可以传播给其他成员之前进行故障转移。