Mongodb副本集管理

Posted jiahaijiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mongodb副本集管理相关的知识,希望对你有一定的参考价值。

添加副本集节点

1、副本集最小架构

副本集上一次配置完成,架构如下P-S-A,两个节点提供数据的访问,一个节点为仲裁节点(不存储数据),也是副本集的最小架构。

2、正式环境建议使用:P-S-S架构

3、添加新节点

对于读多写少的业务,可以通过添加复制集节点来均衡读负载,新节点版本应和复制集成员保持一致。添加操作命令在Primary节点执行。数据库操作尽量在业务低峰期操作,如果数据量较大复制会很慢,如果oplog设置过小还会导致数据同步失败,修改oplog大小,也可以停掉一个secondary节点将数据复制到新节点,云主机可以做磁盘镜像方式,然后进行节点的添加,添加为隐藏节点程序不可见,待数据同步完成,在设置为可见节点设置为secondary节点。

命令:
rs.add( { host: "mongodb3.example.net:27017", arbiterOnly: true } ) //添加仲裁节点
rs.add( { host: "mongodbd4.example.net:27017", priority: 0 } ) //添加secondary节点,权重为0,

priority为0的节点,如果其它节点出现故障,该节点不能被选举成主节点(副本集节点个数尽量保持奇数)。

3.1、添加延迟备份节点

(如数据误删除,一小时内发现可以使用延迟节点进行恢复)

rs.add(
{
   "_id" : <num>,                   //指定一个id
   "host" : <hostname:port>,        //新节点的ip:端口
   "priority" : 0,                  //该节点权重为0
   "slaveDelay" : <seconds>,        //延迟复制,延迟Primary节点多少秒
   "hidden" : true                  //设置为隐藏节点(程序员不可见)
})

>rs.add({_id:5,host:\'10.0.1.9:27040\',"slaveDelay":3600,"priority":0,"hidden":true,"buildIndexes":true});
//添加新节点延迟复制1小时,权重为0,该节点程序不可见,索引也进行同步

3.2、修改现有复制集节点信息

cfg = rs.conf()
cfg.members[1].priority = 0   //权重设置为0 
cfg.members[1].hidden = true   //设置为隐藏节点
rs.reconfig(cfg)
test:PRIMARY> rs.conf()
{
    "_id" : "test",
    "version" : 1,
    "protocolVersion" : NumberLong(1),
    "members" : [
        {
            "_id" : 0,
            "host" : "192.168.5.74:27017",
            "arbiterOnly" : false,
            "buildIndexes" : true,
            "hidden" : false,
            "priority" : 90,
            "tags" : {
            },
            "slaveDelay" : NumberLong(0),
            "votes" : 1
        },
        {
            "_id" : 1,
            "host" : "192.168.5.49:27017",
            "arbiterOnly" : false,
            "buildIndexes" : true,
            "hidden" : false,
            "priority" : 90,
            "tags" : {

            },
            "slaveDelay" : NumberLong(0),
            "votes" : 1
        },
        {
            "_id" : 2,
            "host" : "192.168.5.3:27017",
            "arbiterOnly" : true,
            "buildIndexes" : true,
            "hidden" : false,
            "priority" : 0,
            "tags" : {

            },
            "slaveDelay" : NumberLong(0),
            "votes" : 1
        }
    ],

4、查看副本集复制是否有延迟

test:PRIMARY> db.printReplicationInfo()
configured oplog size:   23214.042724609375MB
log length start to end: 17722secs (4.92hrs)
oplog first event time:  Fri Aug 27 2021 11:41:14 GMT+0800 (CST)
oplog last event time:   Fri Aug 27 2021 16:36:36 GMT+0800 (CST)
now:                     Fri Aug 27 2021 16:36:38 GMT+0800 (CST)

test:PRIMARY> db.printSlaveReplicationInfo()
source: 192.168.5.74:27017
    syncedTo: Fri Aug 27 2021 16:38:36 GMT+0800 (CST)
    0 secs (0 hrs) behind the primary                   //和主节点同步没有延迟
test:PRIMARY>

5、更改同步源

新添加节点默认的同步源为Primary节点,也可以手动设置从其它节点进行数据同步,可以设置从secondary节点进行数据同步,连接到新添加的节点,

test:SECONDARY> use admin
test:SECONDARY> db.getMongo().setSlaveOk()  //默认不可读
mongo> db.adminCommand( { replSetSyncFrom: "192.168.5.49:27017" })  //设置新节点的同步源为

6、移除复制集节点

移除节点操作需要谨慎,如正常运行的节点需要移除,先进行节点stop在进行移除。

test:PRIMARY> rs.remove("192.168.5.49:27018")
{
    "ok" : 1,
    "operationTime" : Timestamp(1630056399, 1),
    "$clusterTime" : {
        "clusterTime" : Timestamp(1630056399, 1),
        "signature" : {
            "hash" : BinData(0,"58s85u53HFuEjB9vF2Ex1J/BDXk="),
            "keyId" : NumberLong("7000949962682925057")
        }
    }
}
test:PRIMARY>

以上是关于Mongodb副本集管理的主要内容,如果未能解决你的问题,请参考以下文章

window搭建mongodb副本集

MongoDB复制集部署和基本管理

MongoDB复制集及管理

MongoDB复制集选举原理管理

MongoDB数据库 : 管道,用户管理,副本集等

MongoDB 副本集的相关概念