2013-05-15 164 views
0

我是mongo db的新手,希望設置一個副本集。我很困惑,但我怎麼能做到這一點。設置mongodb副本集

我想擁有3臺不同機器的主,輔和仲裁器,每臺機器都運行mongo。

我一直在試圖設置它,但我想它已經弄得一團糟!我如何刪除任何我已有的副本集/配置?

我已經安裝了蒙戈,在這樣的一個配置文件指出蒙戈的每個實例:

logpath=D:\mongodb\log\mongo.log 
logappend=true 
dbpath=D:\mongodb\data 
directoryperdb=true 
port = 27017 
replSet = rsMySet 

從這裏雖然,我不知道該怎麼做。我讀過一些文章,例子等,但都令人困惑。

有人可以提供如何完成它的一步一步的指示?

此外,我想從C#Web應用程序連接到此副本集。我的連接字符串應該指向什麼?主要的,次要的或它是如何工作的?另外,應該使用什麼用戶訪問mongo?我在訪問sql server時使用集成安全性,在這裏可能是一樣的嗎?

感謝, 尼爾

回答

2

這裏是我遵循創建副本在我的本地機器設置的基本步驟。

Step 1 : 

Start all mongods with replSet argument 

mongod --replSet SriReplSet --dbpath /Volumes/Data/Replica-DBS/1 --port 27001 --logpath /Volumes/Data/Replica-DBS/log/log.1 --logappend --fork 
mongod --replSet SriReplSet --dbpath /Volumes/Data/Replica-DBS/2 --port 27002 --logpath /Volumes/Data/Replica-DBS/log/log.2 --logappend --fork 
mongod --replSet SriReplSet --dbpath /Volumes/Data/Replica-DBS/3 --port 27003 --logpath /Volumes/Data/Replica-DBS/log/log.3 --logappend --fork 

「SriReplSet」是您的副本集的名稱。顯然,dbpath和port會根據你的配置而改變。

我打算把第一個(端口號27001)作爲主要的。所以登錄到第一個mongod並設置我的配置如下。 請注意,我使用本地主機作爲一切都在我的本地機器。

Step 2 : 
>x={ 
    _id :"SriReplSet", 
    members : [ 
     {_id : 0, host :"localhost:27001"}, 
     {_id : 1, host :"localhost:27002"}, 
     {_id : 2, host :"localhost:27003"}, 
    ] 
} 

> rs.initiate(x) 
{ 
    "info" : "Config now saved locally. Should come online in about a minute.", 
    "ok" : 1 
} 

上面的命令將啓動副本集,並會出現一個消息,說「現在配置本地保存。如果在一分鐘內聯機。」 ,你完成:)

Step 3 : 

SriReplSet:PRIMARY> rs.status() 
{ 
    "set" : "SriReplSet", 
    "date" : ISODate("2013-05-16T05:35:18Z"), 
    "myState" : 1, 
    "members" : [ 
     { 
      "_id" : 0, 
      "name" : "localhost:27001", 
      "health" : 1, 
      "state" : 1, 
      "stateStr" : "PRIMARY", 
      "uptime" : 370, 
      "optime" : Timestamp(1368682493000, 1), 
      "optimeDate" : ISODate("2013-05-16T05:34:53Z"), 
      "self" : true 
     }, 
     { 
      "_id" : 1, 
      "name" : "localhost:27002", 
      "health" : 1, 
      "state" : 2, 
      "stateStr" : "SECONDARY", 
      "uptime" : 20, 
      "optime" : Timestamp(1368682493000, 1), 
      "optimeDate" : ISODate("2013-05-16T05:34:53Z"), 
      "lastHeartbeat" : ISODate("2013-05-16T05:35:18Z"), 
      "pingMs" : 0 
     }, 
     { 
      "_id" : 2, 
      "name" : "localhost:27003", 
      "health" : 1, 
      "state" : 5, 
      "stateStr" : "STARTUP2", 
      "uptime" : 18, 
      "optime" : Timestamp(0, 0), 
      "optimeDate" : ISODate("1970-01-01T00:00:00Z"), 
      "lastHeartbeat" : ISODate("2013-05-16T05:35:17Z"), 
      "pingMs" : 736 
     } 
    ], 
    "ok" : 1 
} 

請注意,第一個是主要的。

我不是一個C#人,但是在Java中,我們可以通過將幾個ServerAddress列表傳遞給Mongo構造函數,使用Java驅動程序連接到一個副本集(大多情況與C#的情況相同)。這些驅動程序具有副本意識,如果進行主要更改,它們會相應地改變

默認情況下,所有讀寫操作都將在主服務器上進行。希望這有助於:)