博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MongoDB设置 Replication Sets
阅读量:2388 次
发布时间:2019-05-10

本文共 19465 字,大约阅读时间需要 64 分钟。

MongoDB 高可用可用分两种 :



Master-Slave 主从复制 :
只需要在某一个服务启动时加上–master 参数, 而另一个服务加上–slave 与–source 参数, 即可实现同步

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


Replica Sets 复制集 :MongoDB 在 1.6 版本对开发了新功能 replica set,这比之前的 replication 功能要强大一 些,增加了故障自动切换

和自动修复成员节点,各个 DB 之间数据完全一致,大大降低了维 护成功。auto shard 已经明确说明不支持 replication paris,
建议使用 

replica set,replica set 故障切换完全自动。


Replica Sets 的结构非常类似一个集群 ,其中一个节点如果出现故障, 其它节点马上会将业务 接过来而无须停机操作。





192.168.110.131(node1)

192.168.110.132(node2)

192.168.110.133(node3)




一、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



更改数据存放目录:



[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

    

介绍一下涉及到的参数


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


--dbpath   数据文件路径


--logpath  日志文件路径


--port        端口号,默认是27017.我这里使用的也是这个端口号.


--replSet   复制集的名字,一个replica sets中的每个节点的这个参数都要用一个复制集名字,这里是test.


--replSet test/  这个后面跟的是其他standard节点的ip和端口


--maxConns   最大连接数


--fork       后台运行


--logappend   日志文件循环使用,如果日志文件已满,那么新日志覆盖最久日志。


--keyFile       标识同一集群的认证私钥



其中在启动节点时一定要加上oplogSize 的参数 为其设置大小,不然在64位操作系统上的mongodb,oplogs都相当大-可能是5%的磁盘空间。

要根据情况设置个合理的值。

    

    v3.4.4上的参数:



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


replication:

   
oplogSizeMB: 1024

   
replSetName: rs0

    

    使用Keyfile存取控制部署复制集:


    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

    

    复制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/


    复制密钥文件:

    [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/

    

    复制配置文件:

    [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,              //表明状态正常

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

"stateStr" : "PRIMARY",    //表示此机器是主库

"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():查看复制集产生的日志


db.printReplicationInfo():查看操作日志的一些基本信息,如日志大小、日志启用时间。


 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():查看复制集



    配置信息:



    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> 




五、增减节点

    

    1、增加节点


       
通过oplog增加节点,这种方式使数据的同步完全依赖于oplog,即oplog中有多少操作日志,这些操作日志就完全在新添加的节点中执行一遍,以完成同步


       在上面有一个3节点的复制集基础上,现在想配置并启动一个新节点,将其加入现在复制集环境中。

       


       [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

       

       在主上添加新节点:



       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

}





查看状态:



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、减少节点



        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> 

转载地址:http://wnpab.baihongyu.com/

你可能感兴趣的文章
vs.net 控件 List<>属性 报错 XX为标记为可序列化
查看>>
VS web编程中 .aspx .aspx.cs
查看>>
把一个类的析构函数定义成virtual
查看>>
编码介绍 ASCII与Unicode, codepage, utf-8
查看>>
脚本注释 CNHK
查看>>
HTML中id、name、class 区别
查看>>
JavaScript 变量
查看>>
正则表达式
查看>>
C++中友元(友元函数和友元类)的用法和功能
查看>>
刻度轴 规范值算法
查看>>
数据库 事务回滚实例(C#)
查看>>
CFileDialog的用法简介
查看>>
C++ 多态 指针转换
查看>>
秒杀多线程第五篇 经典线程同步 关键段CS
查看>>
c++头文件包含注意要点
查看>>
C++ Assert()
查看>>
契约式编程
查看>>
JAVA 死锁
查看>>
C/C++ 中头文件相互包含引发的问题
查看>>
PowerDesigner绘制ER图
查看>>