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

将分片集群迁移到 Kubernetes

此过程将由 MongoDB Ops Manager 或 Cloud Manager 托管的分片集群迁移到 Kubernetes Operator 下的 Kubernetes 中,并使用与将副本集迁移到 Kubernetes 相同的实时、增量扩展-提升-修剪工作流程。请遵循该过程,并应用本页面上描述的差异。如果本页面未提及某个步骤,则其工作方式与副本集过程相同。

重要

带有嵌入式配置服务器的分片集群不受支持。Kubernetes 操作符检测到此拓扑结构,并拒绝导入。

对于分片集群,spec.externalMembers 是一个涵盖每个进程的单一平面列表:配置服务器 mongod、每个分片的 mongod 以及 mongos 路由器。每个条目都设置了 spec.externalMembers[].type,并且每个 mongod 条目还设置了 spec.externalMembers[].replicaSetName,以标识该进程是属于配置服务器副本集还是属于特定分片的副本集。有关完整的字段参考,请参阅 MongoDB 迁移资源设置。

kubectl mongodb migrate-to-mck插件设置 spec.configServerNameOverride 和 spec.shardNameOverrides,以便 Kubernetes 操作符扩展现有的配置服务器和分片副本集,而不是创建新的副本集。插件还会将 Kubernetes 端的节点数设置为 0。

你可以通过两种方式将分片集群扩展到 Kubernetes:

  • 统一,通过增加每个组件的计数 spec.mongodsPerShardCount、spec.configServerCount 和 spec.mongosCount。当每个分片接收相同数量的 Kubernetes 节点时,请使用此选项。

  • 每个分片,使用 spec.shardOverrides 条目命名分片并设立其成员数。当分片大小不同时、按分片迁移分片或分片需要自己的成员布局时,请使用此选项。

    注意

    请勿将 `spec.shardOverrides` (每分片配置) 与 `spec.shardNameOverrides` (自动化配置副本集命名)混淆。这两个设置不相关。

与副本集过程一样,在增加 Kubernetes 节点数量之前,请为相关组件上的每个新 Kubernetes 节点手动写入 memberConfig:

警告

设置 spec.memberConfig在增加节点数量之前

默认情况下,新的 Kubernetes 节点作为投票节点加入。CRD 默认是 votes: 1 和 priority: "1",这允许仍在同步的节点在完成初始同步之前参与选举。

MongoDB 建议您在增加节点数量之前,为每个新的 Kubernetes 节点写入一个 spec.memberConfig 记录,并使用 votes: 0 和 priority: "0",以防尚在同步的节点赢得选举。votes是一个整数。priority是一个字符串。

示例,以下配置扩展了单集群分片的部署。该示例将一个Kubernetes成员添加到配置服务器,向两个分片各添加一个 ,以及一个 mongos 路由器。在新成员完成初始同步时设置 votes: 0 和 priority: "0" ,然后使用所示值对其进行升级:

spec:
configServerCount: 1
memberConfig:
- votes: 1
priority: "10"
shardOverrides:
- shardNames: ["myclustershard-0"]
members: 1
memberConfig:
- votes: 1
priority: "10"
- shardNames: ["myclustershard-1"]
members: 1
memberConfig:
- votes: 1
priority: "10"
mongosCount: 1

在单集群部署中,顶层 spec.memberConfig 配置配置服务器成员。相同的配置适用于没有匹配 spec.shardOverrides 条目的每个分片的成员。 mongos 路由器不是副本集成员,因此不会占用 memberConfig。

为每个组件颁发一个证书,使用每个组件的命名模式:配置服务器使用 <name>-config-*,每个分片使用 <name>-<i>-*,和 mongos 个路由器使用 <name>-mongos-*。

扩展或缩减配置服务器、分片或 mongos 路由器没有特定的顺序要求。一次仅扩展或修剪一个组件,并在进入下一个组件或下一个条目之前等待达到目标状态。

状态条件和原因与副本集的工作方式相同,根据跨所有组件的可覆盖节点总数计算得出。kubectl wait --for=condition=Migrating=False 适用于分片集群迁移。

通过 mongos Pod 验证迁移,而不是分片节点。