Mongodb 副本集的节点详细操作

时间:2022-03-10 19:52:02

副本集操作

官方文档:https://docs.mongodb.com/v3.2/reference/method/js-replication/

1 rs.add()
{
_id: <int>,
host: <string>, // required
arbiterOnly: <boolean>,
buildIndexes: <boolean>,
hidden: <boolean>,
priority: <number>,
tags: <document>,
slaveDelay: <int>,
votes: <number>
}

Add a Secondary to a New Replica Set //添加一个新节点到新的副本集
rs.add( { host: "mongodbd4.example.net:27017" } )
rs.add( "mongodbd4.example.net:27017" )

Add a Secondary to an Existing Replica Set//添加一个新节点到已经存在的副本集
rs.add( { host: "mongodbd4.example.net:27017", priority: 0, votes: 0 } )
rs.status()

Reconfigure the replica set to update the votes and priority of the new member //配置副本集的投票属性
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)

WARNING //使用rs.reconfig()命令后,当前的主节点会down掉并发生选举
The rs.reconfig() shell method can force the current primary to step down, which causes an election. When the primary steps down,
the mongod closes all client connections. While this typically takes 10-20 seconds, try to make these changes during scheduled maintenance periods.
Avoid reconfiguring replica sets that contain members of different MongoDB versions as validation rules may differ across MongoDB versions.

Add a Priority 0 Member to a Replica Set //加入新节点,优先级为0
rs.add( { host: "mongodbd4.example.net:27017", priority: 0 } )
Add an Arbiter to a Replica Set //加入仲裁节点
rs.add( { host: "10.15.7.114:28003", arbiterOnly: true } )
添加备份节点
hidden(成员用于支持专用功能):这样设置后此机器在读写中都不可见,并且不会被选举为Primary,但是可以投票,一般用于备份数据
MyMongo:PRIMARY> rs.remove("10.15.7.114:28005"); #删除原来的第二个仲裁节点
MyMongo:PRIMARY> rs.add({host:"10.15.7.114:28005","priority":0,"hidden":true}) #设置为备份节点

添加延迟节点
Delayed(成员用于支持专用功能):可以指定一个时间延迟从primary节点同步数据。主要用于处理误删除数据马上同步到从节点导致的不一致问题
MyMongo:PRIMARY> rs.add({host:"10.15.7.114:28005","priority":0,"hidden":true,"slaveDelay":60})

Secondary-Only:不能成为primary节点,只能作为secondary副本节点,防止一些性能不高的节点成为主节点。
Non-Voting:没有选举权的secondary节点,纯粹的备份数据节点

2 rs.addArb()
rs.addArb(host) Adds a new arbiter to an existing replica set
WARNING//一般来说,避免在一个副本集中部署多个仲裁节点
In general, avoid deploying more than one arbiter per replica set

3 rs.conf()
//查看副本集配置信息
Returns a document that contains the current replica set configuration.
rs.config()
rs.config() is an alias of rs.conf().

4 rs.freeze()
rs.freeze(seconds)
//是当前副本集在指定时间内不能成为主节点(阻止选举)
Makes the current replica set member ineligible to become primary for the period specified

5 rs.help()
//返回副本集的一些函数
Returns a basic help text for all of the replication related shell functions.
MyMongo:PRIMARY> 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.reconfig(cfg) updates the configuration of a running replica set with cfg (disconnects)
rs.add(hostportstr) add a new member to the set with default attributes (disconnects)
rs.add(membercfgobj) add a new member to the set with extra attributes (disconnects)
rs.addArb(hostportstr) add a new member which is arbiterOnly:true (disconnects)
rs.stepDown([stepdownSecs, catchUpSecs]) step down as primary (disconnects)
rs.syncFrom(hostportstr) make a secondary sync from the given member
rs.freeze(secs) make a node ineligible to become primary for the time specified
rs.remove(hostportstr) remove a host from the replica set (disconnects)
rs.slaveOk() allow queries on secondary nodes

rs.printReplicationInfo() check oplog size and time range
rs.printSlaveReplicationInfo() check replica set members and replication lag
db.isMaster() check who is primary

reconfiguration helpers disconnect from the database so the shell will display
an error, even if the command succeeds.

6 rs.initiate()
rs.initiate(configuration) //初始化副本集
Initiates a replica set. Optionally, the method can take an argument in the form of a document that holds the configuration of a replica set.
Eg
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" }
]
}
)

7 rs.printReplicationInfo()
//打印副本集的信息,这里为oplog日志
The following example is a sample output from the rs.printReplicationInfo() method run on the primary:
MyMongo:PRIMARY> rs.printReplicationInfo()
configured oplog size: 1024MB
log length start to end: 14939secs (4.15hrs)
oplog first event time: Thu Oct 11 2018 03:45:19 GMT+0800 (CST)
oplog last event time: Thu Oct 11 2018 07:54:18 GMT+0800 (CST)
now: Thu Oct 11 2018 07:54:23 GMT+0800 (CST)
MyMongo:PRIMARY> db.getReplicationInfo
//在slave上运行,命令为db.printSlaveReplicationInfo()
If run on a slave of a master-slave replication, the method calls db.printSlaveReplicationInfo().

8 rs.printSlaveReplicationInfo()
//返回slave与primary的延时
Returns a formatted report of the status of a replica set from the perspective of the secondary member of the set.
MyMongo:SECONDARY> rs.printSlaveReplicationInfo()
source: 10.15.7.114:28002
syncedTo: Thu Oct 11 2018 08:00:08 GMT+0800 (CST)
0 secs (0 hrs) behind the primary

9 rs.reconfig()
rs.reconfig(configuration, force) //{ force: true }
//重新配置已经存在的副本集,重写副本集配置文件,必须在primary节点上运行
Reconfigures an existing replica set, overwriting the existing replica set configuration. To run the method, you must connect to the primary of the replica set.
//重新配置副本集,必须先rs.conf(),在运行新的副本集配置,然后rs.reconfig()
To reconfigure an existing replica set, first retrieve the current configuration with rs.conf(), modify the configuration
document as needed, and then pass the modified document to rs.reconfig().

WARNING//避免在同一个副本集中,出现不同mongodb的版本
Avoid reconfiguring replica sets that contain members of different MongoDB versions as validation rules may differ across MongoDB versions.
//在执行命令rs.reconfig(),primary库会set down,进行重新选举
{ force: true }
WARNING//在执行rs.reconfig()加上force=ture参数,可导致提交的写操作回滚,要小心使用
Using rs.reconfig() with { force: true } can lead to rollback of committed writes. Exercise caution when using this option
Member Priority and Votes
Changed in version 3.2.
Members with priority greater than 0 cannot have 0 votes.
Non-voting members must have priority of 0.
##修改1为主节点,进行重新选举
cfg = rs.conf();
cfg.members[1].priority = 2;
rs.reconfig(cfg);

10 rs.remove()
rs.remove(hostname) //移除副本集成员
MyMongo:PRIMARY> rs.remove("10.15.7.114:28003");

11 rs.slaveOk()
MyMongo:SECONDARY> db.getMongo().setSlaveOk()
//允许在secondry节点上进行读取操作
This allows the current connection to allow read operations to run on secondary members.

12 rs.status()
//返回副本集的当前状态信息
This output reflects the current status of the replica set, using data derived from the heartbeat packets sent by the other members of the replica set.

13 rs.stepDown()
rs.stepDown(stepDownSecs, secondaryCatchUpPeriodSecs)
//此操作将会把primary节点变为secondry,并落后新成为primary节点%秒
Triggers the primary of the replica set to become a secondary. This in turn triggers an election for primary.
The method steps down the primary for a specified number of seconds; during this period, the stepdown member is ineligible from becoming primary.
主节点降为secondary
MyMongo:PRIMARY> use admin
MyMongo:PRIMARY> rs.stepDown(60)#单位为 秒
secondaryCatchUpPeriodSecs //Optional. The number of seconds that mongod will wait for an electable secondary to catch up to the primary.

14 rs.syncFrom()
//临时指定成员要同步的目标
which allows administrators to temporarily override the default sync target for the current member.
Specify the name of the member you want to replicate from in the form of [hostname]:[port].
rs.syncFrom("myHost:27017");

PRIMARY> rs.status().members[1].MyMongo