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

什么是 MongoDB 复制?

复制是指确保同一数据在多个 MongoDB 服务器上可用的过程。这有时是为了提高数据可用性而必需的。

因为如果您的主 MongoDB 服务器因任何原因关闭,将无法访问数据。但如果您以固定的间隔将数据复制到另一台服务器,即使主服务器发生故障,您也可以从另一台服务器访问数据。

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

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

如何在 MongoDB 中创建副本集 使用 rs.initiate() 添加第一个成员

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

假设在我们的示例中,我们有三台服务器,分别称为 ServerA、ServerB 和 ServerC。在此配置中,ServerA 将是我们的主服务器,ServerB 和 ServerC 将是我们的辅助服务器。下面的截图将对此有一个更好的了解。

Create Replica Set in MongoDB

以下是创建 MongoDB 副本集并向其中添加第一个成员需要遵循的步骤。

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

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

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

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

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 实例可以相互连接。假设您有三台服务器,分别称为 ServerA、ServerB 和 ServerC。从 Server A,发出以下两个命令
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 中的复制是指确保同一数据在多个 MongoDB 服务器上可用的过程。根据需求,可以将多个成员(MongoDB 实例)添加到副本集。