您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 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
参数 | 作用 | 示例值 |
---|---|---|
–master | 指定为主节点 | 无参数值 |
–slave | 指定为从节点 | 无参数值 |
–source | 从节点需要指定的主节点地址 | 127.0.0.1:27017 |
–oplogSize | 主节点oplog大小(MB) | 100 |
–slaveDelay | 从节点延迟同步时间(秒) | 3600 |
// 在主节点插入测试数据
use test
db.products.insert({name: "Laptop", price: 999})
// 在从节点查询(需先允许读操作)
rs.slaveOk()
db.products.find()
// 查看主节点oplog状态
db.printReplicationInfo()
// 查看从节点同步状态
db.printSlaveReplicationInfo()
// 查看当前节点角色
db.isMaster()
# 手动提升从节点为主节点
mongod --dbpath /data/slave --port 27018 --master
# 重新同步数据
mongod --dbpath /data/slave --port 27018 --slave --autoresync
特性 | 主从复制 | 副本集 |
---|---|---|
节点角色 | 静态配置 | 自动选举 |
故障转移 | 手动 | 自动(通常30秒内) |
写关注(Write Concern) | 不支持 | 支持多种级别 |
读偏好(Read Preference) | 需手动设置 | 内置支持 |
# 迁移步骤示例
1. 配置至少3个节点的副本集
2. 使用mongodump/mongorestore迁移数据
3. 更新应用连接字符串
// 检查主节点负载
db.currentOp()
// 检查网络延迟
db.runCommand({ping: 1})
// 查看oplog时间差
use local
db.oplog.rs.find().sort({$natural: -1}).limit(1)
# 启动时添加限流参数
mongod --slave --source master:27017 --slaveDelay 60 --rateLimit 10
虽然MongoDB主从复制已被副本集技术取代,但理解其原理仍有助于: 1. 维护历史遗留系统 2. 深入理解分布式数据同步机制 3. 在特定场景下作为临时解决方案
注意:新项目强烈建议使用副本集,它提供更完善的自动故障转移和读写扩展能力。 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。