Kubernetes Operator 支持跨多个Kubernetes集群部署MongoDB 数据库资源和Ops Manager资源。这提供了地理冗余、灾难恢复功能和更高的韧性。
重要
您无法将现有Ops Manager部署从单集群拓扑转换为多集群拓扑结构。如果以单集群模式开始,则必须重新开始并重新部署。在初始部署之前规划拓扑结构。
单集群和多集群模式
您可以通过以下设置控制使用Kubernetes Operator部署MongoDB资源的模式:
spec.topology— 控制Ops Manager应用程序的模式。spec.applicationDatabase.topology— 控制应用程序数据库的模式。
如果将 spec.topology 和 spec.applicationDatabase.topology 都设立为 MultiCluster,则会为Ops Manager资源及其应用程序数据库启用多集群模式,如以下示例所示:
spec: topology: MultiCluster applicationDatabase: topology: MultiCluster
在多集群模式下,您可以从单个成员集群开始,并根据需要扩展。具体来说:
启动单个成员集群:部署可以从一个成员集群开始。
最小应用程序数据库副本集:至少有3 个成员的应用程序数据库副本集可以在单个成员集群上运行,然后可以跨集群扩展。
单个 |应用程序|实例:单个Ops Manager 应用程序实例可以在一个集群上运行,稍后会添加其他集群。
在单集群模式(默认)下,省略拓扑结构设置或将其设立为 SingleCluster。
多集群部署限制
以下限制应用于多集群部署:
使用高于 5.0.7 的 Ops Manager 版本。
仅将密钥用于密钥存储。不支持 HashiCorp Vault。
对于Kubernetes Operator
MongoDBOpsManagerMongoDB不同时管理 和 资源的部署,您必须在Ops Manager中手动配置 KMIP备份加密设置。不要将 ServiceMonitor 添加到
MongoDBMultiCluster资源中。不支持 Prometheus 集成。您无法将现有的单集群MongoDB资源迁移为多集群资源。
单集群部署和多集群部署之间的区别
能力或要求 | 单集群 | 多集群 |
|---|---|---|
Operator 必须与Ops Manager和应用程序数据库位于同一集群中 | 是 | No |
Ops Manager和应用程序数据库集群所需的服务网格 | No | 是 |
是 | No | |
支持所有备份机制 | 是 | 否。仅限与 S3 兼容的oplog/快照。 |
KMIP加密 | 是 |
多集群MongoDB数据库资源部署图
您可以创建带或不带服务网格的多集群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 区域的外部连接。下图说明了没有服务网格的多集群部署:
多集群Ops Manager资源部署图
下图显示了部署在多个Kubernetes集群上的Ops Manager 应用程序、应用程序数据库和备份守护程序:
多集群Ops Manager部署的关键要素:
Operator集群(示例,成员集群 0)存储用于管理所有成员集群的
kubeconfig密钥mongodb-enterprise-operator-multi-cluster-kubeconfig() 和集群映射 ConfigMap。集群映射 ConfigMap追踪集群名称和索引之间的关系:
<om_resource_name>-cluster-mapping— 将spec.clusterSpecList条目映射到集群索引。<om_resource_name>-db-cluster-mapping— 将spec.applicationDatabase.clusterSpecList条目映射到集群索引。<om_resource_name>-db-member-spec— 记录每个集群的副本数,用于灾难恢复。
每个集群上的应用程序 StatefulSet 都被命名为 。
<om_resource_name>-<cluster_index>ClusterIP<om_resource_name>-svc操作符创建包含所有本地 Pod 的 服务 (),以及用于外部访问权限的可选LoadBalancer服务<om_resource_name>-svc-ext()。应用程序数据库 StatefulSet 名为
<om_resource_name>-db-<cluster_index>。 Per-Pod 服务 ()启用跨服务网格的单独<om_resource_name>-db-<cluster_index>-<pod_index>-svcmongod可寻址性。备份守护程序StatefulSet 名为
<om_resource_name>-backup-daemon-<cluster_index>,是在spec.backup.enabled为true时创建的。
多集群网络
多集群部署的网络概述
下表描述了在多集群部署中连接到Ops Manager 应用程序的客户端和服务类型以及它们使用的 URL:
起源 | 用途 | URL |
|---|---|---|
Kubernetes Operator | 配置Ops Manager,启用监控 | 默认 FQDN |
Kubernetes Operator | 配置特定的MongoDB 部署 | 项目 ConfigMap(来自使用 ConfigMap 为每个MongoDB部署创建一个项目) |
应用程序数据库中的MongoDB 助手 | 从Ops Manager接收自动化配置 | 无头模式(无需连接Ops Manager ) |
应用程序数据库中的监控代理 | 将监控数据发送到Ops Manager | 默认 FQDN 或 |
| 从Ops Manager接收自动化配置,包括备份和恢复指令 | 项目 ConfigMap |
user | 访问Ops Manager用户界面或API | 外部域通过 |
多集群Ops Manager部署的服务网格要求
对于多集群Ops Manager部署,请将托管应用程序数据库和Ops Manager 应用程序的Kubernetes集群添加到同一服务网格中。这样可以:
跨集群部署的组件之间的网络连接。
针对每个 Pod 服务 FQDN 的跨集群 DNS 解析。
此外,我们还建议将操作符集群添加到同一服务网格中,使其能够直接托管Ops Manager 应用程序和应用程序数据库实例。
为以下集群配置服务网格:
操作符集群(安装Kubernetes Operator)
托管Ops Manager 应用程序实例的所有成员Kubernetes集群
托管应用程序数据库实例的所有成员Kubernetes集群
服务网格确保每个Ops Manager实例都可以连接到每个应用程序数据库实例,甚至可以跨集群连接。部署后,每个Ops Manager API端点必须能够直接连接到每个应用程序数据库成员。
多集群Ops Manager部署的负载均衡
对于多集群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 应用程序和备份/恢复进程的性能。请参阅多区域部署中的性能。
为了最大限度地发挥多集群韧性和可用性的优势,请尽可能将所有组件部署在同一地理区域。
可能导致性能下降的原因包括:
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中,指定多集群副本集名称。