充实和减弱mongodb复制聚焦的节点

作者: 关于计算机  发布:2019-10-29

MongoDB 高可用可用分两种 :

MongoDB Replica Sets不仅提供高可用性的解决方案,同时也提供负载均衡的解决方案,增减 Replica Sets节点在实际应用中非常普通。例如,当应用的读压力暴增时,3台节点的环境已不能满足需求,那么就需要增加一些节点将压力平均分配一下;当应用的压力小时,可以减少一些节点来减少硬件资源的成本,总之这是一个长期且持续的工作。

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

增加节点步骤

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

1) 配置并启动新节点,启用 28013 这个端口给新的节点

Replica Sets 复制集 :MongoDB 在 1.6 版本对开发了新功能 replica set,这比之前的 replication 功能要强大一 些,增加了故障自动切换和自动修复成员节点,各个 DB 之间数据完全一致,大大降低了维 护成功。auto shard 已经明确说明不支持 replication paris,建议使用replica set,replica set 故障切换完全自动。

[root@node222 mongodb]# mkdir -p /data02/mongors/data/r3

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

[root@node222 mongodb]# echo " this is rs1 super secret key " > /data02/mongors/key/r3

图片 1

[root@node222 mongodb]# chmod 600 /data02/mongors/key/r3

192.168.110.131(node1)

[root@node222 mongodb]# /usr/local/mongodb/bin/mongod --replSet rs1 --keyFile /data02/mongors/key/r3 --fork --port 28013 --dbpath /data02/mongors/data/r3 --logpath=/data02/mongors/log/r3.log --logappend

192.168.110.132(node2)

about to fork child process, waiting until server is ready for connections.

192.168.110.133(node3)

forked process: 17718

官方文档:

child process started successfully, parent exiting

[root@node222 mongodb]#

部署复制集:

 

2) 在primary节点上执行命令添加此新节点到现有的 Replica Sets

一、MongoDB安装
   
    [root@node1 ~]# vim /etc/yum.repos.d/Mongodb.repo

rs1:PRIMARY> rs.add("localhost:28013");rs.add("localhost:28013");

    [mongodb-org-3.4]
 name=MongoDB Repository
 baseurl=
 gpgcheck=1
 enabled=1
 gpgkey=

{ "ok" : 1 }

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

rs1:PRIMARY> rs.status();rs.status();

    [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

{

 更改数据存放目录:

        "set" : "rs1",

    [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

        "date" : ISODate("2016-07-22T10:26:06.175Z"),

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

        "myState" : 1,

    [root@node1 ~]# service mongod start
 Starting mongod:                                          [  OK  ]
   
    node2,node2与上面一样

        "term" : NumberLong(2),

二、配置 Replication Sets
   
    介绍一下涉及到的参数

        "heartbeatIntervalMillis" : NumberLong(2000),

 --oplogSize 日志操作文件的大小
 --dbpath  数据文件路径

        "members" : [

 --logpath  日志文件路径

                {

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

                        "_id" : 0,

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

                        "name" : "localhost:28010",

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

                        "health" : 1,

 --maxConns  最大连接数

                        "state" : 2,

 --fork      后台运行

                        "stateStr" : "SECONDARY",

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

                        "uptime" : 235,

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

                        "optime" : {

 其中在启动节点时一定要加上oplogSize 的参数 为其设置大小,不然在64位操作系统上的mongodb,oplogs都相当大-可能是5%的磁盘空间。
 要根据情况设置个合理的值。
   
    v3.4.4上的参数:

                                "ts" : Timestamp(1469183031, 1),

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

                                "t" : NumberLong(2)

 replication:
    oplogSizeMB: 1024
    replSetName: rs0    

                        },

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

                        "optimeDate" : ISODate("2016-07-22T10:23:51Z"),

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

                        "lastHeartbeat" : ISODate("2016-07-22T10:26:05.493Z"),

 

                        "lastHeartbeatRecv" : ISODate("2016-07-22T10:26:05.603Z"),

 Configuration File

                        "pingMs" : NumberLong(0),

 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:

                        "syncingTo" : "localhost:28012",

 security:
  keyFile: <path-to-keyfile>
 replication:
  replSetName: <replicaSetName>

                        "configVersion" : 2

 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

                        "_id" : 1,

 

                        "name" : "localhost:28011",

    [root@node1 ~]# vim /etc/mongod.conf
    #security:
 security:
  keyFile: /mongodb/mongokey

                        "health" : 1,

 #operationProfiling:

                        "state" : 2,

 #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@node1 ~]# rsync -avH --progress '-e ssh -p 22' /etc/hosts
    复制密钥文件:
    [root@node1 ~]# rsync -avH --progress '-e ssh -p 22' /mongodb/mongokey
    [root@node1 ~]# rsync -avH --progress '-e ssh -p 22' /mongodb/mongokey
   
    复制配置文件:
    [root@node1 ~]# rsync -avH --progress '-e ssh -p 22' /etc/mongod.conf
    [root@node1 ~]# rsync -avH --progress '-e ssh -p 22' /etc/mongod.conf

                        "stateStr" : "SECONDARY",

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

                        "uptime" : 2749,

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

                        "optime" : {

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

                                "ts" : Timestamp(1469183031, 1),

    > 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"
    }

                                "t" : NumberLong(2)

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

                        "optimeDate" : ISODate("2016-07-22T10:23:51Z"),

    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 }

                        "lastHeartbeat" : ISODate("2016-07-22T10:26:05.493Z"),

 

                        "lastHeartbeatRecv" : ISODate("2016-07-22T10:26:05.603Z"),

    到从库上查看:

                        "pingMs" : NumberLong(0),

    node2:

                        "syncingTo" : "localhost:28012",

    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:

                        "configVersion" : 2

    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>

                },

 

                {

    主从操作日志

                        "_id" : 2,

    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"

                        "name" : "localhost:28012",

三、查看配置信息 

                        "health" : 1,

    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>

                        "state" : 1,

 db.oplog.rs.find():查看复制集产生的日志
 db.printReplicationInfo():查看操作日志的一些基本信息,如日志大小、日志启用时间。
    db.printSlaveReplicationInfo():查看所有slave延迟情况。

                        "stateStr" : "PRIMARY",

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

                        "uptime" : 2956,

    配置信息:

                        "optime" : {

    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)  这种方式更直观

                                "ts" : Timestamp(1469183031, 1),

 

                                "t" : NumberLong(2)

四、主从切换:
   
    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'  :
 
 
 
 @(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>

                        "optimeDate" : ISODate("2016-07-22T10:23:51Z"),

 

                        "electionTime" : Timestamp(1469182400, 1),

五、增减节点
   
    1、增加节点

                        "electionDate" : ISODate("2016-07-22T10:13:20Z"),

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

                        "configVersion" : 2,

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

                        "self" : true

      [root@node1 ~]# rsync -avH --progress '-e ssh -p 22' /etc/hosts
     
      [root@node1 ~]# rsync -avH --progress '-e ssh -p 22' /mongodb/mongokey

                },

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

                {

      [root@node4 ~]# iptables -I INPUT 4 -m state --state NEW -p tcp --dport 27017  -j ACCEPT
     
      在主上添加新节点:

                        "_id" : 3,

      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
  }

                        "name" : "localhost:28013",

 

                        "health" : 1,

  查看状态:

                        "state" : 2,

  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>

                        "stateStr" : "SECONDARY",

    2、减少节点

                        "uptime" : 65,

        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>

                        "optime" : {

 

                                "ts" : Timestamp(1469177570, 1),

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

                                "t" : NumberLong(1)

图片 2

                        },

                        "optimeDate" : ISODate("2016-07-22T08:52:50Z"),

                        "lastHeartbeat" : ISODate("2016-07-22T08:53:54.701Z"),

                        "lastHeartbeatRecv" : ISODate("2016-07-22T08:53:51.755Z"),

                        "pingMs" : NumberLong(0),

                        "configVersion" : 2

                }

        ],

        "ok" : 1

}

rs1:PRIMARY> rs.config();rs.config();

{

        "_id" : "rs1",

        "version" : 2,

        "protocolVersion" : NumberLong(1),

        "members" : [

                {

                        "_id" : 0,

                        "host" : "localhost:28010",

                        "arbiterOnly" : false,

                        "buildIndexes" : true,

                        "hidden" : false,

                        "priority" : 1,

                        "tags" : {

 

                        },

                        "slaveDelay" : NumberLong(0),

                        "votes" : 1

                },

                {

                        "_id" : 1,

                        "host" : "localhost:28011",

                        "arbiterOnly" : false,

                        "buildIndexes" : true,

                        "hidden" : false,

                        "priority" : 1,

                        "tags" : {

 

                        },

                        "slaveDelay" : NumberLong(0),

                        "votes" : 1

                },

                {

                        "_id" : 2,

                        "host" : "localhost:28012",

                        "arbiterOnly" : false,

                        "buildIndexes" : true,

                        "hidden" : false,

                        "priority" : 1,

                        "tags" : {

 

                        },

                        "slaveDelay" : NumberLong(0),

                        "votes" : 1

                },

                {

                        "_id" : 3,

                        "host" : "localhost:28013",

                        "arbiterOnly" : false,

                        "buildIndexes" : true,

                        "hidden" : false,

                        "priority" : 1,

                        "tags" : {

 

                        },

                        "slaveDelay" : NumberLong(0),

                        "votes" : 1

                }

        ],

        "settings" : {

                "chainingAllowed" : true,

                "heartbeatIntervalMillis" : 2000,

                "heartbeatTimeoutSecs" : 10,

                "electionTimeoutMillis" : 10000,

                "getLastErrorModes" : {

 

                },

                "getLastErrorDefaults" : {

                        "w" : 1,

                        "wtimeout" : 0

                },

                "replicaSetId" : ObjectId("5791ea00a9dbf7228bb1ec0c")

        }

}

rs1:PRIMARY>

 

 

3)验证数据是否已经同步过来了

# /usr/local/mongodb/bin/mongo -port 28013

> rs.slaveOK()

> db.c1.find()

 

删除节点步骤

下面将刚刚添加的两个新节点 28013 从复制集中去除掉,只需 rs.remove 指令就可以了,具体如下:

登录到primary 节点,执行下面的命令将28013 从复制集中去掉:

> rs.remove("localhsots:28013");

查看复制集状态,可以看到只有三个成员,原来的两个成员都已经成功去除了:

> rs.status()

rs1:PRIMARY> rs.remove("localhost:28013");rs.remove("localhost:28013");

{ "ok" : 1 }

rs1:PRIMARY> rs.conf() rs.conf()

{

        "_id" : "rs1",

        "version" : 3,

        "protocolVersion" : NumberLong(1),

        "members" : [

                {

                        "_id" : 0,

                        "host" : "localhost:28010",

                        "arbiterOnly" : false,

                        "buildIndexes" : true,

                        "hidden" : false,

                        "priority" : 1,

                        "tags" : {

 

                        },

                        "slaveDelay" : NumberLong(0),

                        "votes" : 1

                },

                {

                        "_id" : 1,

                        "host" : "localhost:28011",

                        "arbiterOnly" : false,

                        "buildIndexes" : true,

                        "hidden" : false,

                        "priority" : 1,

                        "tags" : {

 

                        },

                        "slaveDelay" : NumberLong(0),

                        "votes" : 1

                },

                {

                        "_id" : 2,

                        "host" : "localhost:28012",

                        "arbiterOnly" : false,

                        "buildIndexes" : true,

                        "hidden" : false,

                        "priority" : 1,

                        "tags" : {

 

                        },

                        "slaveDelay" : NumberLong(0),

                        "votes" : 1

                }

        ],

        "settings" : {

                "chainingAllowed" : true,

                "heartbeatIntervalMillis" : 2000,

                "heartbeatTimeoutSecs" : 10,

                "electionTimeoutMillis" : 10000,

                "getLastErrorModes" : {

 

                },

                "getLastErrorDefaults" : {

                        "w" : 1,

                        "wtimeout" : 0

                },

                "replicaSetId" : ObjectId("5791d785947160a5bdbd700b")

        }

}

rs1:PRIMARY>

 

本文由金沙澳门官网送注册58发布于关于计算机,转载请注明出处:充实和减弱mongodb复制聚焦的节点

关键词: