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

多集群架构

Kubernetes Operator 支持跨多个Kubernetes集群部署MongoDB 数据库资源和Ops Manager资源。这提供了地理冗余、灾难恢复功能和更高的韧性。

重要

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

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

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

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

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

spec:
topology: MultiCluster
applicationDatabase:
topology: MultiCluster

在多集群模式下,您可以从单个成员集群开始,并根据需要扩展。具体来说:

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

  • 最小应用程序数据库副本集:至少有3 个成员的应用程序数据库副本集可以在单个成员集群上运行,然后可以跨集群扩展。

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

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

以下限制应用于多集群部署:

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

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

  • 对于Kubernetes OperatorMongoDBOpsManager MongoDB不同时管理 和 资源的部署,您必须在Ops Manager中手动配置 KMIP备份加密设置。

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

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

能力或要求
单集群
多集群

Operator 必须与Ops Manager和应用程序数据库位于同一集群中

No

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

No

No

支持所有备份机制

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

KMIP加密

有限制

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

在这两种情况下, Kubernetes Operator:

  • 监视操作符集群上的 MongoDBMultiCluster 规范。

  • 使用已安装的 kubeconfig 与成员集群通信。

  • 在每个成员集群中创建 ConfigMap、Secret、Services 和 StatefulSet。

  • 将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集群上的Ops Manager 应用程序、应用程序数据库和备份守护程序:

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

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

  1. Operator集群(示例,成员集群 0)存储用于管理所有成员集群的kubeconfig 密钥mongodb-enterprise-operator-multi-cluster-kubeconfig () 和集群映射 ConfigMap。

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

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

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

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

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

  4. 应用程序数据库 StatefulSet 名为<om_resource_name>-db-<cluster_index> 。 Per-Pod 服务 ()启用跨服务网格的单独<om_resource_name>-db-<cluster_index>-<pod_index>-svc mongod可寻址性。

  5. 备份守护程序StatefulSet 名为<om_resource_name>-backup-daemon-<cluster_index> ,是在spec.backup.enabledtrue 时创建的。

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

起源
用途
URL
Kubernetes Operator

配置Ops Manager,启用监控

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

Kubernetes Operator

配置特定的MongoDB 部署

应用程序数据库中的MongoDB 助手

从Ops Manager接收自动化配置

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

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

将监控数据发送到Ops Manager

默认 FQDN 或 spec.opsManagerURL

MongoDB 资源中的MongoDB 助手

从Ops Manager接收自动化配置,包括备份和恢复指令

项目 ConfigMap

user

访问Ops Manager用户界面或API

外部域通过 spec.externalConnectivity

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

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

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

此外,我们还建议将操作符集群添加到同一服务网格中,使其能够直接托管Ops Manager 应用程序和应用程序数据库实例。

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

  • 操作符集群(安装Kubernetes Operator)

  • 托管Ops Manager 应用程序实例的所有成员Kubernetes集群

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

服务网格确保每个Ops Manager实例都可以连接到每个应用程序数据库实例,甚至可以跨集群连接。部署后,每个Ops Manager API端点必须能够直接连接到每个应用程序数据库成员。

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

由于Kubernetes Operator 本身不支持跨集群负载均衡,因此您必须从外部配置负载均衡。可使用以下方法为Ops Manager部署启用跨集群负载均衡:

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

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

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

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

  • Ops Manager 应用程序和主节点 (primary node in the replica set)应用程序数据库节点之间的网络延迟增加。

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

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

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

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

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

    • 多集群过程仅应用于副本集(不支持分片的集群)。

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

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