对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

多集群架构

Kubernetes 操作符支持在多个 Kubernetes 集群中部署 MongoDB 数据库资源和 Ops Manager 资源。这提供了地理备份、灾难恢复功能和提高的韧性。

重要

您无法将现有的 MongoDB Ops Manager 部署从单集群拓扑转换为多集群拓扑。如果您以单集群模式开始,则必须重新开始并重新部署。在初始部署之前规划拓扑结构。

您可以使用以下设置通过 Kubernetes 操作符 控制部署 MongoDB 资源的模式:

  • spec.topology — 控制 Ops Manager 应用程序的模式。

  • spec.applicationDatabase.topology — 控制应用程序数据库的模式。

如下示例所示,如果将 spec.topologyspec.applicationDatabase.topology 都设置为 MultiCluster,则会为 MongoDB Ops Manager 资源及其应用程序数据库启用多集群模式:

spec:
topology: MultiCluster
applicationDatabase:
topology: MultiCluster

在多集群模式下,您可以从单节点集群开始,并根据需要进行扩展。具体而言:

  • 单节点集群启动:部署可以从一个节点集群开始。

  • 最小应用程序数据库副本集:最小 3 节点的应用程序数据库副本集可以在单节点集群上运行,之后再扩展到多个集群。

  • 单个应用程序实例:单个 MongoDB Ops Manager 应用程序实例可以在一个集群上运行,后续再添加其他集群。

在单集群模式(默认)下,省略拓扑结构设置或将其设置为 SingleCluster

多集群部署适用以下限制:

  • 使用高于 5.0.7 的 Ops Manager 版本。

  • 仅将密钥用于密钥存储。不支持 HashiCorp Vault。

  • 对于 Kubernetes 操作符不管理 MongoDBOpsManagerMongoDB 资源的部署,必须在 MongoDB Ops Manager 中手动配置 KMIP 备份加密设置。

  • 不要将 ServiceMonitor 添加到 MongoDBMultiCluster 资源。不支持 Prometheus 集成。

  • 您无法将现有的单集群 MongoDB 资源迁移到多集群资源。

能力或要求
单集群
多集群

操作符必须与 MongoDB Ops Manager 和应用程序数据库在同一集群中

No

Ops Manager 和应用程序数据库集群所需的服务网格

No

HashiCorp Vault supported

No

支持所有备份机制

否。仅限 S3兼容的 oplog/快照。

KMIP加密

带有限制

您可以创建带有或不带有服务网格的多集群 MongoDB 部署。

在这两种情况下,Kubernetes 操作符:

  • 监视操作符集群中 MongoDBMultiCluster 规范的情况。

  • 使用已挂载的kubeconfig与节点集群通信。

  • 在每个节点集群中创建 ConfigMaps、Secrets、Services 和 StatefulSets。

  • 将MongoDB副本集成员部署到相应的集群。

  • 监视操作符集群和节点集群事件。

  • 协调资源以确认所需状态。

使用Kubernetes Operator 的MongoDB控制器的多 Kubernetes集群MongoDB 部署由一个操作符集群和一个或多个Kubernetes节点集群组成:

  • 操作符集群具有以下角色:

    • 托管Kubernetes Operator 的MongoDB控制器

    • 充当多 Kubernetes 集群 MongoDB 部署的控制平面

    • 托管 MongoDB 副本集的MongoDBMultiCluster资源规范

    • 托管 Ops Manager(如果您使用 Kubernetes Operator 部署 Ops Manager)

    • 还可以托管 MongoDB 副本集的成员

    重要

    中央集群也称为操作符集群。 在未来版本中,对中央集群的引用可能会重命名,以引用操作符集群。

  • 成员集群托管 MongoDB 副本集。

注意

如果操作符集群发生故障,则无法使用 Kubernetes Operator 更改部署,直到您恢复访问或将 Kubernetes Operator 重新部署到另一个集群。See 灾难恢复.

使用服务网格

服务网格可以管理跨集群的 MongoDB 节点发现并处理节点间通信。下图演示了带有服务网格的多集群部署:

显示带有服务网格的多集群部署的图表
点击放大

无服务网格

外部域和 DNS 区域处理跨集群通信。请参阅通过外部域和 DNS 区域启用外部连接。下图演示了不使用服务网格的多集群部署:

显示没有服务网格的多集群部署图
点击放大

下图显示了部署在多个 Kubernetes 集群上的 MongoDB Ops Manager 应用程序、应用程序数据库和备份守护程序:

显示多集群 Ops Manager 部署的图表

多集群 MongoDB Ops Manager 部署的关键元素:

  1. 操作符集群(例如,节点集群 0)存储 kubeconfig 秘密(mongodb-enterprise-operator-multi-cluster-kubeconfig)和用于托管所有节点集群的集群映射 ConfigMap。

  2. 集群映射 ConfigMaps 追踪集群名称与索引之间的关系:

    • <om_resource_name>-cluster-mapping — 将 spec.clusterSpecList 条目映射到集群索引。

    • <om_resource_name>-db-cluster-mapping — 将 spec.applicationDatabase.clusterSpecList 条目映射到集群索引。

    • <om_resource_name>-db-member-spec — 记录每个集群的副本数以进行灾难恢复。

  3. 应用程序有状态集在每个集群上命名为 <om_resource_name>-<cluster_index>。操作符创建一个包含所有本地 Pod 的 ClusterIP 服务 (<om_resource_name>-svc),外加一个可选的 LoadBalancer 服务 (<om_resource_name>-svc-ext),用于外部访问。

  4. 应用程序数据库有状态集命名为 <om_resource_name>-db-<cluster_index>。每个 Pod 服务 (<om_resource_name>-db-<cluster_index>-<pod_index>-svc) 可以在服务网格中实现单个 mongod 可寻址性。

  5. 备份守护程序 StatefulSets 命名为 <om_resource_name>-backup-daemon-<cluster_index>,如果 spec.backup.enabledtrue,则创建。

下表介绍了在多集群部署中连接到 MongoDB Ops Manager 应用程序的客户端和服务类型以及它们使用的 URL:

来源
用途
URL

Kubernetes Operator

配置 MongoDB Ops Manager,启用监控

默认 FQDN <om_resource_name>-svc.<namespace>.svc.cluster.localspec.opsManagerURL

Kubernetes Operator

配置特定的 MongoDB 部署

应用程序数据库中的 MongoDB Agent

从 Ops Manager 接收自动化配置

无头模式(无需 Ops Manager 连接)

应用程序数据库中的监控代理

向 MongoDB Ops Manager 发送监控数据

默认 FQDN 或 spec.opsManagerURL

MongoDB 资源中的 MongoDB Agent

从 MongoDB Ops Manager 接收自动化配置,包括备份和恢复说明

项目 ConfigMap

user

访问 MongoDB Ops Manager 用户界面或 API

通过外部域 spec.externalConnectivity

对于多集群 MongoDB Ops Manager 部署,请将托管应用程序数据库和 MongoDB Ops Manager 应用程序的 Kubernetes 集群添加到同一服务网格。这可以实现:

  • 跨集群部署组件之间的网络连接。

  • 每 Pod 服务 FQDN 的跨集群 DNS 解析。

此外,我们还建议将操作符集群添加到同一服务网格,这样它就可以直接托管 MongoDB Ops Manager 应用程序和应用程序数据库实例。

为以下集群配置服务网格:

  • 操作符集群(安装 Kubernetes 操作符的位置)

  • 所有托管 MongoDB Ops Manager 应用程序实例的节点 Kubernetes 集群

  • 所有托管应用程序数据库实例的节点 Kubernetes 集群

服务网格可确保每个 MongoDB Ops Manager 实例都可以连接到每个应用程序数据库实例,即使跨集群也是如此。部署后,每个 MongoDB Ops Manager API 终结点都必须能直接连接到每个应用程序数据库节点。

对于多集群Ops Manager部署,每个集群都可以使用 类型的服务单独公开其Ops ManagerLoadBalancer 应用程序Pod。使用spec.externalConnectivity 创建此服务,并将外部域点其外部IP解决。要学习;了解有关在多集群部署中配置负载均衡的更多信息,请参阅多集群Ops Manager部署的服务网格要求。

由于 Kubernetes 操作符不原生支持跨集群负载均衡,因此必须在外部配置负载均衡。为 MongoDB Ops Manager 部署启用跨集群负载均衡的方法如下:

  • 外部负载均衡器:为所有托管 Ops Manager 应用程序的集群配置外部网络负载均衡器(直通代理)。负载均衡器以循环方式将流量转发到每个集群的 LoadBalancer 服务。下图说明了这种方法:
带外部负载均衡器的多集群部署
点击放大
  • 带代理的服务网格:使用服务网格的跨集群负载均衡。在一个集群上部署代理(如 Nginx 或 HAProxy),将其对外暴露,并配置 TCP 直通到 <om_resource_name>-svc.<namespace>.svc.cluster.local。下图说明了这种方法:
带有服务网格负载均衡的多集群部署
点击放大

应用程序数据库和Ops Manager实例的地理分布可能会影响Ops Manager 应用程序和备份/恢复进程的性能。请参阅多区域部署中的性能。

为了最大程度地发挥多集群韧性和可用性的优势,尽可能在同一地理区域部署所有组件。

可能导致性能下降的原因包括:

  • MongoDB Ops Manager 应用程序与主应用程序数据库节点之间的网络延迟增加。

  • 执行备份作业的 MongoDB 数据库节点和 MongoDB Ops Manager 应用程序之间的延迟增加。

如果您计划相距较远的部署,联系MongoDB支持部门以获取帮助。

以下多集群功能使用与单集群部署相同的程序:

  • 连接 DNS SRV 记录:使用Kubernetes Operator 创建的密钥中的 connectionString.standardSrv DNS种子列表连接字符串。请参阅从Kubernetes内部连接到MongoDB资源,然后选择 Using the Kubernetes Secret标签页。

  • 管理数据库用户的安全性:使用与单集群部署相同的 LDAP、SCRAM、X.509 和 OIDC 身份验证程序,但有以下例外:

    • 多集群程序仅适用于副本集(不支持分片集群)。

    • mongodbResourceRef 中,指定多集群副本集名称。

  • 可查询备份(单集群 |onprem| 仅限):如果 MongoDB Ops Manager 部署在单个集群上,则可以配置 可查询备份。多集群 MongoDB Ops Manager 部署不支持可查询备份。