4

“MongoDB in Action”一书说:

想象一下,您向副本集的主节点发出写入。接下来发生什么?首先,写入被记录,然后添加到主节点的 oplog 中。同时,所有辅助节点都有自己的 oplog 来复制主节点的 oplog。因此,当给定的辅助节点准备好自我更新时,它会做三件事。首先,它查看自己 oplog 中最新条目的时间戳。接下来,它会在主节点的 oplog 中查询所有大于该时间戳的条目。最后,它将这些条目中的每一个添加到它自己的 oplog 中,并将这些条目应用于它自己

所以这意味着节点必须是时间同步的?因为时间戳在所有节点上必须相等。

4

2 回答 2

4

一般来说,是的,让您的主机同步是一个非常好的主意(NTP 是通常的解决方案)。事实上,我见过比不同步 oplog 更糟糕的问题——集群中数据库主机上的不同时间应该被认为是必须的。

这实际上是在文档的生产说明页面上提到的:

http://www.mongodb.org/display/DOCS/Production+Notes#ProductionNotes-Linux

请参阅有关最小化时钟偏差的说明。

于 2012-04-09T10:14:27.977 回答
1

根据您提供的写入,节点将所有内容都基于最近收到的写入的时间戳,而不是它们自己的时钟。但是,当主节点被降级并且辅助节点成为主节点时,就会出现问题。如果时间偏差很大,可能会导致复制延迟或其他问题。

于 2013-05-21T10:28:33.660 回答