此次介绍的方法 都是运行在mongo shell 上的。
https://docs.mongodb.com/manual/reference/method/rs.add/#mongodb-method-rs.add
添加成员,mongo shell(客户端)必须连接到 主节点primary 才能运行此方法
rs.add(host, arbiterOnly)
Parameter | Type | Description |
---|---|---|
host | string or document | 新成员。如果是字符串:主机名:端口号。如果文档:则和复制集配置文档中的成员配置一样 |
arbiterOnly | boolean | 可选,只有 host 是字符串才生效。如果 true ,则新成员是仲裁者 |
host 文档 字段
{ _id: <int>, host: <string>, // required arbiterOnly: <boolean>, buildIndexes: <boolean>, hidden: <boolean>, priority: <number>, tags: <document>, slaveDelay: <int>, votes: <number> }
默认 mongod 和 mongos 讲 ip 绑定 到本机。所以只接受本机客户端的连接,而不接受远程客户端的连接。
可以 在 mongod 配置文件中 配置 net.bindIp
也可以直接在启动mongod 时 在命令行中 设置
#绑定本机 和 My-Example-Associated-Hostname mongod --bind_ip localhost,My-Example-Associated-Hostname
添加新成员时,新成员的优先级priority比现主节点高,会触发主节点选举,并且断开shell连接,还会返回一个错误。
新成员如果 priority 和 votes 都大于 0 ,那么在其刚刚加入副本集时,可以作为一投票成员,但不能成为一个 primary ,也不能对外提供读取服务,因为 数据还未同步。
这可能会导致,投票的大多数成员都在线,但不能确定 primary 。为避免这种情况,新添加的成员设置 priority :0 , votes :0。等该成员的状态state,变为 SECONDARY,再使用 rs.reconfig() 更新 priority 和 votes.
## 向新的复制集添加成员,默认priority: 1, votes: 1 rs.add( { host: "mongodbd4.example.net:27017" } ) #或者 rs.add( "mongodbd4.example.net:27017" ) ## 向已存在的复制集添加成员 #添加 priority 和 votes 都为 0 rs.add( { host: "mongodbd4.example.net:27017", priority: 0, votes: 0 } ) # 查看状态,确保新成员已经是 SECONDARY 状态 rs.status() # 在重新配置 var cfg = rs.conf(); cfg.members[n].priority = 1; // Substitute the correct array index for the new member cfg.members[n].votes = 1; // Substitute the correct array index for the new member rs.reconfig(cfg)
https://docs.mongodb.com/manual/reference/method/rs.addArb/
向已存在的复制集中添加 仲裁者 节点
rs.addArb(host)
host : 字符串,新成员的主机名:端口号
https://docs.mongodb.com/manual/reference/method/rs.conf/
返回当前复制集 的配置 对象
rs.conf() 无参数
rs.config() 是 rs.conf() 的别名
//返回对象 { _id: <string>, version: <int>, term: <int>, protocolVersion: <number>, writeConcernMajorityJournalDefault: <boolean>, configsvr: <boolean>, members: [ { _id: <int>, host: <string>, arbiterOnly: <boolean>, buildIndexes: <boolean>, hidden: <boolean>, priority: <number>, tags: <document>, slaveDelay: <int>, votes: <number> }, ... ], settings: { chainingAllowed : <boolean>, heartbeatIntervalMillis : <int>, heartbeatTimeoutSecs: <int>, electionTimeoutMillis : <int>, catchUpTimeoutMillis : <int>, getLastErrorModes : <document>, getLastErrorDefaults : <document>, replicaSetId: <ObjectId> } }
复制集配置文档详情:https://docs.mongodb.com/manual/reference/replica-configuration/
https://docs.mongodb.com/manual/reference/method/rs.freeze/
使当前复制集成员 在一段时间内,不能成员 primary
rs.freeze(seconds)
返回 复制集相关方法的帮助文本
https://docs.mongodb.com/manual/reference/method/rs.initiate/
初始化 复制集
rs.initiate(configuration)
初始化只能在一个mongod实例上运行。
参数
Parameter | Type | Description |
---|---|---|
configuration | document | 可选,复制集配置文档选项 |
rs.initiate( { _id: "myReplSet", version: 1, members: [ { _id: 0, host : "mongodb0.example.net:27017" }, { _id: 1, host : "mongodb1.example.net:27017" }, { _id: 2, host : "mongodb2.example.net:27017" } ] } )
https://docs.mongodb.com/manual/reference/method/rs.reconfig/#mongodb-method-rs.reconfig
重新配置现有复制集,覆盖现有复制集配置。要运行该方法,必须连接到复制集的主节点。
rs.reconfig( configuration, { options } )
rs.reconfig( <configuration>, // 配置项 { "force" : <boolean>, // 可选,指定true强制可用的复制集成员接受新配置。默认值为false "maxTimeMS" : <int> //可选, 指定处理rs.reconfig()操作的累积时间限制(以毫秒为单位)。缺省情况下,rs.reconfig()无限期地等待复制配置传播到大多数复制集成员。 } )
要重新配置现有的复制集,首先使用rs.conf()得到当前配置,根据需要修改配置文档,然后将修改后的文档传递给rs.reconfig()。
从MongoDB 4.4开始,rs.reconfig()默认允许一次添加或删除不超过1个投票成员。修改一个成员的 votes属性也会是投票成员的增减
原来的配置
{ "_id" : "rs0", "version" : 1, "protocolVersion" : NumberLong(1), "members" : [ { "_id" : 0, "host" : "mongodb0.example.net:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "slaveDelay" : NumberLong(0), "votes" : 1 }, { "_id" : 1, "host" : "mongodb1.example.net:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "slaveDelay" : NumberLong(0), "votes" : 1 }, { "_id" : 2, "host" : "mongodb2.example.net: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("58858acc1f5609ed986b641b") } }
重新配置
cfg = rs.conf(); cfg.members[1].priority = 2; rs.reconfig(cfg);
重新配置后
{ "_id" : "rs0", "version" : 2, "protocolVersion" : NumberLong(1), "members" : [ { "_id" : 0, "host" : "mongodb0.example.net:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "slaveDelay" : NumberLong(0), "votes" : 1 }, { "_id" : 1, "host" : "mongodb1.example.net:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 2, "tags" : { }, "slaveDelay" : NumberLong(0), "votes" : 1 }, { "_id" : 2, "host" : "mongodb2.example.net: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("58858acc1f5609ed986b641b") } }
https://docs.mongodb.com/manual/reference/method/rs.printReplicationInfo/
从主服务器的角度打印副本集状态的格式化报告。
rs.printReplicationInfo()
返回文本
configured oplog size: 192MB log length start to end: 65422secs (18.17hrs) oplog first event time: Mon Jun 23 2014 17:47:18 GMT-0400 (EDT) oplog last event time: Tue Jun 24 2014 11:57:40 GMT-0400 (EDT) now: Thu Jun 26 2014 14:24:39 GMT-0400 (EDT)