对于 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

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 部署,每个集群都可以使用 LoadBalancer 类型服务单独公开其 Ops Manager 应用程序 Pod。使用 spec.externalConnectivity 创建此服务,并将外部域指向其外部 IP 地址。要了解有关多集群部署中配置负载均衡的更多信息,请参阅多集群 Ops Manager 部署的服务网格要求。

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

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

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

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

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

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

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

如果您计划进行地理位置相距较远的部署,请联系MongoDB 支持以获取帮助。

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

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

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

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

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

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