根据评论中的讨论这个答案 https://stackoverflow.com/a/51239633/330867,@kevinadi 建议我提出一个与他的评论相关的新问题:
您可以出于开发目的使用一个节点启动一个副本集。 [...] 请注意,这不是生产环境的推荐设置。
许多人正在为单独的 MongoDB 实例启动一个副本集,并且对于为什么不建议这样做有一个明确的答案,这对于将来的参考很有趣。
我希望 @kevinadi 能够回答这个问题,提供内存、CPU、性能方面的论点,以及不建议为 MongoDB 实例启动副本集的所有影响和原因。
副本集的主要功能是为 MongoDB 部署提供数据冗余和高可用性。也就是说,如果副本集中的主节点因任何原因发生故障,辅助节点将立即接管作为新的主节点(平均在约 10 秒内)。看复制 https://docs.mongodb.com/manual/replication/有关此主题的更多详细信息。
官方 MongoDB 驱动程序知道此副本集选举事件,并将提供对新主数据库的自动重新连接和操作重试。从应用程序的角度来看,数据库端没有发生任何事情。
使用具有多个辅助副本集的另一个优点是可以以滚动方式实现零停机升级/维护。为此,可以通过以下方式完成:使一个辅助节点脱机,对其进行维护,然后对其他辅助节点进行维护,最后关闭主节点并对其进行维护。同样,由于官方 MongoDB 驱动程序知道这些事件,因此从技术上讲,您可以对实时数据库进行维护,而对应用程序的影响非常小,并且不会造成停机。
与单一数据库服务器相比,这是一种不同的理念,其中只有一个真正的大型服务器。尽管整体部署有一定的优点(这又是一个不同的讨论:)),MongoDB 被设计为一个容错的分布式数据库。单一服务器的一个直接缺点是服务器必须始终保持 100% 运行,否则应用程序就会中断。副本集的设计是为了让您的应用程序可以拥有 100% 的正常运行时间,而不会给单个服务器带来 100% 正常运行时间的压力。
作为奖励,复制品集may能够通过将驱动程序设置为从辅助设备读取来提供读取可扩展性(写入必须始终转到主设备)。请注意,如果您想要进行二次读取,则应该进行仔细的设计,因为如果滥用,这可能会干扰高可用性方面。
总之,副本集可以提供:
- 高可用性和容错能力
- 无需停机维护
- 数据冗余以扩展读取
无需硬件 100% 可靠。这就是为什么在产品部署中强烈建议使用副本集的原因。
See 副本集部署架构 https://docs.mongodb.com/manual/core/replica-set-architectures/#consider-fault-tolerance有关更详细的副本集部署注意事项。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)