標籤:
很多公司都在用MongoDb ,一直沒有時間研究,最近好好的整了一下,做下筆記,直接上操作步驟,關於Mongodb的理論知識可以搜尋其他資料,也可以聯絡我索取
mongoDB官方已經不建議使用主從模式了,替代方案是採用複本集的模式,主從模式其實就是一個單副本的應用,沒有很好的擴充性和容錯性。而複本集具有多個副本保證了容錯性,就算一個副本掛掉了還有很多副本存在,並且解決了上面 第一個問題“主節點掛掉了,整個叢集內會自動切換”。難怪mongoDB官方推薦使用這種模式。我們來看看mongoDB複本集的架構圖:
由圖可以看到用戶端串連到整個複本集,不關心具體哪一台機器是否掛掉。主伺服器負責整個複本集的讀寫,複本集定期同步資料備份,一但主節點掛掉,副本節點就會選舉一個新的主伺服器,這一切對於應用伺服器不需要關心。我們看一下主伺服器掛掉後的架構:
複本集中的副本節點在主節點掛掉後通過心跳機制檢測到後,就會在叢集內發起主節點的選舉機制,自動選舉一位新的主伺服器。看起來很牛X的樣子,我們趕緊操作部署一下!
官方推薦的複本集機器數量為至少3個,那我們也按照這個數量配置測試。
1、準備兩台機器 192.168.176.129、192.168.176.130、192.168.176.131。 192.168.176.129 當作複本集主節點,192.168.176.130、192.168.176.131作為複本集副本節點。
2、分別在每台機器上建立mongodb複本集測試檔案夾及Data目錄
3、分別啟動三台機器的MongoDB服務:
#cd /opt/soft/mongodb/mongodb-linux-x86_64-3.2.1/bin#啟動時指定資料檔案路徑 和複本集名稱#./mongod --dbpath /opt/soft/mongodb/data/ --replSet repset
4、初始化複本集 登入三台機器中的任意一台,比如:129這台
#/opt/soft/mongodb/mongodb-linux-x86_64-3.2.1/bin/mongo
........日誌資訊省略
#>>config = { _id:"repset", members:[ {_id:0,host:"192.168.176.129:27017"}, {_id:1,host:"192.168.176.130:27017"}, {_id:2,host:"192.168.176.131:27017"}] }
列印資訊:
{ "_id" : "repset", "members" : [ { "_id" : 0, "host" : "192.168.176.129:27017" }, { "_id" : 1, "host" : "192.168.176.130:27017" }, { "_id" : 2, "host" : "192.168.176.131:27017" } ] }
#初始化複本集配置rs.initiate(config);
#如果成功了返回
{ "ok" : 1 }
#如果出現一下資訊,查看一下伺服器的防火牆
{
"ok" : 0,
"errmsg" : "replSetInitiate quorum check failed because not all proposed set members responded affirmatively: 192.168.176.129:27017 failed with No route to host, 192.168.176.131:27017 failed with No route to host",
"code" : 74
}
5、查看叢集狀態
到此整個複本集已經搭建完成。下面趕快測試一下吧
主節點負責寫操作,所以我們在130這台機器上執行寫操作
repset:PRIMARY> db.benxq.insert({"name":"zhangsan"})
在131機器上執行讀操作讀一下
repset:SECONDARY> db.benxq.find()
#mongodb預設是從主節點讀寫資料的,副本節點上不允許讀,需要設定副本節點可以讀。 Error: error: { "ok" : 0, "errmsg" : "not master and slaveOk=false", "code" : 13435 }
repset:SECONDARY> db.getMongo().setSlaveOk();
#可以看到資料已經複製到了複本集。
repset:SECONDARY> db.benxq.find();
6、容錯移轉測試
我們將130這台主節點停掉模仿伺服器故障,在129上執行rs.status()
我們可以看到已經將131這台伺服器選舉為了新的主節點,這是我們重新啟動130,就會自動的成為了副節點。
MongoDb的複本集搭建教程(個人操作筆記)