温馨提示×

温馨提示×

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

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

mongodb中怎么实现主从复制

发布时间:2021-07-16 15:59:32 来源:亿速云 阅读:168 作者:Leah 栏目:云计算
# 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 性能对比

  • 主从复制:简单但缺乏自动容错
  • 副本集
    • 读写吞吐量高30%以上
    • 故障恢复时间缩短90%
    • 支持最大50个节点(主从复制通常不超过12个)

六、生产环境建议

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. 在特定场景下作为临时解决方案

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

向AI问一下细节

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

AI