MongoDB 复制:如何创建 MongoDB 副本集

什么是 MongoDB 复制?

复制是指确保相同数据在多个 Mongo DB 服务器上可用的过程。有时为了提高数据可用性,需要这样做。

因为如果你的主要 MongoDB 如果服务器因任何原因停机,您将无法访问数据。但是,如果您定期将数据复制到另一台服务器,即使主服务器发生故障,您也能够从另一台服务器访问数据。

复制的另一个目的是实现负载平衡。如果有许多用户连接到系统,而不是每个人都连接到一个系统,用户可以连接到多个服务器,以便平均分配负载。

In MongoDB, 多 MongoDB 服务器被分组到称为副本集的集合中。副本集将有一个主服务器,它将接受来自客户端的所有写入操作。在此之后添加到集合中的所有其他实例将被称为辅助实例,它们主要用于所有读取操作。

如何在 MongoDB 使用 rs.initiate() 添加第一个成员

如上一节所述,要启用复制,我们首先需要创建一个副本集 MongoDB 实例。

假设在我们的示例中,我们有 3 台服务器,分别称为 ServerA、ServerB 和 ServerC。在此配置中,ServerA 将成为我们的主服务器,而 ServerB 和 ServerC 将成为我们的辅助服务器。下面的屏幕截图将对此提供更好的理解。

在中创建副本集 MongoDB

以下是创建 MongoDB 副本集以及第一个成员添加到集合中。

步骤1) 确保所有 mongod.exe 实例都已添加

确保所有要添加到副本集的 mongod.exe 实例都安装在不同的服务器上。这是为了确保即使一台服务器发生故障,其他服务器仍可用,从而确保其他 MongoDB 将可用。

步骤2) 所有 mongo.exe 实例相互连接

确保所有 mongo.exe 实例都可以相互连接。从 ServerA 发出以下 2 个命令。

mongo –host ServerB –port 27017
mongo –host ServerC –port 27017

类似地,从其余服务器执行相同的操作。

步骤3) 启动第一个 mongod.exe 实例

使用 replSet 选项启动第一个 mongod.exe 实例。此选项为将成为此副本集一部分的所有服务器提供分组。

mongo –replSet "Replica1"

其中“Replica1”是您的副本集的名称。您可以选择任何有意义的名称作为您的副本集名称。

步骤4) 第一台服务器被添加到副本集

现在第一个服务器已添加到副本集,下一步是通过发出以下命令 rs.initiate() 来启动副本集。

步骤5) 验证副本集

通过发出命令 rs.conf() 来验证副本集,以确保副本设置正确。

副本集:使用 rs.add() 添加辅助节点

只需使用 rs.add 命令即可将辅助服务器添加到副本集。此命令接收辅助服务器的名称并将服务器添加到复制集中。

步骤1) 假设您有 ServerA、ServerB 和 ServerC,它们需要作为副本集的一部分,并且 ServerA 被定义为副本集中的主服务器。

要将 ServerB 和 ServerC 添加到副本集,请发出以下命令

rs.add("ServerB")
rs.add("ServerC")

副本集:使用 rs.remove() 重新配置或删除

要从配置集中删除服务器,我们需要使用“rs.remove”命令

步骤1) 首先关闭要删除的实例。可以通过从 mongo shell 发出 db.shutdownserver 命令来执行此操作。

步骤2) 连接到主服务器

步骤3) 使用 rs.remove 命令从副本集中删除所需的服务器。假设您有一个包含 ServerA、ServerB 和 ServerC 的副本集,并且您想从副本集中删除 ServerC,请发出以下命令

rs.remove("ServerC")

副本集故障排除

以下步骤与使用副本集时遇到问题时可以采用的排除故障的方法相同。

  1. 确保所有 mongo.exe 实例都可以相互连接。假设您有 3 个服务器,分别称为 ServerA、ServerB 和 ServerC。从服务器 A 发出以下 2 个命令
mongo –host ServerB –port 27017
mongo –host ServerC –port 27017
  1. 运行 rs.status 命令。此命令提供副本集的状态。默认情况下,每个成员将互相发送称为“心跳”消息的消息,这些消息仅表示服务器处于活动状态并正常工作。“status”命令获取这些消息的状态并显示副本集中的任何成员是否存在任何问题。
  2. 检查 Oplog 的大小 – Oplog 是 MongoDB 存储对 MongoDB 数据库。 MongoDB 然后使用此 Oplog 将写入复制到副本集中的其他成员。要检查 Oplog,请连接到所需的成员实例并运行 rs.printReplicationInfo 命令。此命令将显示日志的大小以及在日志文件变满之前它可以将事务保存在其日志文件中多长时间。

总结

复制于 MongoDB 是指确保相同数据在多个 Mongo DB 服务器上可用的过程。许多成员 (MongoDB 可以根据需求将多个实例添加到副本集中。