因爲電腦不足,故在一臺電腦上啓動三個mongo環境,用以搭建mongo集羣複製環境,一個爲主節點(28001),一個爲從節點(28002),另一個爲選舉節點(28003)。mongodb
在mongo新建三個目錄,data,log,confshell
data用來存放數據庫文件數據庫
log用來存放日誌文件app
conf用來存放各個節點的配置文件測試
二、編寫配置文件spa
28001.conf線程
port=28001 bind_ip=192.168.0.106,127.0.0.1 logpath=/opt/mongodb-3.0.7/log/28001.log dbpath=/opt/mongodb-3.0.7/data/28001/ logappend=true pidfilepath=/opt/mongodb-3.0.7/data/28001/28001.pid fork=true oplogSize=1024 replSet=MONGO
28002.conf和28003.conf 和上面相似,只是修改一下目錄和文件爲對應的目錄和文件便可日誌
對於mongo的各個配置文件的詳細信息,請參照文章《mongoDB 配置文件詳解》code
3、啓動各個節點ip
bin/mongod -f conf/28001.conf
bin/mongod -f conf/28001.conf
bin/mongod -f conf/28001.conf
出現如下信息,則表明啓動成功
經過ps –ef |grep mongo命令,能夠查看到啓動的各個線程
四、配置節點主從複製模式
bin/mongo 127.0.0.1:28001/admin 進入shell
配置各個節點
> config={ ... _id:"MONGO", ... members:[ ... {_id:0,host:"127.0.0.1:28001"}, ... {_id:1,host:"127.0.0.1:28002"}, ... {_id:2,host:"127.0.0.1:28003"}]}
配置 28003爲選舉節點
config.members[2] ={ "_id" : 2, "host" : "127.0.0.1:28003","arbiterOnly":true}
cofig完成之後進行初始化
此時能夠觀察到shell窗口的前面的符號已經發生變化,更改成了MONGO:OTHER
經過輸入rs.status()命令,能夠查看如今各個節點的狀態以及所處的位置
MONGO:OTHER> rs.status() { "set" : "MONGO", "date" : ISODate("2015-12-12T03:08:27.537Z"), "myState" : 1, "members" : [ { "_id" : 0, "name" : "127.0.0.1:28001", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 856, "optime" : Timestamp(1449889628, 1), "optimeDate" : ISODate("2015-12-12T03:07:08Z"), "electionTime" : Timestamp(1449889630, 1), "electionDate" : ISODate("2015-12-12T03:07:10Z"), "configVersion" : 1, "self" : true }, { "_id" : 1, "name" : "127.0.0.1:28002", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 78, "optime" : Timestamp(1449889628, 1), "optimeDate" : ISODate("2015-12-12T03:07:08Z"), "lastHeartbeat" : ISODate("2015-12-12T03:08:26.662Z"), "lastHeartbeatRecv" : ISODate("2015-12-12T03:08:26.639Z"), "pingMs" : 0, "lastHeartbeatMessage" : "could not find member to sync from", "configVersion" : 1 }, { "_id" : 2, "name" : "127.0.0.1:28003", "health" : 1, "state" : 7, "stateStr" : "ARBITER", "uptime" : 78, "lastHeartbeat" : ISODate("2015-12-12T03:08:26.662Z"), "lastHeartbeatRecv" : ISODate("2015-12-12T03:08:26.628Z"), "pingMs" : 0, "configVersion" : 1 } ], "ok" : 1 }
5、測試
從以上配置文件上能夠看出 主節點是127.0.0.1:28001節點,在主節點上插入數據
登陸上28002節點之後,運行show dbs出現一個錯誤
2015-12-12T11:17:15.304+0800 E QUERY Error: listDatabases failed:{ "note" : "from execCommand", "ok" : 0, "errmsg" : "not master" } at Error (<anonymous>) at Mongo.getDBs (src/mongo/shell/mongo.js:47:15) at shellHelper.show (src/mongo/shell/utils.js:630:33) at shellHelper (src/mongo/shell/utils.js:524:36) at (shellhelp2):1:1 at src/mongo/shell/mongo.js:47
報錯信息爲不是主節點,這是由於mongdb爲了保證數據的一致性,若是不是經過驅動鏈接上從節點,是不容許進入這個節點操做的,這時能夠利用命令 rs.slaveOK(true),來標示能夠進入,這樣再查詢,則能夠查詢獲得剛纔在從節點上插入的數據了。
可是對於選舉節點,是查詢不到這些庫和數據的,是由於選舉節點不用來存儲數據,只是爲了選舉。