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