设为首页 收藏本站
查看: 824|回复: 0

[经验分享] MongoDB设置 Replication Sets-linunx运维专题

[复制链接]

尚未签到

发表于 2018-10-25 09:11:56 | 显示全部楼层 |阅读模式
  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 的结构非常类似一个集群 ,其中一个节点如果出现故障, 其它节点马上会将业务 接过来而无须停机操作。
DSC0000.png

  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 >
  chmod 400
  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:
  replication:
  replSetName:
  Command Line
  If using the command line option, start the mongod with the --keyFile and --replSet parameters:
  mongod --keyFile  --replSet
  配置带密钥文件的 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>  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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-626170-1-1.html 上篇帖子: zabbix使用Python实现监控MongoDB副本集状态 下篇帖子: CAP理论与MongoDB一致性、可用性的一些思考
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表