对于 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.topology 和 spec.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 操作符不管理 MongoDBOpsManager 和 MongoDB 资源的部署,必须在 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 更改部署。请参阅 灾难恢复。

使用服务网格

服务网格可以管理跨集群的 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.enabled 为 true,则创建。

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

来源
用途
URL

Kubernetes Operator

配置 MongoDB Ops Manager,启用监控

默认 FQDN <om_resource_name>-svc.<namespace>.svc.cluster.local 或 spec.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 Operator)

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

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

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

For multi-cluster Ops Manager deployments, each cluster can expose its Ops Manager Application Pods individually using a LoadBalancer-type service. Create this service using spec.externalConnectivity and point an external domain to its external IP address. To learn more about configuring load balancing in multi-cluster deployments, see Service Mesh Requirements for Multi-Cluster Ops Manager Deployments.

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

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

The geographical distribution of Application Database and Ops Manager instances can impact the performance of the Ops Manager Application and backup/restore processes. See Performance in Multi-Region Deployments.

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

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

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

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

If you plan geographically distant deployments, contact MongoDB Support for assistance.

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

  • 使用 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 部署不支持可查询备份。