Mongodb副本回滚
摘自:https://docs.mongodb.com/v4.2/core/replica-set-rollbacks/
回滚发生在副本节点失效,前一个主节点重新加入集群后。 正常情况回滚是必要的,是为了和副本集其他节点保持一致。
mongodb发生回滚,基本上是集群网络问题导致的。 从节点严重落后于主节点,当主节点stepDown后(前主节点),从节点变成主节点。 重新加入集群后前主节点数据比当前主节点更新,所以发生回滚。
回滚数据
自4.0 版本,默认发生回滚时,Mongodb会将回滚的数据写入到dbpath下的rollback目录,形式如 rollback/<db>.<collection>/removed.<timestatmp>.bson。不同版本可能略有差异
回滚的数据是bson格式,可以通过bsondump进行数据的读取/恢复。
避免回滚
默认情况写确认是{w:1},即写主节点成功即标识写入成功,对于数据一致性要求较高的,可以通过修改这个数值保障大部分节点都被写入{w:majority},这样也能降低rollback发生的概率
回滚数据大小
自4.0回滚数据大小不做限制,早前版本支持300M,如果想支持更多,需要手动对回滚文件进行处理。
回滚时间
4.0 24hour
4.2+ 4.0.13+ 一般检查点的第一个操作到最后一个检查点
4.0.0 - 4.0.12 一般检查点到最后一个检查点
<=3.6 通过数据大小进行限制,即300M