【问题标题】:Why starting a solo MongoDB instance as replica set is not recommended in production?为什么不建议在生产中启动一个单独的 MongoDB 实例作为副本集?
【发布时间】:2020-02-28 08:22:12
【问题描述】:

在this answer 的 cmets 讨论之后,@kevinadi 建议我提出一个与他的评论相关的新问题:

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

许多人正在为单独的 MongoDB 实例创建一个副本集,并且对为什么不推荐这样做有一个明确的答案,以供将来参考。

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

【问题讨论】:

    标签: mongodb replication


    【解决方案1】:

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

    官方 MongoDB 驱动程序知道此副本集选举事件,并将提供自动重新连接和操作重试到新的主节点。从应用程序的角度来看,数据库端没有发生任何事情。

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

    这是与单一数据库服务器不同的理念,后者只有一个真正的大型服务器。尽管单体部署有一定的优点(这又是一个不同的讨论:)),MongoDB 被设计为一个容错分布式数据库。单个服务器的一个直接缺点是服务器必须始终保持 100% 运行,否则应用程序将中断。设计了一个副本集,以便您的应用可以有 100% 的正常运行时间,而不会对必须有 100% 正常运行时间的单个服务器施加压力。

    作为奖励,副本集可能能够通过将驱动程序设置为从辅助节点读取(写入必须始终转到主节点)来提供读取可扩展性。请注意,如果您想要进行二次读取,则应该进行仔细的设计,因为如果被滥用,这可能会干扰高可用性方面。

    总之,一个副本集可以提供:

    • 高可用性和容错性
    • 无需停机维护
    • 数据冗余以扩展读取

    不需要硬件 100% 可靠。这就是为什么强烈建议在产品部署中使用副本集的原因。

    有关更详细的副本集部署注意事项,请参阅Replica Set Deployment Architectures。

    【讨论】:

    • 感谢您的详细回复,非常完美! :)
    猜你喜欢
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    相关资源
    最近更新 更多