为什么不建议在生产环境中将MongoDB实例作为副本集启动?

问题描述 投票:0回答:1

[this answer中的评论之后,@ kevinadi建议我打开一个有关他的评论的新问题:

出于开发目的,您可以使用一个节点启动副本集。 [...]请注意,这不是针对生产环境的推荐设置。

[许多人正在为MongoDB单独实例启动一个副本集,关于为什么不建议这样做的明确答案很有趣,以供将来参考。

我希望@kevinadi会回答它,提供有关内存,CPU,性能以及所有影响的原因以及不建议为MongoDB实例启动副本集的原因。

提前感谢!

mongodb replication
1个回答
0
投票

副本集的主要功能是为您的MongoDB部署提供数据冗余和高可用性。也就是说,如果副本集中的主节点由于任何原因发生故障,则辅助节点将立即接管新的主节点(平均在10秒钟之内)。有关此主题的更多详细信息,请参见Replication

官方MongoDB驱动程序知道此副本集选举事件,并将提供对新主数据库的自动重新连接和操作重试。从应用程序的角度来看,数据库方面什么也没发生。

使用具有多个第二副本的副本集的另一个优点是,滚动式升级/维护的停机时间为零的可能性。这可以通过以下方法完成:使一个辅助节点脱机,对其进行维护,然后对其他辅助节点进行维护,最后退出主节点并对其进行维护。同样,由于MongoDB官方驱动程序已知道这些事件,因此您可以从技术上对实时数据库进行维护,而影响很小,并且不会导致应用程序停机。

这与单片数据库服务器(只有一个真正的大服务器)的哲学不同。尽管在整体部署中有某些优点(再次讨论是另一回事:)),但MongoDB在设计时就将其设计为容错的分布式数据库。单个服务器的一个直接缺点是服务器必须始终保持100%正常运行,否则应用程序将被中断。设计副本集的目的是使您的应用程序可以具有100%的正常运行时间,而不会对必须具有100%的正常运行时间的单个服务器造成压力。

作为奖励,副本集may

能够通过将驱动程序设置为从次要对象读取来提供读取可伸缩性(写操作必须始终转到主要对象)。请注意,如果要进行二级读取,应该进行仔细的设计,因为如果滥用,这可能会干扰高可用性方面。

很抱歉,没有答案,但tldr可以提供副本集:

  • 高可用性和容错能力
  • 无停机维护
  • 用于扩展读取的数据冗余
  • 不需要硬件是100%可靠的。这就是为什么强烈建议在产品部署中使用副本集的原因。

请参见Replica Set Deployment Architectures以获取更多详细的副本集部署注意事项。

© www.soinside.com 2019 - 2024. All rights reserved.