【问题标题】:Standalone MongoDB installation for Production用于生产的独立 MongoDB 安装
【发布时间】:2021-01-05 11:52:02
【问题描述】:

我想将MongoDB部署到有2个节点的Kubernetes集群,以后没有机会再添加一个节点了。

我想将 MongoDB 部署为独立的,因为两个节点都可以通过 NFS 访问相同的磁盘空间,而且我对复制或高可用性没有要求。但是,在 MongoDB 文档中,明确指出独立部署不适合生产环境。

MongoDB Deploy Standalone

您可以部署一个独立的 MongoDB 实例供 Cloud Manager 管理。使用独立实例进行测试和开发。不要将这些部署用于生产系统,因为它们缺乏复制和高可用性。

我可以面对什么样的缺点?我应该部署为带有仲裁实例的副本集吗?如果是,为什么?

【问题讨论】:

  • 请记住,kubernetes(无状态微服务编排器)不太适合有状态应用程序(数据库),尤其是在生产环境中。当然,如果没有其他选项,您可以通过 statefullset 部署它,但是您需要注意很多自定义,使编排有点过于复杂。

标签: mongodb kubernetes production replicaset


【解决方案1】:

当然,您可以为生产部署一个独立的 MongoDB。但是如果这个节点发生故障,那么您的应用程序将不再可用。如果您对可用性没有任何要求,请选择独立的 MongoDB。

但是,运行 2 个访问同一物理磁盘(即dbPath)的 MongoDB 服务将不起作用。每个 MongoDB 实例都需要有一个专用的数据文件夹。

在你的情况下,我建议Replica Set。来自一个节点的所有数据都将复制到另一个节点。如果一个节点发生故障,则应用程序进入“只读”模式。

您可以在主节点上部署仲裁器实例。如果辅助节点出现故障,则应用程序仍然完全可用。

【讨论】:

  • 任何节点都有可能随时失效,没有所谓的主节点或高可用节点。所以不能保证我应该在哪里部署仲裁器。部署 2 个仲裁器可能是一种解决方案,但也不是首选。似乎使用比例为 1 的 Deployment 是最合适的解决方案。然后,我将一次有1个实例访问dbPath ,并且可以在工作节点失败时编排到其他节点。
  • 在副本集中,大部分节点必须启动。有两个成员,如果一个成员倒下,你就没有任何多数。您必须在第三台主机上部署仲裁器。
【解决方案2】:

始终建议部署为 replicaSet 用于生产,但是如果您作为独立部署并且有 2 个 kubernetes 节点,kubernetes 可以确保在任何可用节点中始终有 1 个运行实例连接到 NFS 存储,但是风险在于,当存储中的数据损坏时,您将无法从何处复制,除非您经常进行备份,并且您不在乎是否错过了一些最近插入的数据...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    相关资源
    最近更新 更多