MongoDB搭建副本集(二)


         在上一篇博客中介紹了MongoDB複製和副本集的概念,這次將我查閱資料在單機下搭建的副本集展現給大家。

下面是在單機上搭建一個三個節點的副本集。一個主節點(primary,兩個從節點(secondary,其中一個是仲裁者(arbiter)

環境:Ubuntu14.04MongoDB3.2


建立三個節點目錄。

sudo mkdir /data
sudo mkdir /data/node1
sudo mkdir /data/node2
sudo mkdir /data/arbiter


運行三個節點,其中,replica是副本集的名稱;端口號分別爲10001,10002,10003,而10001爲主節點的端口。

sudo /usr/local/mongodb/bin/mongod --replSet replica --dbpath /data/node1/ --port 10001 --oplogSize 1024 
sudo /usr/local/mongodb/bin/mongod --replSet replica --dbpath /data/node2/ --port 10002 --oplogSize 1024 
sudo /usr/local/mongodb/bin/mongod --replSet replica --dbpath /data/arbiter/ --port 10003 --oplogSize 1024 


另外打開一個shell,進入主節點。

sudo /usr/local/mongodb/bin/mongo localhost:10001

初始化副本集需要配置表並逐步添加節點的數據信息,_id和副本集啓動的共享名稱一致

config = {_id: "replica", members: []}
config.members.push({_id: 0, host: "localhost:10001"})
config.members.push({_id: 1, host: "localhost:10002"})
config.members.push({_id: 2, host: "localhost:10003", arbiterOnly: true})



初始化副本集


rs.initiate(config)

執行命令確認配置,可以看到10001的端口實例ismastertruesecondaryfalse,爲主節點。hosts有兩個實例,arbiters有一個實例。

rs.isMaster()

輸入命令查看副本集的狀態信息。

rs.status()



查看當前副本集的配置表

rs.conf()

插入測試數據:

for(i=1;i<=10;i++) {db.users.insert({"username":"user"+i})}

進入從節點10002,查看集合信息,顯示查詢失敗,這是爲了避免從節點讀取到過期的數據。

sudo /usr/local/mongodb/bin/mongo localhost:10002 
show collections

設置標識並查詢集合信息。

rs.slaveOk()
show collections


查詢測試數據

<span style="font-size:12px;">db.users.find()</span>

在從節點插入數據,寫入錯誤,不是主節點。

db.users.insert({username: "user11"}) 


進入端口10003,可以看到爲仲裁節點。

sudo/usr/local/mongodb/bin/mongo localhost:10003

replica:ARBITER>

關掉10001端口的mongod實例,shell顯示10001處於down狀態,進入之前的從節點10002,發現它變成了主節點,提示符爲

replica:PRIMARY>”,再將10001上線,它有恢復成主節點。這就是MongoDB副本集的故障轉移。


         到這裏,MongoDB單機搭建副本集就結束了,關於在多臺機器上部署的例子會在以後的文章中給大家帶來。



發佈了39 篇原創文章 · 獲贊 207 · 訪問量 37萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章