- MongoDB 教程
- MongoDB - 首页
- MongoDB - 概述
- MongoDB - 优势
- MongoDB - 环境
- MongoDB - 数据建模
- MongoDB - 创建数据库
- MongoDB - 删除数据库
- MongoDB - 创建集合
- MongoDB - 删除集合
- MongoDB - 数据类型
- MongoDB - 插入文档
- MongoDB - 查询文档
- MongoDB - 更新文档
- MongoDB - 删除文档
- MongoDB - 投影
- MongoDB - 限制记录
- MongoDB - 排序记录
- MongoDB - 索引
- MongoDB - 聚合
- MongoDB - 复制
- MongoDB - 分片
- MongoDB - 创建备份
- MongoDB - 部署
- MongoDB - Java
- MongoDB - PHP
- 高级 MongoDB
- MongoDB - 关系
- MongoDB - 数据库引用
- MongoDB - 覆盖查询
- MongoDB - 分析查询
- MongoDB - 原子操作
- MongoDB - 高级索引
- MongoDB - 索引限制
- MongoDB - ObjectId
- MongoDB - Map Reduce
- MongoDB - 文本搜索
- MongoDB - 正则表达式
- 使用 Rockmongo
- MongoDB - GridFS
- MongoDB - 封顶集合
- 自动递增序列
- MongoDB 有用资源
- MongoDB - 问答
- MongoDB - 快速指南
- MongoDB - 有用资源
- MongoDB - 讨论
MongoDB - 复制
复制是指跨多个服务器同步数据的过程。复制提供冗余并通过在不同数据库服务器上复制多个数据副本提高数据可用性。复制保护数据库免受单个服务器丢失的影响。复制还允许您从硬件故障和服务中断中恢复。使用数据的其他副本,您可以将一个专用于灾难恢复、报告或备份。
为什么要复制?
- 为了确保您的数据安全
- 高 (24*7) 数据可用性
- 灾难恢复
- 维护(如备份、索引重建、压缩)无停机时间
- 读取扩展(额外的读取副本)
- 副本集对应用程序透明
MongoDB 中的复制工作原理
MongoDB 通过使用副本集实现复制。副本集是一组托管相同数据集的mongod实例。在一个副本中,一个节点是主节点,它接收所有写操作。所有其他实例(例如辅助节点)都应用来自主节点的操作,以便它们具有相同的数据集。副本集只能有一个主节点。
副本集是由两个或多个节点组成的一组(通常至少需要 3 个节点)。
在一个副本集中,一个节点是主节点,其余节点是辅助节点。
所有数据都从主节点复制到辅助节点。
在自动故障转移或维护时,会为主要节点进行选举,并选举出一个新的主要节点。
故障节点恢复后,它将再次加入副本集并作为辅助节点工作。
MongoDB 复制的典型图示如下所示,其中客户端应用程序始终与主节点交互,然后主节点将数据复制到辅助节点。
副本集功能
- N 个节点的集群
- 任何一个节点都可以为主节点
- 所有写操作都转到主节点
- 自动故障转移
- 自动恢复
- 主节点的一致性选举
设置副本集
在本教程中,我们将把独立的 MongoDB 实例转换为副本集。要转换为副本集,请执行以下步骤:
关闭已运行的 MongoDB 服务器。
通过指定 --replSet 选项启动 MongoDB 服务器。以下是 --replSet 的基本语法:
mongod --port "PORT" --dbpath "YOUR_DB_DATA_PATH" --replSet "REPLICA_SET_INSTANCE_NAME"
示例
mongod --port 27017 --dbpath "D:\set up\mongodb\data" --replSet rs0
它将在端口 27017 上启动名为 rs0 的 mongod 实例。
现在启动命令提示符并连接到此 mongod 实例。
在 Mongo 客户端中,发出命令rs.initiate()以启动一个新的副本集。
要检查副本集配置,请发出命令rs.conf()。要检查副本集的状态,请发出命令rs.status()。
向副本集添加成员
要向副本集添加成员,请在多台机器上启动 mongod 实例。现在启动一个 mongo 客户端并发出命令rs.add()。
语法
rs.add()命令的基本语法如下:
>rs.add(HOST_NAME:PORT)
示例
假设您的 mongod 实例名称为mongod1.net,并且它在端口27017上运行。要将此实例添加到副本集中,请在 Mongo 客户端中发出命令rs.add()。
>rs.add("mongod1.net:27017") >
只有在连接到主节点时才能将 mongod 实例添加到副本集中。要检查您是否已连接到主节点,请在 mongo 客户端中发出命令db.isMaster()。