MongoDB设置 Replication Sets

发布时间:2020-02-25 10:28:10 作者:孤鸿子
来源:网络 阅读:1687

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

        MongoDB设置 Replication Sets


                       192.168.110.131(node1)

                       192.168.110.132(node2)

                       192.168.110.133(node3)

    官方文档:

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

    

    部署复制集:

     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


更改数据存放目录:


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


推荐阅读:
  1. MongoDB 主从复制集搭建
  2. MongoDB启动参数(待翻译)

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

master replica sets

上一篇:SQL日志极速增长,怎么查询出对应的操作sql内容?

下一篇:session相关知识

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》