2016-11-21 59 views
0

我正在研究MongoDBUniversityM101P:MongoDB for Developers當然。「此節點沒有啓動replSet選項」

我正在使用WiredTiger on MongoDB 3.2

我目前的主題是副本集

的課程要求我用下面的代碼創建一個副本集:

mongod --replSet rs1 --logpath "1.log" --dbpath /data/rs1 --port 27017 --fork 

但我使用的是Windows,它不支持fork,因此使用this要點(所推薦的課程管理員)我在3個不同的控制檯這些線路同時運行我已經創建的目錄(與mongod的運行)後:

mongod --replSet rs1 --logpath "1.log" --dbpath rs1 --port 27018 --smallfiles --oplogSize64 
mongod --replSet rs1 --logpath "2.log" --dbpath rs2 --port 27019 --smallfiles --oplogSize64 
mongod --replSet rs1 --logpath "3.log" --dbpath rs3 --port 27020 --smallfiles --oplogSize64 

這一切似乎做工精細;我可以看到目錄已經填滿,日誌文件都顯示「正在等待連接」並顯示相關的端口號。

最後,我運行下面的代碼統一服務器作爲副本集:

config = {_id: "rs1", members: [ 
      { _id: 0, host: "localhost:27018"}, 
      { _id: 1, host: "localhost:27019"}, 
      { _id: 2, host: "localhost:27020"} 
           ] 
     } 

rs.initiate(config) 
rs.status() 

這是拋出:

"errmsg" : "This node was not started with the replSet option", 
"code" : 76 

,我可以不在身邊讓我的頭,如我已經明確使用每個服務器的--replSet選項,並且確實提供了與配置文件中使用的相同的replSet名稱。

我已經看過關於這個主題的其他問題,但是很少有,並且我沒有找到可以解決這個問題的地址。 This一個陳述了從錯誤看起來很明顯:我的配置文件應包括--replSet=rs1,但是從閱讀documentation我給大家的印象,我已經定義了配置的_id服務這一目的:

_id
Type: string

The name of the replica set. Once set, you cannot change the name of a replica set.

_id must be identical to the replication.replSetName or the value of –replSet specified to mongod on the command line.

此外,這清楚地顯示在課程材料視頻演示中正確運行,正如我試圖使用它的方式。

我在我的智慧結束,並非常感謝幫助。
傑克

回答

3

所以當我寫完這個問題,答案只是來找我就像一個燈泡,這似乎經常發生......但這次我想我會離開這裏回答爲別人誰一直在努力考慮到論壇上有關此主題的問題/答案有些缺乏。

這是運行我的配置文件時使用的默認端口的簡單情況。
我正在使用mongo < init_replica.js來運行我的配置並統一服務器來創建副本集。

通過簡單地增加通過有效的服務器之一使用的端口,它正確地跑:

mongo --port 27020 < init_replica.js 

禍是我要的那一個,但我希望這可以幫助那些還在研究誰發現自己的某個地方卡住課程類似。

傑克