MongoDB – 复制
MongoDB – 复制
复制是跨多个服务器同步数据的过程。复制通过不同数据库服务器上的多个数据副本提供冗余并提高数据可用性。复制保护数据库免受单个服务器的丢失。复制还允许您从硬件故障和服务中断中恢复。有了额外的数据副本,您可以将其中一份专门用于灾难恢复、报告或备份。
为什么要复制?
- 为了确保您的数据安全
- 数据的高 (24*7) 可用性
- 灾难恢复
- 无需停机维护(如备份、索引重建、压缩)
- 读取缩放(要读取的额外副本)
- 副本集对应用程序透明
MongoDB 中的复制如何工作
MongoDB 通过使用副本集来实现复制。副本集是一组托管相同数据集的mongod实例。在副本中,一个节点是接收所有写操作的主节点。所有其他实例(例如次要实例)应用来自主要实例的操作,以便它们具有相同的数据集。副本集只能有一个主节点。
-
副本集是一组两个或多个节点(一般最少需要 3 个节点)。
-
在副本集中,一个节点是主节点,其余节点是辅助节点。
-
所有数据从主节点复制到辅助节点。
-
在自动故障转移或维护时,为primary建立选举并选举一个新的primary节点。
-
故障节点恢复后,再次加入副本集,作为辅助节点。
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()。