Docs 菜单
Docs 主页
/
MongoDB Enterprise Kubernetes Operator
/ / /

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

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

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

在此图中:

  1. Member Cluster 0也是一个“Operator 集群”,因为您在其上安装了 Kubernetes Operator。 它也是一个“成员集群”,可以托管任何多集群自定义资源。

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

    • mongodb-enterprise-operator-multi-cluster-kubeconfig密钥,包含 Kubernetes Operator 将管理的所有 Kubernetes 集群的档案。 如果您计划将 Operator 集群用作成员集群,则此密钥可能包含您安装 Kubernetes Operator 的同一集群的档案。

    当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 0Cluster 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配置。

    1apiVersion: mongodb.com/v1
    2kind: MongoDBOpsManager
    3metadata:
    4 name: om
    5 namespace: om-ns
    6spec:
    7 replicas: 1 # You can set this value and use it as a global or default
    8 # setting for all clusters. The spec.clusterSpecList.members
    9 # setting overrides this setting.
    10 topology: MultiCluster
    11 version: 6.0.22
    12 adminCredentials: om-admin-secret
    13 clusterSpecList:
    14 - clusterName: "Member Cluster 1" # Ops Manager settings for "Member Cluster 1"
    15 members: 2
    16 backup: # Backup settings for "Member Cluster 1"
    17 members: 2 # Overrides spec.backup.members
    18 - clusterName: "Member Cluster 2" # Ops Manager settings for "Member Cluster 2"
    19 members: 1
    20 backup: # Backup settings for "Member Cluster 2"
    21 members: 2 # Overrides spec.backup.members
    22 applicationDatabase: # Global {+appdb+} settings
    23 topology: MultiCluster
    24 version: 6.0.5-ent
    25 members: 3 # In multi-cluster mode, the Operator ignores this field.
    26 # The Operator sets the number of members for the Application
    27 # Database in spec.applicationDatabase.clusterSpecList.members.
    28 clusterSpecList:
    29 - clusterName: "Member Cluster 1"
    30 members: 3
    31 - clusterName: "Member Cluster 2"
    32 members: 2
    33 backup: # Global settings for the Backup Daemon
    34 enabled: true
    35 members: 1 # Set this value and use it as a global or default setting.
    36 # To override this value, set the value for
    37 # spec.clusterSpecList.backup.members.
    38 # The Backup Daemon's configuration for each cluster isn't
    39 # stored here. Use the Ops Manager's spec.clusterSpecList.backup to
    40 # 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 Operator 的集群未连接到服务网格时,可能无法访问默认服务FQDN 。 在这种情况下, Kubernetes Operator 会将MongoDBOpsManager资源状态报告为Failed ,表示连接错误。 考虑到此类情况,请在URL 中提供MongoDB Ops Manager 的spec.opsManagerURL 。此URL可能是外部公开的MongoDB 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.membersspec.clusterSpecList[*].backup.members中指定零个成员。

    • 对于每个集群中的每个 StatefulSet, Kubernetes Operator 都会配置一个 服务 类型为 ClusterIP且名为 的<om_resource_name>-svc Pod,其中包含集群端点列表上的所有 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> 中托管名为 的MongoDB进程的每个 Pod,<om_resource_name>-db-<cluster_index>-<pod_index> Kubernetes Operator 都会创建一个KubernetesClusterIP 类型服务,用于通过其mongod FQDN 访问各个<om_resource_name>-db-<cluster_index>-<pod_index>-svc 进程。副本集的每个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 进程连接到mongodom-db-2-1 Pod 中运行的Member Cluster 2 ,第一个mongod 进程使用自动化配置om-db-2-1-svc.om-ns.svc.cluster.local:27017 和服务网格将此请求路由到Member Cluster 2om-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 MongoDB Ops Manager服务的 FQDN <om_resource_name>-svc.<namespace>.svc.cluster.local或 中的值(如果您指定)连接到spec.opsManagerURL 应用程序实例。

      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 副本集。

后退

多个 Kubernetes 集群上的部署