千家信息网

大数据 MongoDB 复制集管理

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,MongoDB 复制集MongoDB复制是将数据同步在多个服务器的过程。复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。复制还允许您从硬件故障和服
千家信息网最后更新 2026年11月01日大数据 MongoDB 复制集管理

MongoDB 复制集

  • MongoDB复制是将数据同步在多个服务器的过程。

  • 复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。

  • 复制还允许您从硬件故障和服务中断中恢复数据。

复制集的优势

  • 保障数据的安全性
  • 数据高可用性 (24*7)
  • 灾难恢复
  • 无需停机维护(如备份,重建索引,压缩)
  • 分布式读取数据

    MongoDB复制原理

    mongodb的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。

mongodb各个节点常见的搭配方式为:一主一从、一主多从。

主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。

MongoDB复制结构图如下所示:

以上结构图中,客户端从主节点读取数据,在客户端写入数据到主节点时, 主节点与从节点进行数据交互保障数据的一致性。

复制集集特征:

  • N 个节点的集群
  • 任何节点可作为主节点
  • 所有写入操作都在主节点上
  • 自动故障转移
  • 自动恢复

安装 MongoDB (tar安装) :

  • 1.安装创建多实例 :

tar -zxvf mongodb-linux-x86_64-3.2.1.tgz -C /usr/local/cd /usr/local/mv mongodb-linux-x86_64-3.2.1/ mongodb      #重命名mkdir -p /data/mongodb/mongodb{1,2,3,4}     #创建数据目录mkdir -p /data/logstouch /data/logs/mongodb{1,2,3,4}.log       #创建日志文件cd /data/logs/chmod 777 *.log      #赋予权限cd /usr/local/mongodb/binvim mongodb1.confport=27017dbpath=/data/mongodb/mongodb1logpath=/data/logs/mongodb1.loglogappend=truefork=truemaxConns=5000storageEngine=mmapv1replSet=test     #复制集名称------------------------------------------------------------------------------------#下面是yum安装时修改、添加的replication:           #去注释  replSetName: test   #添加复制集名称
ln -s /usr/local/mongodb/bin/mongod /usr/bin/  #把mongodb常用的命令添加到系统命令中ln -s /usr/local/mongodb/bin/mongo /usr/bin/
  • 2.开启多实例、初始化配置复制集 :

[root@localhost bin]# mongo> cfg={"_id":"test","members":[{"_id":0,"host":"192.168.217.129:27017"},{"_id":1,"host":"192.168.217.129:27018"},{"_id":2,"host":"192.168.217.129:27019"}]}#配置复制集 ,注意复制集的名称要一致{    "_id" : "test",    "members" : [        {            "_id" : 0,            "host" : "192.168.217.129:27017"        },        {            "_id" : 1,            "host" : "192.168.217.129:27018"        },        {            "_id" : 2,            "host" : "192.168.217.129:27019"        }    ]}> rs.initiate(cfg)   #初始化配置时保证从节点没有数据{ "ok" : 1 }test:PRIMARY> rs.status()    #查看复制集的完整状态{     "set" : "test",        .......        {            "_id" : 0,            "name" : "192.168.217.129:27017",            "health" : 1,            "state" : 1,            "stateStr" : "PRIMARY",       #27017 端口作为主节点            "uptime" : 1234,            "optime" : {                "ts" : Timestamp(1531961046, 1),                "t" : NumberLong(1)            },            ......        },        {            "_id" : 1,            "name" : "192.168.217.129:27018",            "health" : 1,            "state" : 2,            "stateStr" : "SECONDARY",    #从节点            "uptime" : 49,            "optime" : {                "ts" : Timestamp(1531961046, 1),                "t" : NumberLong(1)            },            ......        },        {            "_id" : 2,            "name" : "192.168.217.129:27019",            "health" : 1,            "state" : 2,            "stateStr" : "SECONDARY",   #从节点            "uptime" : 49,            "optime" : {                "ts" : Timestamp(1531961046, 1),                "t" : NumberLong(1)            },            .......        }    ],    "ok" : 1}
  • 3.添加和删除节点 :

test:PRIMARY> rs.add("192.168.217.129:27020")     #添加节点{ "ok" : 1 }test:PRIMARY> rs.status()    ........            "_id" : 3,            "name" : "192.168.217.129:27020",            "health" : 1,            "state" : 2,            "stateStr" : "SECONDARY",    ........test:PRIMARY> rs.remove("192.168.217.129:27020")  #删除节点{ "ok" : 1 }test:PRIMARY> rs.status().........
  • 4. 模拟故障,查看主节点是否自动切换 :

[root@localhost bin]# mongod -f mongodb1.conf --shutdown   #关闭主节点端口killing process with pid: 3552[root@localhost bin]# mongo --port 27018  test:SECONDARY> rs.status(){    "set" : "test",    .......        {            "_id" : 0,            "name" : "192.168.217.129:27017",               "health" : 0,            "state" : 8,            "stateStr" : "(not reachable/healthy)",              "uptime" : 0,            "optime" : {            .......        {            "_id" : 1,            "name" : "192.168.217.129:27018",            "health" : 1,            "state" : 2,            "stateStr" : "SECONDARY",            "uptime" : 1811,            .......        {            "_id" : 2,            "name" : "192.168.217.129:27019",   #自动切换主节点            "health" : 1,            "state" : 1,            "stateStr" : "PRIMARY",            "uptime" : 712,            ......        }    ],    "ok" : 1}
  • 5. 手动切换主节点 :

[root@localhost bin]# mongo --port 27019  test:PRIMARY> rs.freeze(30)        #暂停30s不参与选举{ "ok" : 1 }test:PRIMARY> rs.stepDown(60,30)  #交出主节点位置,维持从节点状态不少于60秒,等待30秒使主节点和从节点日志同步test:SECONDARY> rs.status()......
  • 6. 允许从节点读取数据 :

test:SECONDARY> show dbs   #2018-07-19T09:04:34.898+0800 E QUERY    [thread1] Error: listDatabases failed:{ "ok" : 0, "errmsg" : "not master and slaveOk=false", "code" : 13435 } :_getErrorWithCode@src/mongo/shell/utils.js:23:13Mongo.prototype.getDBs@src/mongo/shell/mongo.js:53:1shellHelper.show@src/mongo/shell/utils.js:700:19shellHelper@src/mongo/shell/utils.js:594:15@(shellhelp2):1:1test:SECONDARY> rs.slaveOk()    #允许默认从节点读取数据test:SECONDARY> show dbslocal  1.078GB
  • 7. 更改 oplog 大小 :

test:PRIMARY> use localswitched to db localtest:PRIMARY> rs.printReplicationInfo()  #查看日志文件能够使用的大小 默认oplog大小会占用64位实例5%的可用磁盘空间configured oplog size:   95.37109375MBlog length start to end: 1103secs (0.31hrs)oplog first event time:  Thu Jul 19 2018 08:43:55 GMT+0800 (CST)oplog last event time:   Thu Jul 19 2018 09:02:18 GMT+0800 (CST)now:                     Thu Jul 19 2018 09:20:08 GMT+0800 (CST)test:PRIMARY> db.runCommand({"convertToCapped":"oplog.rs","size":10000000000}) #修改  单位:B{ "ok" : 1 }test:PRIMARY> rs.printReplicationInfo()configured oplog size:   9536.746032714844MBlog length start to end: 1103secs (0.31hrs)oplog first event time:  Thu Jul 19 2018 08:43:55 GMT+0800 (CST)oplog last event time:   Thu Jul 19 2018 09:02:18 GMT+0800 (CST)now:                     Thu Jul 19 2018 09:20:24 GMT+0800 (CST)test:PRIMARY> 
节点 数据 一致 名称 大小 实例 客户 客户端 故障 日志 保证 切换 服务 配置 安全 副本 可用性 命令 备份 多个 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 百单网互联网科技有限公司怎么样 美国互联网保险保险科技 新华互联网科技学院 网络科技有限互联网 互联网科技作文 宜安科技 互联网金融 狮子座互联网科技有限公司 壕鑫互联网络科技 睿民互联网科技 互联网科技公司做什么 哈尔滨新华互联网科技 互联网科技有哪些公司 语蝶互联网科技有限公司 互联网与医疗科技 国大互联网教育科技有限公司薪资 南京一网一红互联网科技有限公司 互联网科技企业商标注意事项 互联网科技创新创业项目 黑龙江互联网科技公司 瑞安市蟠桃会互联网科技有限公司 互联网络科技 互联网科技活动banner 深圳恒合互联网络科技有限公司 顺网科技2021年互联网排名 科技赋能互联网健康 中盈科技互联网信息有限公司 晓花互联网科技有限公司网址 华夏恒生互联网科技013171 沐思想互联网科技有限公司 中国主要互联网科技公司
0