溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MongoDB設(shè)置 Replication Sets

發(fā)布時(shí)間:2020-02-25 10:28:10 來源:網(wǎng)絡(luò) 閱讀:1681 作者:孤鴻子 欄目:MongoDB數(shù)據(jù)庫

    MongoDB 高可用可用分兩種 :


Master-Slave 主從復(fù)制 :只需要在某一個(gè)服務(wù)啟動時(shí)加上–master 參數(shù), 而另一個(gè)服務(wù)加上–slave 與–source 參數(shù), 即可實(shí)現(xiàn)同步。

MongoDB的最新版本已不再推薦此方案。


Replica Sets 復(fù)制集 :MongoDB 在 1.6 版本對開發(fā)了新功能 replica set,這比之前的 replication 功能要強(qiáng)大一 些,增加了故障自動切換

和自動修復(fù)成員節(jié)點(diǎn),各個(gè) DB 之間數(shù)據(jù)完全一致,大大降低了維 護(hù)成功。auto shard 已經(jīng)明確說明不支持 replication paris,建議使用 

replica set,replica set 故障切換完全自動。


Replica Sets 的結(jié)構(gòu)非常類似一個(gè)集群 ,其中一個(gè)節(jié)點(diǎn)如果出現(xiàn)故障, 其它節(jié)點(diǎn)馬上會將業(yè)務(wù) 接過來而無須停機(jī)操作。

        MongoDB設(shè)置 Replication Sets


                       192.168.110.131(node1)

                       192.168.110.132(node2)

                       192.168.110.133(node3)

    官方文檔:

     http://docs.mongoing.com/manual-zh/

    

    部署復(fù)制集:

     http://docs.mongoing.com/manual-zh/tutorial/deploy-replica-set.html


一、MongoDB安裝

    

    [root@node1 ~]# vim /etc/yum.repos.d/Mongodb.repo


    [mongodb-org-3.4]

name=MongoDB Repository

baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/

gpgcheck=1

enabled=1

gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc 


    [root@node1 ~]# yum install -y mongodb-org


    [root@node1 ~]# service mongod start

Starting mongod:                                           [  OK  ]

    

    [root@node1 ~]# ps aux|grep mong

mongod    1361  5.7 14.8 351180 35104 ?        Sl   01:26   0:01 /usr/bin/mongod -f /etc/mongod.conf


更改數(shù)據(jù)存放目錄:


    [root@node1 ~]# mkdir -p /mongodb/data

[root@node1 ~]# chown -R mongod:mongod /mongodb/

[root@node1 ~]# ll /mongodb/

total 4

drwxr-xr-x 2 mongod mongod 4096 May 18 02:04 data


    

    [root@node1 ~]# grep -v "^#" /etc/mongod.conf |grep -v "^$"

systemLog:

 destination: file

 logAppend: true

 path: /var/log/mongodb/mongod.log

storage:

 dbPath: /mongodb/data

 journal:

   enabled: true

processManagement:

 fork: true  # fork and run in background

 pidFilePath: /var/run/mongodb/mongod.pid  # location of pidfile

net:

 port: 27017

 bindIp: 0.0.0.0 # Listen to local interface only, comment to listen on all interfaces.


    [root@node1 ~]# service mongod start

Starting mongod:                                           [  OK  ]

    

    node2,node2與上面一樣


二、配置 Replication Sets

    

    介紹一下涉及到的參數(shù)


--oplogSize 日志操作文件的大小

--dbpath   數(shù)據(jù)文件路徑


--logpath  日志文件路徑


--port        端口號,默認(rèn)是27017.我這里使用的也是這個(gè)端口號.


--replSet   復(fù)制集的名字,一個(gè)replica sets中的每個(gè)節(jié)點(diǎn)的這個(gè)參數(shù)都要用一個(gè)復(fù)制集名字,這里是test.


--replSet test/  這個(gè)后面跟的是其他standard節(jié)點(diǎn)的ip和端口


--maxConns   最大連接數(shù)


--fork       后臺運(yùn)行


--logappend   日志文件循環(huán)使用,如果日志文件已滿,那么新日志覆蓋最久日志。


--keyFile       標(biāo)識同一集群的認(rèn)證私鑰


其中在啟動節(jié)點(diǎn)時(shí)一定要加上oplogSize 的參數(shù) 為其設(shè)置大小,不然在64位操作系統(tǒng)上的mongodb,oplogs都相當(dāng)大-可能是5%的磁盤空間。

要根據(jù)情況設(shè)置個(gè)合理的值。

    

    v3.4.4上的參數(shù):


    [root@node1 ~]# vim /etc/mongod.conf 


replication:

    oplogSizeMB: 1024

    replSetName: rs0

    


    使用Keyfile存取控制部署復(fù)制集:


    openssl rand -base64 756 > <path-to-keyfile>

chmod 400 <path-to-keyfile>



Configuration File


If using a configuration file, set the security.keyFile option to the keyfile’s path, and the replication.replSetName option to the replica set name:


security:

 keyFile: <path-to-keyfile>

replication:

 replSetName: <replicaSetName>


Command Line


If using the command line option, start the mongod with the --keyFile and --replSet parameters:


mongod --keyFile <path-to-keyfile> --replSet <replicaSetName>

    

    配置帶密鑰文件的 Replication Sets:

    

    [root@node1 ~]# openssl rand -base64 756 > /mongodb/mongokey

    [root@node1 ~]# cat /mongodb/mongokey 

gxpcgjyFj2qE8b9TB/0XbdRVYH9VDb55NY03AHwxCFU58MUjJMeez844i1gaUo/t

.....

.....

  

    [root@node1 ~]# chmod 400 /mongodb/mongokey 

[root@node1 ~]# chown mongod:mongod /mongodb/mongokey 

[root@node1 ~]# ll /mongodb/

total 8

drwxr-xr-x 4 mongod mongod 4096 May 19 18:39 data

-r-------- 1 mongod mongod 1024 May 19 18:29 mongokey



    [root@node1 ~]# vim /etc/mongod.conf

    #security:

security:

  keyFile: /mongodb/mongokey


#operationProfiling:


#replication:

replication:

  oplogSizeMB: 1024

  replSetName: rs0

    

    [root@node1 ~]# service mongod restart

Stopping mongod:                                           [  OK  ]

Starting mongod:                                           [  OK  ]

    

    [root@node1 ~]# iptables -I INPUT 4 -m state --state NEW -p tcp --dport 27017  -j ACCEPT

    

    復(fù)制hosts文件:

    [root@node1 ~]# rsync -avH --progress '-e ssh -p 22' /etc/hosts root@node2.pancou.com:/mongodb/

    [root@node1 ~]# rsync -avH --progress '-e ssh -p 22' /etc/hosts root@node3.pancou.com:/mongodb/

    復(fù)制密鑰文件:

    [root@node1 ~]# rsync -avH --progress '-e ssh -p 22' /mongodb/mongokey root@node3.pancou.com:/mongodb/

    [root@node1 ~]# rsync -avH --progress '-e ssh -p 22' /mongodb/mongokey root@node3.pancou.com:/mongodb/

    

    復(fù)制配置文件:

    [root@node1 ~]# rsync -avH --progress '-e ssh -p 22' /etc/mongod.conf root@node2.pancou.com:/etc/

    [root@node1 ~]# rsync -avH --progress '-e ssh -p 22' /etc/mongod.conf root@node3.pancou.com:/etc/


    注意:雙方都要按照rsync和openssh-clients


    [root@node1 ~]# mongo

    > help

db.help()                    help on db methods

db.mycoll.help()             help on collection methods

sh.help()                    sharding helpers

rs.help()                    replica set helpers

    .....


    > rs.help()

    rs.status()                                { replSetGetStatus : 1 } checks repl set status

rs.initiate()                              { replSetInitiate : null } initiates set with default settings

rs.initiate(cfg)                           { replSetInitiate : cfg } initiates set with configuration cfg

rs.conf()                                  get the current configuration object from local.system.replset

    .....


    > rs.status()

{

"info" : "run rs.initiate(...) if not yet done for the set",

"ok" : 0,

"errmsg" : "no replset config has been received",

"code" : 94,

"codeName" : "NotYetInitialized"

    }


    > rs.initiate()

{

"info2" : "no configuration specified. Using a default configuration for the set",

"me" : "node1.pancou.com:27017",

"ok" : 1

}


    rs0:OTHER> 

rs0:PRIMARY> rs.status()

{

"set" : "rs0",

"date" : ISODate("2017-05-18T17:00:49.868Z"),

"myState" : 1,

"term" : NumberLong(1),

"heartbeatIntervalMillis" : NumberLong(2000),

"optimes" : {

"lastCommittedOpTime" : {

"ts" : Timestamp(1495126845, 1),

"t" : NumberLong(1)

},

"appliedOpTime" : {

"ts" : Timestamp(1495126845, 1),

"t" : NumberLong(1)

},

"durableOpTime" : {

"ts" : Timestamp(1495126845, 1),

"t" : NumberLong(1)

}

},

"members" : [

{

"_id" : 0,

"name" : "node1.pancou.com:27017",

"health" : 1,

"state" : 1,

"stateStr" : "PRIMARY",

"uptime" : 1239,

"optime" : {

"ts" : Timestamp(1495126845, 1),

"t" : NumberLong(1)

},

"optimeDate" : ISODate("2017-05-18T17:00:45Z"),

"infoMessage" : "could not find member to sync from",

"electionTime" : Timestamp(1495126824, 2),

"electionDate" : ISODate("2017-05-18T17:00:24Z"),

"configVersion" : 1,

"self" : true

}

],

"ok" : 1

}


    rs0:PRIMARY> rs.add("node2.pancou.com")

{ "ok" : 1 }

rs0:PRIMARY> rs.add("node3.pancou.com")

{ "ok" : 1 }

    rs0:PRIMARY> rs.status()

{

"set" : "rs0",

"date" : ISODate("2017-05-18T17:08:47.724Z"),

"myState" : 1,

"term" : NumberLong(1),

"heartbeatIntervalMillis" : NumberLong(2000),

"optimes" : {

"lastCommittedOpTime" : {

"ts" : Timestamp(1495127325, 1),

"t" : NumberLong(1)

},

"appliedOpTime" : {

"ts" : Timestamp(1495127325, 1),

"t" : NumberLong(1)

},

"durableOpTime" : {

"ts" : Timestamp(1495127325, 1),

"t" : NumberLong(1)

}

},

"members" : [

{

"_id" : 0,

"name" : "node1.pancou.com:27017",

"health" : 1,              //表明狀態(tài)正常

"state" : 1,               //1表示是PRIMARY,2表示是slave

"stateStr" : "PRIMARY",    //表示此機(jī)器是主庫

"uptime" : 1717,

"optime" : {

"ts" : Timestamp(1495127325, 1),

"t" : NumberLong(1)

},

"optimeDate" : ISODate("2017-05-18T17:08:45Z"),

"electionTime" : Timestamp(1495126824, 2),

"electionDate" : ISODate("2017-05-18T17:00:24Z"),

"configVersion" : 3,

"self" : true

},

{

"_id" : 1,

"name" : "node2.pancou.com:27017",

"health" : 1,

"state" : 2,

"stateStr" : "SECONDARY",

"uptime" : 64,

"optime" : {

"ts" : Timestamp(1495127325, 1),

"t" : NumberLong(1)

},

"optimeDurable" : {

"ts" : Timestamp(1495127325, 1),

"t" : NumberLong(1)

},

"optimeDate" : ISODate("2017-05-18T17:08:45Z"),

"optimeDurableDate" : ISODate("2017-05-18T17:08:45Z"),

"lastHeartbeat" : ISODate("2017-05-18T17:08:46.106Z"),

"lastHeartbeatRecv" : ISODate("2017-05-18T17:08:47.141Z"),

"pingMs" : NumberLong(0),

"syncingTo" : "node1.pancou.com:27017",

"configVersion" : 3

},

{

"_id" : 2,

"name" : "node3.pancou.com:27017",

"health" : 1,

"state" : 2,

"stateStr" : "SECONDARY",

"uptime" : 55,

"optime" : {

"ts" : Timestamp(1495127325, 1),

"t" : NumberLong(1)

},

"optimeDurable" : {

"ts" : Timestamp(1495127325, 1),

"t" : NumberLong(1)

},

"optimeDate" : ISODate("2017-05-18T17:08:45Z"),

"optimeDurableDate" : ISODate("2017-05-18T17:08:45Z"),

"lastHeartbeat" : ISODate("2017-05-18T17:08:46.195Z"),

"lastHeartbeatRecv" : ISODate("2017-05-18T17:08:46.924Z"),

"pingMs" : NumberLong(0),

"syncingTo" : "node2.pancou.com:27017",

"configVersion" : 3

}

],

"ok" : 1

}

    

    rs0:PRIMARY> db.isMaster()

{

"hosts" : [

"node1.pancou.com:27017",

"node2.pancou.com:27017",

"node3.pancou.com:27017"

],

"setName" : "rs0",

"setVersion" : 3,

"ismaster" : true,

"secondary" : false,

"primary" : "node1.pancou.com:27017",

"me" : "node1.pancou.com:27017",

"electionId" : ObjectId("7fffffff0000000000000001"),

"lastWrite" : {

"opTime" : {

"ts" : Timestamp(1495127705, 1),

"t" : NumberLong(1)

},

"lastWriteDate" : ISODate("2017-05-18T17:15:05Z")

},

"maxBsonObjectSize" : 16777216,

"maxMessageSizeBytes" : 48000000,

"maxWriteBatchSize" : 1000,

"localTime" : ISODate("2017-05-18T17:15:11.146Z"),

"maxWireVersion" : 5,

"minWireVersion" : 0,

"readOnly" : false,

"ok" : 1

}

    

    rs0:PRIMARY> use testdb

    rs0:PRIMARY> show collections

testcoll

rs0:PRIMARY> db.testcoll.find()

{ "_id" : ObjectId("591dd9f965cc255a5373aefa"), "name" : "tom", "age" : 25 }



    到從庫上查看:


    node2:


    rs0:SECONDARY> rs.slaveOk()

rs0:SECONDARY> show dbs

admin   0.000GB

local   0.000GB

testdb  0.000GB

rs0:SECONDARY> use testdb

switched to db testdb

rs0:SECONDARY> show collections

testcoll

rs0:SECONDARY> db.testcoll.find()

{ "_id" : ObjectId("591dd9f965cc255a5373aefa"), "name" : "tom", "age" : 25 }

rs0:SECONDARY> 

    

    node3:


    rs0:SECONDARY> rs.slaveOk()

rs0:SECONDARY> show dbs

admin   0.000GB

local   0.000GB

testdb  0.000GB

rs0:SECONDARY> use testdb

switched to db testdb

rs0:SECONDARY> show collections

testcoll

rs0:SECONDARY> db.testcoll.find()

{ "_id" : ObjectId("591dd9f965cc255a5373aefa"), "name" : "tom", "age" : 25 }

rs0:SECONDARY> 



    主從操作日志


    rs0:PRIMARY> use local

switched to db local

rs0:PRIMARY> show collections

me

oplog.rs

replset.election

replset.minvalid

startup_log

system.replset

rs0:PRIMARY> db.oplog.rs.find()

{ "ts" : Timestamp(1495126824, 1), "h" : NumberLong("3056083863196084673"), "v" : 2, "op" : "n", "ns" : "", "o" : { "msg" : "initiating set" } }

{ "ts" : Timestamp(1495126825, 1), "t" : NumberLong(1), "h" : NumberLong("7195178065440751511"), "v" : 2, "op" : "n", "ns" : "", "o" : { "msg" : "new primary" } }

{ "ts" : Timestamp(1495126835, 1), "t" : NumberLong(1), "h" : NumberLong("5723995478292318850"), "v" : 2, "op" : "n", "ns" : "", "o" : { "msg" : "periodic noop" } }

{ "ts" : Timestamp(1495126845, 1), "t" : NumberLong(1), "h" : NumberLong("-3772304067699003381"), "v" : 2, "op" : "n", "ns" : "", "o"


三、查看配置信息  


    rs0:PRIMARY> db.printReplicationInfo()

configured oplog size:   1024MB

log length start to end: 2541secs (0.71hrs)

oplog first event time:  Fri May 19 2017 01:00:24 GMT+0800 (CST)

oplog last event time:   Fri May 19 2017 01:42:45 GMT+0800 (CST)

now:                     Fri May 19 2017 01:42:48 GMT+0800 (CST)

rs0:PRIMARY> 


db.oplog.rs.find():查看復(fù)制集產(chǎn)生的日志

db.printReplicationInfo():查看操作日志的一些基本信息,如日志大小、日志啟用時(shí)間。

    db.printSlaveReplicationInfo():查看所有slave延遲情況。


rs0:PRIMARY> db.printSlaveReplicationInfo()

source: node2.pancou.com:27017

syncedTo: Fri May 19 2017 01:47:15 GMT+0800 (CST)

0 secs (0 hrs) behind the primary 

source: node3.pancou.com:27017

syncedTo: Fri May 19 2017 01:47:15 GMT+0800 (CST)

0 secs (0 hrs) behind the primary 

    

    db.system.replset.find():查看復(fù)制集


    配置信息:


    rs0:PRIMARY> db.system.replset.find()

{ "_id" : "rs0", "version" : 3, "protocolVersion" : NumberLong(1), "members" : [ { "_id" : 0, "host" : "node1.pancou.com:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : {  }, "slaveDelay" : NumberLong(0), "votes" : 1 }, { "_id" : 1, "host" : "node2.pancou.com:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : {  }, "slaveDelay" : NumberLong(0), "votes" : 1 }, { "_id" : 2, "host" : "node3.pancou.com:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : {  }, "slaveDelay" : NumberLong(0), "votes" : 1 } ], "settings" : { "chainingAllowed" : true, "heartbeatIntervalMillis" : 2000, "heartbeatTimeoutSecs" : 10, "electionTimeoutMillis" : 10000, "catchUpTimeoutMillis" : 2000, "getLastErrorModes" : {  }, "getLastErrorDefaults" : { "w" : 1, "wtimeout" : 0 }, "replicaSetId" : ObjectId("591dd3284fc6957e660dc933") } }

 

   rs0:PRIMARY> db.system.replset.find().forEach(printjson)  這種方式更直觀



四、主從切換:

    

    1、把node3冰凍30秒

    

    rs0:SECONDARY> rs.freeze(30)

    { "ok" : 1 }


    2、把node1 PRIMARY降級、

    rs0:PRIMARY> rs.stepDown(30)

2017-05-19T02:09:27.945+0800 E QUERY    [thread1] Error: error doing query: failed: network error while attempting to run command 'replSetStepDown' on host '127.0.0.1:27017'  :

DB.prototype.runCommand@src/mongo/shell/db.js:132:1

DB.prototype.adminCommand@src/mongo/shell/db.js:150:16

rs.stepDown@src/mongo/shell/utils.js:1261:12

@(shell):1:1

2017-05-19T02:09:27.947+0800 I NETWORK  [thread1] trying reconnect to 127.0.0.1:27017 (127.0.0.1) failed

2017-05-19T02:09:27.949+0800 I NETWORK  [thread1] reconnect 127.0.0.1:27017 (127.0.0.1) ok

    

    30秒后就變成從了

rs0:SECONDARY> rs.status()

{

"set" : "rs0",

"date" : ISODate("2017-05-18T18:12:09.732Z"),

"myState" : 2,

"term" : NumberLong(2),

"syncingTo" : "node2.pancou.com:27017",

"heartbeatIntervalMillis" : NumberLong(2000),

"optimes" : {

"lastCommittedOpTime" : {

"ts" : Timestamp(1495131128, 1),

"t" : NumberLong(2)

},

"appliedOpTime" : {

"ts" : Timestamp(1495131128, 1),

"t" : NumberLong(2)

},

"durableOpTime" : {

"ts" : Timestamp(1495131128, 1),

"t" : NumberLong(2)

}

},

"members" : [

{

"_id" : 0,

"name" : "node1.pancou.com:27017",

"health" : 1,

"state" : 2,

"stateStr" : "SECONDARY",

"uptime" : 5519,

"optime" : {

"ts" : Timestamp(1495131128, 1),

"t" : NumberLong(2)

},

"optimeDate" : ISODate("2017-05-18T18:12:08Z"),

"syncingTo" : "node2.pancou.com:27017",

"configVersion" : 3,

"self" : true

},

{

"_id" : 1,

"name" : "node2.pancou.com:27017",

"health" : 1,

"state" : 1,

"stateStr" : "PRIMARY",

"uptime" : 3866,

"optime" : {

"ts" : Timestamp(1495131118, 1),

"t" : NumberLong(2)

},

"optimeDurable" : {

"ts" : Timestamp(1495131118, 1),

"t" : NumberLong(2)

},

"optimeDate" : ISODate("2017-05-18T18:11:58Z"),

"optimeDurableDate" : ISODate("2017-05-18T18:11:58Z"),

"lastHeartbeat" : ISODate("2017-05-18T18:12:08.333Z"),

"lastHeartbeatRecv" : ISODate("2017-05-18T18:12:08.196Z"),

"pingMs" : NumberLong(0),

"electionTime" : Timestamp(1495130977, 1),

"electionDate" : ISODate("2017-05-18T18:09:37Z"),

"configVersion" : 3

},

{

"_id" : 2,

"name" : "node3.pancou.com:27017",

"health" : 1,

"state" : 2,

"stateStr" : "SECONDARY",

"uptime" : 3857,

"optime" : {

"ts" : Timestamp(1495131118, 1),

"t" : NumberLong(2)

},

"optimeDurable" : {

"ts" : Timestamp(1495131118, 1),

"t" : NumberLong(2)

},

"optimeDate" : ISODate("2017-05-18T18:11:58Z"),

"optimeDurableDate" : ISODate("2017-05-18T18:11:58Z"),

"lastHeartbeat" : ISODate("2017-05-18T18:12:08.486Z"),

"lastHeartbeatRecv" : ISODate("2017-05-18T18:12:08.116Z"),

"pingMs" : NumberLong(0),

"syncingTo" : "node2.pancou.com:27017",

"configVersion" : 3

}

],

"ok" : 1

}

rs0:SECONDARY> 



五、增減節(jié)點(diǎn)

    

    1、增加節(jié)點(diǎn)


       通過oplog增加節(jié)點(diǎn),這種方式使數(shù)據(jù)的同步完全依賴于oplog,即oplog中有多少操作日志,這些操作日志就完全在新添加的節(jié)點(diǎn)中執(zhí)行一遍,以完成同步。


       在上面有一個(gè)3節(jié)點(diǎn)的復(fù)制集基礎(chǔ)上,現(xiàn)在想配置并啟動一個(gè)新節(jié)點(diǎn),將其加入現(xiàn)在復(fù)制集環(huán)境中。

       


       [root@node1 ~]# rsync -avH --progress '-e ssh -p 22' /etc/hosts root@node2.pancou.com:/etc/

       

       [root@node1 ~]# rsync -avH --progress '-e ssh -p 22' /mongodb/mongokey root@node4.pancou.com:/mongodb/


       [root@node1 ~]# rsync -avH --progress '-e ssh -p 22' /etc/mongod.conf root@node4.pancou.com:/etc/


       [root@node4 ~]# iptables -I INPUT 4 -m state --state NEW -p tcp --dport 27017  -j ACCEPT

       

       在主上添加新節(jié)點(diǎn):


       rs0:PRIMARY> rs.add("node4.pancou.com")

{ "ok" : 1 }

       

       rs0:PRIMARY> rs.status()

{

"set" : "rs0",

"date" : ISODate("2017-05-19T12:12:57.697Z"),

"myState" : 1,

"term" : NumberLong(8),

"heartbeatIntervalMillis" : NumberLong(2000),

"optimes" : {

"lastCommittedOpTime" : {

"ts" : Timestamp(1495195971, 1),

"t" : NumberLong(8)

},

"appliedOpTime" : {

"ts" : Timestamp(1495195971, 1),

"t" : NumberLong(8)

},

"durableOpTime" : {

"ts" : Timestamp(1495195971, 1),

"t" : NumberLong(8)

}

},

"members" : [

{

"_id" : 0,

"name" : "node1.pancou.com:27017",

"health" : 1,

"state" : 2,

"stateStr" : "SECONDARY",

"uptime" : 159,

"optime" : {

"ts" : Timestamp(1495195971, 1),

"t" : NumberLong(8)

},

"optimeDurable" : {

"ts" : Timestamp(1495195971, 1),

"t" : NumberLong(8)

},

"optimeDate" : ISODate("2017-05-19T12:12:51Z"),

"optimeDurableDate" : ISODate("2017-05-19T12:12:51Z"),

"lastHeartbeat" : ISODate("2017-05-19T12:12:56.111Z"),

"lastHeartbeatRecv" : ISODate("2017-05-19T12:12:57.101Z"),

"pingMs" : NumberLong(0),

"syncingTo" : "node3.pancou.com:27017",

"configVersion" : 4

},

{

"_id" : 1,

"name" : "node2.pancou.com:27017",

"health" : 1,

"state" : 2,

"stateStr" : "SECONDARY",

"uptime" : 189,

"optime" : {

"ts" : Timestamp(1495195971, 1),

"t" : NumberLong(8)

},

"optimeDurable" : {

"ts" : Timestamp(1495195971, 1),

"t" : NumberLong(8)

},

"optimeDate" : ISODate("2017-05-19T12:12:51Z"),

"optimeDurableDate" : ISODate("2017-05-19T12:12:51Z"),

"lastHeartbeat" : ISODate("2017-05-19T12:12:56.111Z"),

"lastHeartbeatRecv" : ISODate("2017-05-19T12:12:57.103Z"),

"pingMs" : NumberLong(0),

"syncingTo" : "node3.pancou.com:27017",

"configVersion" : 4

},

{

"_id" : 2,

"name" : "node3.pancou.com:27017",

"health" : 1,

"state" : 1,

"stateStr" : "PRIMARY",

"uptime" : 191,

"optime" : {

"ts" : Timestamp(1495195971, 1),

"t" : NumberLong(8)

},

"optimeDate" : ISODate("2017-05-19T12:12:51Z"),

"electionTime" : Timestamp(1495195800, 1),

"electionDate" : ISODate("2017-05-19T12:10:00Z"),

"configVersion" : 4,

"self" : true

},

{

"_id" : 3,

"name" : "node4.pancou.com:27017",

"health" : 1,

"state" : 2,

"stateStr" : "SECONDARY",

"uptime" : 71,

"optime" : {

"ts" : Timestamp(1495195971, 1),

"t" : NumberLong(8)

},

"optimeDurable" : {

"ts" : Timestamp(1495195971, 1),

"t" : NumberLong(8)

},

"optimeDate" : ISODate("2017-05-19T12:12:51Z"),

"optimeDurableDate" : ISODate("2017-05-19T12:12:51Z"),

"lastHeartbeat" : ISODate("2017-05-19T12:12:56.122Z"),

"lastHeartbeatRecv" : ISODate("2017-05-19T12:12:56.821Z"),

"pingMs" : NumberLong(1),

"syncingTo" : "node3.pancou.com:27017",

"configVersion" : 4

}

],

"ok" : 1

}



查看狀態(tài):


rs0:SECONDARY> rs.slaveOk()

rs0:SECONDARY> show dbs

admin   0.000GB

local   0.000GB

testdb  0.000GB

rs0:SECONDARY> use testdb

switched to db testdb

rs0:SECONDARY> show collections

testcoll

rs0:SECONDARY> db.testcoll.find()

{ "_id" : ObjectId("591dd9f965cc255a5373aefa"), "name" : "tom", "age" : 25 }

rs0:SECONDARY> 

rs0:SECONDARY> db.isMaster()

{

"hosts" : [

"node1.pancou.com:27017",

"node2.pancou.com:27017",

"node3.pancou.com:27017",

"node4.pancou.com:27017"

],

"setName" : "rs0",

"setVersion" : 4,

"ismaster" : false,

"secondary" : true,

"primary" : "node3.pancou.com:27017",

"me" : "node4.pancou.com:27017",

"lastWrite" : {

"opTime" : {

"ts" : Timestamp(1495196261, 1),

"t" : NumberLong(8)

},

"lastWriteDate" : ISODate("2017-05-19T12:17:41Z")

},

"maxBsonObjectSize" : 16777216,

"maxMessageSizeBytes" : 48000000,

"maxWriteBatchSize" : 1000,

"localTime" : ISODate("2017-05-19T12:17:44.104Z"),

"maxWireVersion" : 5,

"minWireVersion" : 0,

"readOnly" : false,

"ok" : 1

}

rs0:SECONDARY> 


     2、減少節(jié)點(diǎn)


        rs0:PRIMARY> rs.remove("node4.pancou.com:27017")

{ "ok" : 1 }

        

        rs0:PRIMARY> db.isMaster()

{

"hosts" : [

"node1.pancou.com:27017",

"node2.pancou.com:27017",

"node3.pancou.com:27017"

],

"setName" : "rs0",

"setVersion" : 5,

"ismaster" : true,

"secondary" : false,

"primary" : "node3.pancou.com:27017",

"me" : "node3.pancou.com:27017",

"electionId" : ObjectId("7fffffff0000000000000008"),

"lastWrite" : {

"opTime" : {

"ts" : Timestamp(1495196531, 1),

"t" : NumberLong(8)

},

"lastWriteDate" : ISODate("2017-05-19T12:22:11Z")

},

"maxBsonObjectSize" : 16777216,

"maxMessageSizeBytes" : 48000000,

"maxWriteBatchSize" : 1000,

"localTime" : ISODate("2017-05-19T12:22:19.874Z"),

"maxWireVersion" : 5,

"minWireVersion" : 0,

"readOnly" : false,

"ok" : 1

}

rs0:PRIMARY> 


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI