如何创建大型mongodb数据库的slave

时间:2013-02-27 03:49:25

标签: mongodb

众所周知,mongodb限制了oplog。

如果我只是创建一个新的slave,那么数据库中的所有内容都不会同步。数据库中的所有内容都比任何oplog都要大。

那么我该如何解决这个问题呢?这是否意味着我们无法创建一个比oplog更大的新奴隶?除了oplog之外,mongodb还有其他同步数据库的机制吗?

如果真的如此完成呢?

那么问题是什么?

1 个答案:

答案 0 :(得分:2)

如果您的数据库大小合适,并且您有快照,则可以复制文件(在启动时或配置文件中由--dbpath标志指定)以允许新副本集成员更快地联机。但是,初始同步可能仍会发生。

从概念上讲,发生以下事情

  1. 启动新成员作为副本集的一部分
  2. 将其添加到rs.conf()
  3. 新的replicaset从最近的(可以是主要的或次要的)同步,并将开始从中提取数据(初始同步)并在oplog中标记一个点以供它自己参考。
  4. 然后,新辅助将从其自己的时间戳应用oplog,该时间戳是从其他副本集成员复制的。
  5. 如果同步失败,将发生另一个初始同步(从一开始)。对于非常大的数据集,同步可能需要一些时间。

    回复你的问题

    这是否意味着我们无法创建比oplog更大的新奴隶?

    您可以创建并添加一个比oplog

    更大的新成员

    除了oplog之外,mongodb还有其他同步数据库的机制吗? 是的,上面提到的初始同步和文件复制。