2013-01-21 38 views
2

我在我的本地主機上設置了一個副本集,只是爲了練習使用必要的命令。我在家裏和在工作中都會這樣做。在家中,rs.initiate()命令需要大約三秒鐘的時間才能運行,並且rs.status()需要大約兩三分鐘才能給出所有狀態,即PRIMARYSECONDARY。這與我的預期有關。MongoDB replSet需要永久啓動

但是,當我在工作中做到這一點,需要rs.initiate()近7分鐘就好給我回我的提示在蒙戈外殼,那麼美國前10分鐘都是PRIMARYSECONDARY。與此同時,我發起連接的是SECONDARYPRIMARY,另外兩個是RECOVERING。他們只是坐在那裏,RECOVERING,十分鐘。

雖然rs.initiate()命令正在運行,mongod到我已經連接(端口10001)不斷吐出約「分配數據文件」的東西,然後「完成數據文件分配」,然後選擇「分配新的數據文件」,等等直到它有大約十幾個這樣的文件。其他兩個只是坐在那裏「replSet無法從自身或任何種子(EMPTYCONFIG)」整個時間獲得local.system.replset配置。

雖然我在檢查rs.status(),但這兩位副線仍在繼續接受和斷開連接,並分配數據文件,就像第一步中的主要操作一樣。

那麼它應該需要這麼長嗎?而且,如果是這樣,爲什麼我的機器在家裏會在幾秒鐘內完成?唯一的區別是我在家裏運行的是32位而不是64位。

+1

你的工作機器有很多數據嗎?而你的家用機器沒有那麼多(或沒有)?您擁有的數據越多,副本集的創建時間就會越長。 (因爲它需要複製整個數據)。 –

+0

他們是不同的操作系統/不同的文件系統類型/不同的機器大小/ vm?聽起來就像你在家裏得到了正常的表現,並且在工作中出現了一些奇怪的現象 – Gregor

+0

實際上,你應該能夠在日誌文件中檢查需要這麼長時間的事情。 – Gregor

回答

3

工作環境的磁盤上有多少可用磁盤空間?默認情況下,MongoDB爲其oplog(「本地」數據庫)分配5%的可用磁盤空間。根據您提供的信息,我的猜測是您的工作機器上的可用磁盤空間比您的家用機器大得多。

如果您在嘗試啓動其他節點之前等到rs.initiate()完成(即您看到PRIMARY),我想您會看到您期望的結果。

+0

我有完全相同的問題。但似乎@angela是對的。在生產上,硬盤比在我的工作機器上大得多。它只是一點點,但最終它的工作。 –

0

如果您遇到此問題,請嘗試重新啓動mongodb。我用新鮮的數據庫面對這個問題。我通過重新啓動mongodb來解決它。