MongoDB 复制

MongoDB 复制

复制是将数据同步到多个服务器的过程。通过多个数据库服务器上的数据副本,复制提供了冗余和增加数据可用性的功能。复制保护数据库免受单个服务器丢失的影响。复制还可以帮助您从硬件故障和服务中断中恢复。通过数据的额外副本,您可以将其中一个用于灾难恢复、报告或备份。

为什么要进行复制

  • 保护数据安全
  • 数据高可用性(24*7)
  • 灾难恢复
  • 无维护停机时间(如备份、索引重建、压缩)
  • 读扩展(可以从多个副本中读取)
  • 副本集对应用程序透明

MongoDB中的复制如何工作

MongoDB通过副本集实现复制。副本集是托管相同数据的一组 mongod 实例。在副本集中,一个节点是主节点,接收所有写操作。其他实例(如次要节点)从主节点应用操作,以便它们具有相同的数据集。副本集只能有一个主节点。

  • 副本集是由两个或多个节点组成的组(通常需要至少3个节点)。

  • 在副本集中,一个节点是主节点,其余节点是次要节点。

  • 所有数据都从主节点复制到次要节点。

  • 在自动故障转移或维护时,将选举主节点并选出一个新的主节点。

  • 故障节点恢复后,它将再次加入副本集,并作为次要节点工作。

下图是MongoDB复制的典型示意图,其中客户端应用程序始终与主节点交互,然后主节点将数据复制到次要节点。

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()

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程