阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MongoDB设置 Replication Sets 复制集

425次阅读
没有评论

共计 18867 个字符,预计需要花费 48 分钟才能阅读完成。

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>

 

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-05/144030.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计18867字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19356
评论数
4
阅读量
8272283
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛 NAS-7:手把手教你免费内网穿透 -Cloudflare tunnel 前言 大家好,我是星...
星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛 NAS-2:飞牛配置 RAID 磁盘阵列 前言 大家好,我是星哥之前星哥写了《星哥带你玩飞牛 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

  免费无广告!这款跨平台 AI RSS 阅读器,拯救你的信息焦虑 在算法推荐主导信息流的时代,我们...
飞牛NAS玩转Frpc并且配置,随时随地直连你的私有云

飞牛NAS玩转Frpc并且配置,随时随地直连你的私有云

飞牛 NAS 玩转 Frpc 并且配置,随时随地直连你的私有云 大家好,我是星哥,最近在玩飞牛 NAS。 在数...
150元打造低成本NAS小钢炮,捡一块3865U工控板

150元打造低成本NAS小钢炮,捡一块3865U工控板

150 元打造低成本 NAS 小钢炮,捡一块 3865U 工控板 一块二手的熊猫 B3 工控板 3865U,搭...
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...
安装并使用谷歌AI编程工具Antigravity(亲测有效)

安装并使用谷歌AI编程工具Antigravity(亲测有效)

  安装并使用谷歌 AI 编程工具 Antigravity(亲测有效) 引言 Antigravity...
每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年 0.99 刀,拿下你的第一个顶级域名,详细注册使用 前言 作为长期折腾云服务、域名建站的老玩家,星哥一直...
免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

  免费无广告!这款跨平台 AI RSS 阅读器,拯救你的信息焦虑 在算法推荐主导信息流的时代,我们...