mongodb中怎么实现主从复制

发布时间:2021-07-16 15:59:32 作者:Leah
来源:亿速云 阅读:149
# MongoDB中怎么实现主从复制

## 一、主从复制概述

### 1.1 什么是主从复制
主从复制(Master-Slave Replication)是MongoDB早期版本提供的数据冗余和高可用性解决方案。其核心原理是通过**操作日志(oplog)**的传递,将主节点(Primary)的数据变更自动同步到一个或多个从节点(Secondary)。

### 1.2 主从复制的特点
- **单向同步**:数据只能从主节点流向从节点
- **读写分离**:主节点处理写操作,从节点可处理读请求
- **故障恢复**:主节点宕机后需手动切换从节点为主节点
- **MongoDB 4.0+弃用**:官方推荐使用副本集(Replica Set)替代

## 二、主从复制架构原理

### 2.1 核心组件
| 组件       | 作用                                                                 |
|------------|----------------------------------------------------------------------|
| 主节点     | 接收所有写操作,记录oplog                                           |
| 从节点     | 定期轮询主节点的oplog并重放操作                                     |
| Oplog      | 固定大小的 capped collection,记录所有修改数据的操作                 |
| 同步线程   | 每个从节点维护独立的同步线程                                        |

### 2.2 数据同步流程
1. 从节点初始化时执行全量同步
2. 后续通过持续追踪oplog进行增量同步
3. 从节点默认以`slaveDelay`参数控制延迟同步(防误操作)

## 三、主从复制配置实战

### 3.1 环境准备
```bash
# 创建数据目录
mkdir -p /data/{master,slave}

# 启动主节点(端口27017)
mongod --dbpath /data/master --port 27017 --master --oplogSize 100

# 启动从节点(端口27018)
mongod --dbpath /data/slave --port 27018 --slave --source 127.0.0.1:27017

3.2 关键参数说明

参数 作用 示例值
–master 指定为主节点 无参数值
–slave 指定为从节点 无参数值
–source 从节点需要指定的主节点地址 127.0.0.1:27017
–oplogSize 主节点oplog大小(MB) 100
–slaveDelay 从节点延迟同步时间(秒) 3600

3.3 验证复制状态

// 在主节点插入测试数据
use test
db.products.insert({name: "Laptop", price: 999})

// 在从节点查询(需先允许读操作)
rs.slaveOk()
db.products.find()

四、主从复制管理

4.1 监控命令

// 查看主节点oplog状态
db.printReplicationInfo()

// 查看从节点同步状态
db.printSlaveReplicationInfo()

// 查看当前节点角色
db.isMaster()

4.2 故障处理场景

场景1:主节点宕机

# 手动提升从节点为主节点
mongod --dbpath /data/slave --port 27018 --master

场景2:从节点落后过多

# 重新同步数据
mongod --dbpath /data/slave --port 27018 --slave --autoresync

五、主从复制与副本集对比

5.1 架构差异

特性 主从复制 副本集
节点角色 静态配置 自动选举
故障转移 手动 自动(通常30秒内)
写关注(Write Concern) 不支持 支持多种级别
读偏好(Read Preference) 需手动设置 内置支持

5.2 性能对比

六、生产环境建议

6.1 主从复制适用场景

  1. MongoDB 3.6及以下版本的历史系统
  2. 需要严格单向同步的跨机房部署
  3. 特定合规要求的延迟数据副本

6.2 升级到副本集

# 迁移步骤示例
1. 配置至少3个节点的副本集
2. 使用mongodump/mongorestore迁移数据
3. 更新应用连接字符串

七、常见问题解答

Q1:主从复制延迟怎么排查?

// 检查主节点负载
db.currentOp()

// 检查网络延迟
db.runCommand({ping: 1})

// 查看oplog时间差
use local
db.oplog.rs.find().sort({$natural: -1}).limit(1)

Q2:如何限制从节点的同步速度?

# 启动时添加限流参数
mongod --slave --source master:27017 --slaveDelay 60 --rateLimit 10

八、总结

虽然MongoDB主从复制已被副本集技术取代,但理解其原理仍有助于: 1. 维护历史遗留系统 2. 深入理解分布式数据同步机制 3. 在特定场景下作为临时解决方案

注意:新项目强烈建议使用副本集,它提供更完善的自动故障转移和读写扩展能力。 “`

推荐阅读:
  1. MongoDB 主从复制集搭建
  2. MongoDB复制集 (即主从复制)

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mongodb

上一篇:Delphi中如何利用StringList对象来记录动态生成的对象

下一篇:Web开发中客户端跳转与服务器端跳转有什么区别

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》