服務器狀況:linux
現有的單節點 Primary 192.168.126.9:27017mongodb
新增的節點 Secondry 192.168.126.8:27017數據庫
仲裁節點 ARBITER 192.168.126.8:27018ubuntu
mongo 版本 3.2.4服務器
1.中止單節點Primary的Mongo服務 架構
1 > use admin; 2 switched to db admin 3 > db.shutdownServer()
2.從新啓動Primary節點,使用--replSet的選項加上新複製集的名字 repl1app
/usr/local/mongodb/bin/mongod -dbpath /sdb1/mongodb/data --fork --port 27017 --logpath /sdb1/mongodb/log/mongo.log --replSet repl1 --logappend
3.鏈接Primary數據庫spa
4. 建立複製集配置信息對象日誌
1 config = { _id:"repl1", members:[ 2 {_id:0,host:"192.168.126.9:27017"} 3 ] 4 }
5.初始化複製集並查看複製集的運行狀態code
1 > rs.initiate(config) 2 { "ok" : 1 } 3 4 repl1:SECONDARY> rs.status() 5 { 6 "set" : "repl1", 7 "date" : ISODate("2016-06-23T16:05:10.228Z"), 8 "myState" : 1, 9 "term" : NumberLong(1), 10 "heartbeatIntervalMillis" : NumberLong(2000), 11 "members" : [ 12 { 13 "_id" : 0, 14 "name" : "192.168.126.9:27017", 15 "health" : 1, 16 "state" : 1, 17 "stateStr" : "PRIMARY", 18 "uptime" : 3524, 19 "optime" : { 20 "ts" : Timestamp(1466697870, 1), 21 "t" : NumberLong(1) 22 }, 23 "optimeDate" : ISODate("2016-06-23T16:04:30Z"), 24 "infoMessage" : "could not find member to sync from", 25 "electionTime" : Timestamp(1466697868, 2), 26 "electionDate" : ISODate("2016-06-23T16:04:28Z"), 27 "configVersion" : 1, 28 "self" : true 29 } 30 ], 31 "ok" : 1
6.啓動 Secondry Mongo節點服務
root@linux-mongo2:/home/ubuntu# /usr/local/mongodb/bin/mongod -dbpath=/sdb1/mongodb/data --fork --port 27017 --logpath=/sdb1/mongodb/log/mongo.log --logappend --replSet repl1
about to fork child process, waiting until server is ready for connections. forked process: 2848 child process started successfully, parent exiting
7.在Primary節點將 Secondry Mongo節點添加到複製集裏
repl1:PRIMARY> rs.add("192.168.126.8:27017")
{ "ok" : 1 }
8.啓動 ARBITER Mongo仲裁節點
root@linux-mongo2:/home/ubuntu# mkdir -p /sdb1/mongodb/arb root@linux-mongo2:/home/ubuntu# /usr/local/mongodb/bin/mongod -dbpath=/sdb1/mongodb/arb --fork --port 27018 --logpath=/sdb1/mongodb/arb/mongo.log --logappend --relpSet replSet repl1 Error parsing command line: unrecognised option '--relpSet' try '/usr/local/mongodb/bin/mongod --help' for more information root@linux-mongo2:/home/ubuntu# /usr/local/mongodb/bin/mongod -dbpath=/sdb1/mongodb/arb --fork --port 27018 --logpath=/sdb1/mongodb/arb/mongo.log --logappend -replSet repl1 about to fork child process, waiting until server is ready for connections. forked process: 3229 child process started successfully, parent exiting
9.在主節點將仲裁節點添加在複製集中,並查看最終的複製集狀態
1 repl1:PRIMARY> rs.addArb("192.168.126.8:27018") 2 { "ok" : 1 } 3 4 repl1:PRIMARY> rs.status() 5 { 6 "set" : "repl1", 7 "date" : ISODate("2016-06-23T16:27:55.358Z"), 8 "myState" : 1, 9 "term" : NumberLong(1), 10 "heartbeatIntervalMillis" : NumberLong(2000), 11 "members" : [ 12 { 13 "_id" : 0, 14 "name" : "192.168.126.9:27017", 15 "health" : 1, 16 "state" : 1, 17 "stateStr" : "PRIMARY", 18 "uptime" : 4889, 19 "optime" : { 20 "ts" : Timestamp(1466699268, 1), 21 "t" : NumberLong(1) 22 }, 23 "optimeDate" : ISODate("2016-06-23T16:27:48Z"), 24 "electionTime" : Timestamp(1466697868, 2), 25 "electionDate" : ISODate("2016-06-23T16:04:28Z"), 26 "configVersion" : 3, 27 "self" : true 28 }, 29 { 30 "_id" : 1, 31 "name" : "192.168.126.8:27017", 32 "health" : 1, 33 "state" : 5, 34 "stateStr" : "STARTUP2", 35 "uptime" : 1005, 36 "optime" : { 37 "ts" : Timestamp(0, 0), 38 "t" : NumberLong(-1) 39 }, 40 "optimeDate" : ISODate("1970-01-01T00:00:00Z"), 41 "lastHeartbeat" : ISODate("2016-06-23T16:27:54.499Z"), 42 "lastHeartbeatRecv" : ISODate("2016-06-23T16:27:54.561Z"), 43 "pingMs" : NumberLong(0), 44 "syncingTo" : "192.168.126.9:27017", 45 "configVersion" : 3 46 }, 47 { 48 "_id" : 2, 49 "name" : "192.168.126.8:27018", 50 "health" : 1, 51 "state" : 7, 52 "stateStr" : "ARBITER", 53 "uptime" : 6, 54 "lastHeartbeat" : ISODate("2016-06-23T16:27:54.499Z"), 55 "lastHeartbeatRecv" : ISODate("2016-06-23T16:27:53.632Z"), 56 "pingMs" : NumberLong(1), 57 "configVersion" : 3 58 } 59 ], 60 "ok" : 1 61 }
注意: 這裏副本集 192.168.126.8 的狀態是 "STARTUP2" ,是因爲Primary庫的數據很大,致使一直處於初始化的同步數據階段。
詳細說明以下
"_id" : #集羣中節點編號
"name" : #成員服務器名稱及端口
"health" : #表示成員中的健康狀態(0:down;1:up)
"state" : #爲1~11,表示成員的當前狀態
"stateStr" : #描述該成員是主庫(PRIMARY)仍是備庫(SECONDARY)
"uptime" : #該成員在線時間(秒)
"optime" : #成員最後一次應用日誌(oplog)的信息
"optimeDate" : #成員最後一次應用日誌(oplog)的時間
"electionTime" : #當前primary從操做日誌中選舉信息
"electionDate" : #當前primary被選定爲primary的日期
"configVersion" : #mongodb版本
"self" : #爲true 表示當前節點其中 state 複製集狀態:複製集狀態: STARTUP:剛加入到複製集中,配置還未加載 STARTUP2:配置已加載完,初始化狀態 RECOVERING:正在恢復,不適用讀 ARBITER: 仲裁者 DOWN:節點不可到達 UNKNOWN:未獲取其餘節點狀態而不知是什麼狀態,通常發生在只有兩個成員的架構,腦裂 REMOVED:移除複製集 ROLLBACK:數據回滾,在回滾結束時,轉移到RECOVERING或SECONDARY狀態 FATAL:出錯。查看日誌grep "replSet FATAL"找出錯緣由,從新作同步 PRIMARY:主節點 SECONDARY:備份節點