MongoDB 复制:逐步副本集综合指南

已发表: 2020-02-27

MongoDB 有很多功能。 而复制是其中一个突出的功能。 执行复制有很多优点。 使用 MongoDB,您可以处理包含数组对象和嵌入式数组的大型数据集。 当您使用数组对象和嵌入式数组时,您应该保持快速的数据处理速度。 阅读有关 MongoDB 真实世界用例的信息,了解它的重要性。

为了保持该过程的快速速度,您需要确保您的数据可用性仍然很高。 确保高数据可用性的一个好方法是执行复制。 复制还有助于进行备份并避免数据丢失。

在本文中,您将了解 MongoDB 中的复制是什么,它是如何工作的,以及如何做到这一点。 您还将了解在 MongoDB 中执行复制的优势,以及如果您在执行此任务时遇到任何错误,您可以如何修复它们。

让我们开始吧。

目录

什么是复制?

使用服务器时,您需要在多个 MongoDB 服务器上同步数据。 复制过程可以在这方面为您提供帮助。 它确保您将相同的数据存储在不同的服务器上。

复制增强了数据可用性。 数据丢失是组织的一个重要问题,复制可以帮助您减轻同样的担忧。 凭借高数据可用性和冗余性,即使您丢失了一台服务器,您的数据库也能保持安全。 如果唯一存储数据库的服务器出现故障,您将无法访问您的数据库。

复制可确保您不会遇到这些问题。 MongoDB 复制也是提高数据可访问性的有效方法。 拥有额外的数据副本总是有益的。 复制还可以减少服务器维护的停机时间。

您可以选择将整个服务器专用于报告、备份或灾难恢复。

MongoDB 中有很多复制的优点。 让我们找出来。

复制的好处

以下是复制成为一种普遍做法的一些原因:

  • 复制可帮助您在发生灾难时恢复数据。 您将拥有数据备份,您可以从中快速恢复丢失的文件。
  • 您的数据始终可用。 这意味着复制可确保您拥有 24×7 的可访问性。
  • 如果您定期执行复制,服务器维护的停机时间会减少。
  • 复制增强了您的阅读可扩展性。 拥有多个副本有助于扩展数据的读取。

除了我们在这里讨论的好处之外,复制也有一个缺点。 由于您将存储数据的副本,因此您需要有更多的存储空间。 虽然这不是一个重大问题,但值得注意。 您可能需要增加服务器的存储容量。

MongoDB 复制的工作原理

要执行复制,您需要使用 MongoDB 副本集。 一组托管相同数据的 mongod 实例称为副本集。 一个副本集包含一个主节点。 主节点接收所有的写操作。

一个副本集只有一个主节点。 其他实例从集合的主节点应用功能,包括辅助节点。 这样,它们都具有相同的数据集。 以下是 MongoDB 副本集的工作方式:

  • 一个副本集至少有 3 个节点
  • 副本集的一个节点是主节点。 组中存在的所有其他节点都是辅助节点。
  • 在副本集中,数据从主节点复制到辅助节点
  • 如果发生自动故障转移(或在维护期间),则会进行一次选举以确定主节点。 然后,节点选择一个新的主节点。

现在我们已经讨论了 MongoDB 中复制的基本概念,我们可以从它的过程开始。

第 1 步:添加第一个成员

您现在知道要执行复制,您需要副本集。 因此,MongoDB 中复制的第一步是创建其实例的副本集。 假设您有三台服务器,服务器 X、服务器 Y 和服务器 Z。在这三台服务器中,服务器 X 是主服务器,服务器 X 和 Y 是辅助服务器。

您已经知道从主服务器到辅助服务器的复制发生。 首先,您必须确保所有 mongod 实例(您将添加到副本集中)都安装在不同的服务器上。 这样,即使其中一个出现故障,您也将拥有多台服务器可用,因此,您将拥有其他 MongoDB 实例。

然后,您应该确保所有实例都可以连接。 从服务器 X 发出给定的命令:

mongo –host 服务器Y –port 27017

mongo –host ServerZ –port 27017

从服务器 X 发出它们后,从其他剩余的服务器发出它们。 现在使用 replSet 选项启动第一个实例。 replSet 选项为您提供了将参与此过程的所有服务器的集合。

mongo –replSet“副本A”

这里,ReplicaA 是副本集的名称。 您可以选择您喜欢的任何名称,但我们将在此示例中使用此术语。 在将一台服务器添加到副本集后,您必须发出命令 rs.initiate() 来启动副本集。 之后,您应该验证您的副本集。

为此,请发出命令 rs.conf()。 此步骤将帮助您确保您的副本设置最佳且没有任何问题。

阅读:MongoDB 面试问答

步骤 2:添加辅助服务器

添加主服务器后,我们现在可以专注于添加第二个服务器。 为此,您可以使用 rs.add 命令。 您必须在此命令中输入要添加的辅助服务器的名称。 它会自动添加它们。

在我们的示例中,我们有服务器 X、服务器 Y 和服务器 Z。在这三台服务器中,服务器 X 是副本集中的主要服务器。 我们需要将剩余的服务器添加为辅助服务器。 为此,我们将发出以下命令:

rs.add(“服务器Y”)

rs.add(“ServerZ”)

就是这样。 现在您已经成功地将两个辅助节点添加到您的副本集中。

第 3 步:重新配置(或删除)

建立和添加服务器只是硬币的一方面。 您可能还需要从配置组中删除服务器。 为此,您必须使用 rs.remove 命令。

在删除服务器之前,您需要将其关闭。 使用 mongo shell 中的 db.shutdownserver 命令关闭所需的服务器。 之后,连接到主服务器并使用 rs.remove 删除您需要删除的服务器。 此命令将从副本集中删除所需的服务器。

因此,如果您的副本集中有 Server X、Server Y 和 Server Z,您需要从其中删除 Server Z,您将使用以下命令:

rs.remove(“ServerZ”)

如何修复副本集错误

在 MongoDB 中执行复制时,您可能会遇到一些错误。 要解决这些错误,您应该借助以下方法:

  • 首先,确保所有 mongo 实例都已连接。 因此,如果您有三台服务器,即服务器 X、服务器 Y 和服务器 Z。在这三台服务器中,服务器 X 是主要服务器。 您将发出以下命令:

mongo -host 服务器Y -port 27017

mongo -host ServerZ -port 27017

运行上述两个命令将帮助您确保它们已连接。

现在,运行状态命令,即 rs.status。 rs.status 命令为您提供副本集的状态。 副本集的成员相互发送一些消息。 我们称这些消息为“心跳”。 我们称它们为心跳是因为这些消息表明该成员正在工作(即活着)。

rs.status 命令检查这些消息并告诉您副本集成员是否出现任何问题。

  • 您可以检查 oplog。 在 MongoDB 中,oplog 存储您在数据库上执行的写入历史记录。 MongoDB 在 Oplog 的帮助下将写入复制到副本集的所有其他成员。
  • 您可以在连接到所需成员后使用 rs.printReplicationinfo 命令检查 Oplog。 rs.printReplicationinfo 命令将向您显示 Oplog 的大小及其在满之前持有事务的限制。

就是这样。 现在您知道如何解决 MongoDB 副本集的问题了。 有了这些知识,您就可以开始在 MongoDB 中执行复制而不会遇到任何麻烦。

最后的想法

复制只是您可以在 MongoDB 中执行的众多操作之一。 学习使用这个数据库程序并不容易。 但是,通过适当的练习和资源,您可以很快熟练使用它。

如果您想了解更多关于 MongoDB 和其中存在的各种功能的信息,请访问我们的博客。 你会在那里找到很多有用的文章,可以帮助你扩展关于这个主题的知识。

如果您有兴趣了解有关大数据的更多信息,请查看我们的 PG 大数据软件开发专业文凭课程,该课程专为在职专业人士设计,提供 7 多个案例研究和项目,涵盖 14 种编程语言和工具,实用的动手操作研讨会,超过 400 小时的严格学习和顶级公司的就业帮助。

从世界顶级大学在线学习软件开发课程获得行政 PG 课程、高级证书课程或硕士课程,以加快您的职业生涯。

提升自己并为未来做好准备

超过 400 小时的学习时间。 14 种语言和工具。 IIIT-B 校友身份。
IIIT Bangalore 大数据高级证书课程