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

多集群架构图: MongoDB Ops Manager和应用程序数据库

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

图表显示了MongoDB Ops Manager 、其用户界面应用程序、应用程序数据库和备份守护程序在多个Kubernetes集群上的高级部署。 该图还显示了组件之间的网络连接。

在此图中:

  1. Member Cluster 0 也是一个 中央集群,因为您需要在其上安装 Kubernetes Operator。它也是一个节点集群,可以托管任何多集群自定义资源。

  2. Member Cluster 0 存储 kubeconfig 文件,其中描述成员集群、用户和上下文的Kubernetes 配置。当您使用 kubectl mongodb 插件为多集群部署配置Kubernetes Operator 时,它会创建以下资源:

    • mongodb-enterprise-operator-multi-cluster-kubeconfig 密钥,其中包含 Kubernetes 操作符 将要管理的所有 Kubernetes 集群的凭证。如果您计划将中央集群用作节点集群,则此密钥可能包含安装 Kubernetes 操作符 的同一集群的凭证。

    当 Kubernetes Operator 在多集群模式下运行时,它会存储所需的资源,例如 ConfigMap 和有关要管理的集群的密钥。 这些资源与 Kubernetes Operator 属于同一命名空间。 KubernetesOperator 使用这些资源在多个MongoDB Ops Manager Kubernetes集群上部署 应用程序和应用程序数据库。

  3. Kubernetes Operator 还为其管理的每个MongoDB Ops Manager应用程序和应用程序数据库部署创建并维护一些额外的多集群部署状态 ConfigMap。 Member Cluster 0存储此配置,其中包括以下 ConfigMap:

    • <om_resource_name>-cluster-mapping ConfigMap 包含spec.clusterSpecList中列出的成员集群名称到集群索引的映射,在本文档中称为cluster_index ,例如Cluster 0或Cluster 1 。 Kubernetes Operator 将这些索引分配给每个集群名称。

    • <om_resource_name>-db-cluster-mapping ConfigMap 包含spec.applicationDatabase.clusterSpecList中列出的成员集群名称到集群索引的映射。

    • <om_resource_name>-db-member-spec ConfigMap 包含为每个成员集群配置的应用程序数据库副本数。 有了这些信息, Kubernetes Operator 就可以在灾难恢复中正确扩展或重新配置副本集,例如在丢失整个成员集群后。

  4. MongoDBOpsManager 资源的配置是您创建的一个文件,用于描述多集群MongoDB Ops Manager部署。 Kubernetes Operator 使用此文件来部署MongoDB Ops Manager组件。

    以下示例显示了导致Kubernetes Operator 部署此图中描述的MongoDB Ops Manager组件的配置。 此示例省略了一些与此图表不相关的设置,例如TLS配置。

    apiVersion: mongodb.com/v1kind: MongoDBOpsManagermetadata: name: om namespace: om-nsspec: replicas: 1 # You can set this value and use it as a global or default # setting for all clusters. The spec.clusterSpecList.members # setting overrides this setting. topology: MultiCluster version: 8.0.0 adminCredentials: om-admin-secret clusterSpecList: - clusterName: "Member Cluster 1" # Ops Manager settings for "Member Cluster 1" members: 2 backup: # Backup settings for "Member Cluster 1" members: 2 # Overrides spec.backup.members - clusterName: "Member Cluster 2" # Ops Manager settings for "Member Cluster 2" members: 1 backup: # Backup settings for "Member Cluster 2" members: 2 # Overrides spec.backup.members applicationDatabase: # Global {+appdb+} settings topology: MultiCluster version: 8.0.0 members: 3 # In multi-cluster mode, the Operator ignores this field. # The Operator sets the number of members for the Application # Database in spec.applicationDatabase.clusterSpecList.members. clusterSpecList: - clusterName: "Member Cluster 1" members: 3 - clusterName: "Member Cluster 2" members: 2 backup: # Global settings for the Backup Daemon enabled: true members: 1 # Set this value and use it as a global or default setting. # To override this value, set the value for # spec.clusterSpecList.backup.members. # The Backup Daemon's configuration for each cluster isn't # stored here. Use the Ops Manager's spec.clusterSpecList.backup to # specify the Backup Daemon configuration for each member cluster.
  5. Kubernetes Operator 连接到引用以下任一项的MongoDB Ops Manager实例:

    • 它为 MongoDB Ops Manager 资源创建的服务的默认 `FQDN`、<om_resource_name>-svc.<namespace>.svc.cluster.local或

    • 您在 spec.opsManagerURL 中指定的 URL。在某些部署中,例如当安装 Kubernetes 操作符的集群未附加到服务网格时,默认服务 FQDN 可能无法访问。在此情况下,Kubernetes 操作符将 MongoDBOpsManager 资源状态报告为 Failed,表示连接错误。为了处理这类情况,请在 spec.opsManagerURL 中提供 Ops Manager 的 URL。该 URL 可能是外部暴露的 Ops Manager 实例的主机名。要了解更多信息,请参阅 网络概述。

  6. 两个成员集群托管MongoDB Ops Manager应用程序。 在每个集群中, Kubernetes Operator 部署一个名为<om_resource_name>-<cluster_index>的 StatefulSet。

    • StatefulSet 在 Member Cluster 1 中部署MongoDB Ops Manager应用程序的两个实例,在 Member Cluster 2 中部署一个实例。

    • 您在spec.clusterSpecList.members中定义实例的数量。 您可以设立实例数设置为零,以便此集群不部署任何MongoDB Ops Manager应用程序实例。 示例,如果您想使用此集群仅托管备份守护程序实例,这非常有用。

      如果从spec.clusterSpecList删除一个集群,则相当于在spec.clusterSpecList.members和spec.clusterSpecList[*].backup.members中指定零个成员。

    • 对于每个集群中的每个 StatefulSet, Kubernetes Operator 都会配置一个服务,名为 <om_resource_name>-svc 的类型为 ClusterIP,其中包含集群端点列表上的所有 Pod。此服务的 FQDN <om_resource_name>-svc.<namespace>.svc.cluster.local 是默认主机名, Kubernetes Operator 使用它来访问权限MongoDB Ops Manager应用程序的已部署端点。

    • 如果指定spec.externalConnectivity , Kubernetes Operator 还会为每个集群创建一个名为<om_resource_name>-svc-ext的外部Kubernetes LoadBalancer类型服务。 在每个集群中,您可以使用spec.clusterSpecList.externalConnectivity为此外部服务指定自己的配置。 示例,您可以更改服务类型或定义注解。

  7. 应用程序数据库。 Kubernetes Operator 在两个集群上部署应用程序数据库。

    • Member Cluster 1包含应用程序数据库的三个mongod进程, Member Cluster 2包含两个mongod进程。

    • 您可以使用spec.applicationDatabase设置定义应用程序数据库配置。 在每个成员集群上, Kubernetes Operator 创建一个名为<om_resource_name>-db-<cluster_index>的 StatefulSet,其数量在spec.applicationDatabase.clusterSpecList.members中定义。 在多集群模式, Kubernetes Operator 会忽略您为spec.applicationDatabase.members字段设立的值。 Kubernetes Operator 配置一个副本集由部署在所有成员集群上的mongod进程组成。

    • 对于<statefulset_name>-<pod_index> <om_resource_name>-db-<cluster_index>-<pod_index>ClusterIPmongod<om_resource_name>-db-<cluster_index>-<pod_index>-svc中托管名为 的 MongoDB 进程的每个 Pod,Kubernetes 操作符会创建 Kubernetes 类型服务,以通过其 FQDN 访问单个 进程。副本集中的每个 mongod 进程必须可以被唯一地寻址。

      副本集配置中的进程必须将其进程主机名配置为该 Pod 服务的 FQDN:<om_resource_name>-db-<cluster_index>-<pod_index>-svc.<namespace>.svc.cluster.local。

    • 每个 Pod 都通过Kubernetes Operator 创建的持久卷声明附加了持久卷。

    • 要从所有mongod进程形成副本集,每个进程都必须连接到其他进程以进行复制。 为此,请将部署应用程序数据库的所有成员集群纳入同一服务网格配置中。

      服务网格处理跨集群 DNS 查询,并相应地路由流量。服务网格可帮助解析每个 Pod 服务的 `FQDN <om_resource_name>-db-<cluster_index>-<pod-index>-svc.<namespace>.svc.cluster.local` 跨所有集群,并允许在暴露的 `mongod` 端口上连接(默认为 27017)。

      例如,当mongod om-db-1-0中 Pod 中运行的Member Cluster 1 进程连接到mongod 中om-db-2-1 Pod 中运行的Member Cluster 2 ,第一个mongod 进程使用自动化配置om-db-2-1-svc.om-ns.svc.cluster.local:27017 和服务网格将此请求路由到Member Cluster 2 到om-db-2-1-svc 服务。如果没有服务网格,Kubernetes Member Cluster 1就没有有关部署在Member Cluster 2中的om-db-2-1-svc服务的信息,并且om-db-2-1-svc.om-ns.svc.cluster.local的 DNS 解析将失败。

    • 当应用程序数据库和MongoDB Ops Manager应用程序实例处于 Running 状态时, Kubernetes Operator 会向应用程序数据库 StatefulSets 添加一个额外的监控容器。 这会导致所有集群中的所有应用程序数据库 Pod滚动重启。 Kubernetes Operator 按顺序更新所有集群的 StatefulSet,以便在滚动重启进程,每个集群中只有一个副本集的成员暂时不可用。

    • 监控代理使用 MongoDB Ops Manager 服务的 FQDN、<om_resource_name>-svc.<namespace>.svc.cluster.local 或 spec.opsManagerURL 中的值(如果已指定)连接到 MongoDB Ops Manager 应用程序实例。

      MongoDB Ops Manager应用程序和备份守护程序始终使用包含所有副本集成员的应用程序数据库的连接string 。 连接string始终使用 pod 服务 FQDN 构建。

  8. 如果您将spec.backup.enabled设置为true ,Kubernetes Operator 会部署备份守护程序 StatefulSet。

    • 在spec.clusterSpecList中列出的每个成员集群上,Kubernetes Operator 都会创建一个备份守护程序 StatefulSet,名为<om_resource_name>-backup-daemon-<cluster_index> ,并将备份守护程序实例的数量设置为spec.backup.members 。

      或者,您可以在spec.clusterSpecList[*].backup.members中配置每个集群的备份守护程序实例的数量。

    • 备份守护程序实例仅使用与 应用程序实例相同的连接string MongoDB Ops Manager连接到应用程序数据库副本集。

此外,在此图中,您可以观察服务网格和组件之间的网络连接:

  • 该图周围的虚线显示了单个服务网格,其中包括所有集群的网络配置。

  • 跨成员集群的MongoDB Ops Manager应用程序周围的虚线表示这些实例是无状态的,并且流量可以平均分布式给所有实例,示例使用循环负载负载均衡器。

  • 跨成员集群的应用程序数据库周围的虚线表示这些实例相互通信并形成单个 MongoDB 副本集。

给本页内容打分