標籤:
一.mongodb replication 介紹
官網上的第一句話就是Replication is the process of synchronizing data across multiple servers.翻譯過來就是replication(複製)是跨多個伺服器同步的過程,基本原理就是一個主伺服器和很多從伺服器通過同步處理記錄的方式來達到資料一致的目的,並且有且只有一個主伺服器,在mongodb中也叫主節點(primary node)負責寫操作,而從伺服器,也叫次要節點(secondary nodes)只需複製主伺服器的一個叫oplog 的日誌來與主伺服器的資料同步,如果主伺服器不幸掛掉,那麼mongo的引擎會自動觸發一次選舉,選出新的主伺服器(或者半數以上投票),如果沒法完成選舉,票數相同等情況,整個叢集將會變成唯讀狀態無法寫入。mongo也有一個角色叫做仲裁者(Arbiter),它不儲存和同步資料,只是作為一個維持權威或者心跳資料的存在避免節點過少無法完成選舉,其也協助主從伺服器判斷狀態,其可以用一些效能較差的機器或者虛擬機器扮演。
作為一個前端以上是我能做出的最好的解釋了。下面直接開擼,簡單幾步幾行代碼帶大家搭建一個mongo replica
二.mongodb replica set
1.系統介紹
a.mac osx 10.10
b.mongodb 3.2.0
2.節點建點
首先需要去你選擇的mongodb資料檔案存放的檔案夾建立三個資料庫,用來類比三台不通的機器,博主的路徑如下
cd /data/dbmkdir nodeOne nodeTwo nodeThree
3.啟動三個資料庫(dbpath),並且連接埠(--port 1000x),叢集名稱(--replSet gabriel),關閉日誌選項(--nojournal),守護進程方式啟動,會自動拉起(--fork),日誌目錄(--logpath)。
mongod --dbpath /data/db/node1 --port 10001 --replSet gabriel --nojournal --fork --logpath /data/db/node1.logmongod --dbpath /data/db/node2 --port 10002 --replSet gabriel --nojournal --fork --logpath /data/db/node2.logmongod --dbpath /data/db/node3 --port 10003 --replSet gabriel --nojournal --fork --logpath /data/db/node3.log
4.順便串連一個伺服器,做初始化操作,這裡博主連入10001連接埠
//終端下進入mongo localhost:10001//進入後輸入初始化方法rs.initiate({_id:"gabriel",members:[{_id:1,host:"localhost:10001"},{_id:2,host:"localhost:10002"},{_id:3,host:"localhost:10003"},]})
收到如下資訊就成功了。
{"info" : "Config now saved locally. Should come online in about a minute.","ok" : 1}
此時會發現終端上的輸出已經有了變化。
//從單個一個>//變成了gabriel:OTHER>
5.查詢狀態
rs.status()
在返回中,參數set後面為叢集名稱,每個members下面可以看到他們各自的情況,其中stateStr是角色,主節點為(PRIMARY)。
6.進入主節點插入資料,進入從節點查看資料
//博主主節點在10001介面mongo localhost:10001//切換資料庫,插入一條資料,依次輸入 use gabdbdb.user.insert({dataid:10001})db.user.find()
切換到從節點,你會發現使用show dbs 會報錯,是因為還沒有開啟許可權,輸入rs.slaveOk();就可以順利訪問了。
//切換從節點mongo localhost:10002//無許可權查詢show dbs//報錯2016-01-06T14:48:53.155+0800 E QUERY [thread1] Error: listDatabases failed:{ "ok" : 0, "errmsg" : "not master and slaveOk=false", "code" : 13435 } ://開啟gabriel:SECONDARY> rs.slaveOk()gabriel:SECONDARY> show dbs
以上就是簡單的建立過程,現在已經可以在從伺服器看到主伺服器插入的資料了。
三.在nodejs中使用mongoose串連replica 資料庫
1.版本介紹
a.nodejs 0.10.25
b.mongoose 3.8.8
2.配置如下
var mongoose = require(‘mongoose‘),//mongoose配置var opts = { db: { native_parser: true }, server: { poolSize: 5 , auto_reconnect: true, socketOptions: {keepAlive: 1} }, replset: { rs_name: ‘gabriel‘ }}//mongoose串連app.db = mongoose.connect(config.mongodb.repUri, opts);app.db.on(‘error‘, console.error.bind(console, ‘mongoose connection error: ‘));app.db.once(‘open‘, function () { //and... we have a data store});//config.mongodb.repUri 如下exports.mongodb = { repUri:"mongodb://localhost:10001,localhost:10002,localhost:10003/gabdb"};
所以過程如上所述,有問題可以留言告知,覺得好的點一下推薦~
mongodb replica set 和 nodejs中使用mongoose串連replica