2013-02-27 34 views
-1

我們知道,mongodb的oplog有限。如何創建大型mongodb數據庫的奴隸

如果我只需要創建一個新的奴隸,一切都在數據庫中尚未同步。數據庫中的所有內容都比任何oplog都大。

那麼我該如何解決這個問題?這是否意味着我們不能創建比oplog更大的新的奴隸?除了該oplog之外,mongodb是否還有其他用於同步數據庫的機制?

究竟是如何完成的呢?

那麼問題是什麼?

回答

2

如果你的數據庫是合理的規模,和你有一個快照,你可以在文件(通過在啓動時或在配置文件中的--dbpath標誌指定)複製到允許新的副本集成員聯機更快。但是,初始同步可能仍然會發生。

從概念上講,下面的事情發生

  1. 啓動的副本集的一部分
  2. 將其添加到新的replicaset是同步關閉最接近rs.conf()
  3. 新成員(可以是主要或次要的),並且將開始從其中拉取數據(初始同步)並在oplog中標記一個點作爲自己的參考。
  4. 然後,新輔助節點將從其自己的時間戳中應用oplog,它已從其他副本集成員複製。

如果同步失敗,則會發生另一個初始同步(從最開始)。對於非常大的數據集,同步可能需要一些時間。

在回答你的問題

這是否意味着我們不能創建一個新的奴隸,它比OPLOG更大?

您可以創建並添加一個新成員是比大OPLOG

MongoDB中是否有其他的機制synching數據庫除此之外OPLOG? 是的,上面提到的初始同步和文件複製。

+0

我明白了。所以有這個初始同步。但在初始同步時,主設備始終在變化。新數據庫如何抓取主服務器的快照以進行初始同步? – 2013-02-27 11:03:13

+0

我不完全遵循你的問題。 如果您從**複製**的節點出現打嗝(網絡鬆動,節點重新啓動等),則同步將不得不從新節點重新開始。這使我們在副本集中的所有節點之間最終保持一致。 – Nick 2013-02-27 11:21:04

+0

Rescync不能通過簡單的複製權來完成,因爲在複製過程中主數據庫發生了變化。那麼他們如何重新同步?這已經超出了問題。我應該創建另一個問題嗎?他們是否鎖定文件並創建副本,然後重新同步,然後按照oplog? – 2013-02-27 11:28:31