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

将独立运行迁移到单成员副本集

从Kubernetes Operator 1.15 开始,独立运行运行部署已被弃用,并在下一个主要版本中失去支持。将独立运行的部署迁移到单成员副本集。单节点副本集提供与独立运行实例相同的单节点拓扑结构,并支持稍后添加节点,而无需再次迁移。

1

一个Ops Manager项目包含一个部署,因此您无法重复使用独立运行部署使用的项目。复制独立运行部署引用的 ConfigMap,保留 baseUrl 和 orgId 值,并设立新的唯一 projectName。将 ConfigMap 应用到与独立运行部署相同的Kubernetes命名空间。

要学习;了解更多信息,请参阅使用 ConfigMap 为每个MongoDB部署创建一个项目。

2

创建 MongoDB资源,将 spec.type设立为 ReplicaSet,并将 spec.members设立为 1。将 spec.version 设置为独立运行部署运行的MongoDB版本,并引用您在上一步中创建的 ConfigMap。您可以重复使用独立运行部署使用的凭证密钥。从独立运行资源中复制任何其他spec 设置。

---apiVersion: mongodb.com/v1kind: MongoDBmetadata: name: <my-replica-set> namespace: <my-namespace>spec: members: 1 # Must match the MongoDB version of the standalone deployment version: "<mongodb-version>" opsManager: configMapRef: # Must match metadata.name in the new project ConfigMap file name: <configMap.metadata.name> # Can match the credentials Secret that the standalone deployment uses credentials: <mycredentials> type: ReplicaSet persistent: true...

应用资源:

kubectl apply -f <replica-set-yaml> --namespace <my-namespace>

要检查 MongoDB 资源的状态,请使用以下命令:

kubectl get mdb <resource-name> -o yaml -w

设置 -w (观看) 标志后,当配置更改时,输出将立即刷新,直到状态阶段达到 Running 状态。要了解有关资源部署状态的详情,请参阅 Kubernetes Operator 故障排除。

3

运行数据库Pod 的容器映像不包含MongoDB Database Tools。要运行mongodump 和 mongorestore,部署基于 mongodb-enterprise-server 映像的专用工具 Pod。将映像标签设置为与独立运行部署运行相同的MongoDB版本。

---apiVersion: v1kind: Podmetadata: name: mongodb-tools namespace: <my-namespace>spec: containers: - name: mongodb-tools # Use the standalone's MongoDB version without the -ent # suffix, for example 8.0.4 image: quay.io/mongodb/mongodb-enterprise-server:<mongodb-version>-ubi9 command: ["sleep", "infinity"]...

应用 Pod:

kubectl apply -f <tools-pod-yaml> --namespace <my-namespace>
4

停止对独立运行部署的所有应用程序写入,并保持写入停止状态,直到应用程序连接到新的副本集。转储不会捕获转储开始后发生的写入。

5

记录独立运行部署上每个集合的文档计数和每个数据库的 dbHash,admin、config 和 local 数据库除外。恢复会排除 admin 和 config 数据库,复制会写入local数据库,因此这些值从不匹配。恢复后,您可以对副本集重复进行这些测量,以验证迁移。

6

从工具 Pod 针对独立运行部署的服务运行 mongodump:

kubectl exec mongodb-tools --namespace <my-namespace> -- \ mongodump \ --host "<my-standalone>-svc.<my-namespace>.svc.cluster.local:27017" \ --out /tmp/dump

如果独立运行部署需要身份验证,请以具有 backup 和 readAnyDatabase 角色的用户身份进行连接。如果部署需要 TLS,请添加相应的 mongodump 连接选项。要学习;了解更多信息,请参阅 mongodump。

7

从工具 Pod 中针对副本集的服务运行 mongorestore:

kubectl exec mongodb-tools --namespace <my-namespace> -- \ mongorestore \ --host "<my-replica-set>-svc.<my-namespace>.svc.cluster.local:27017" \ --nsExclude="admin.*" \ --nsExclude="config.*" \ /tmp/dump

--nsExclude 选项会将 admin 和 config 数据库排除在恢复之外。完整的 mongodump 输出包括 admin.system.users 和 admin.system.version。恢复它们会将数据库用户和身份验证模式写入自动化配置之外的副本集,因此Ops Manager中项目的用户列表将不再与数据库匹配。

如果副本集需要身份验证,则副本集还没有用户,因为您将在后续步骤中重新创建数据库用户。在具有 restore、readWriteAnyDatabase 和dbAdminAnyDatabase 角色的新项目中创建临时MongoDBUser资源,并以该用户身份进行连接。要学习;了解有关创建用户的更多信息,请参阅管理数据库用户。

如果副本集需要 TLS,请添加相应的 mongorestore 连接选项。要学习;了解更多信息,请参阅 mongorestore。

8

对副本集重复上一步中的文档计数和 dbHash 测量值,并确认这些值与您在独立运行部署中记录的值相匹配。

9

转储不包含数据库用户。在新项目中将每个用户重新创建为 MongoDBUser资源。如果您为恢复创建了临时用户,请在重新创建用户后将其删除。要学习;了解更多信息,请参阅管理数据库用户和MongoDB用户资源规范。

10

更新应用程序的连接字符串以引用单节点副本集。

11

验证迁移后,删除独立运行的MongoDB资源。 Kubernetes Operator 不会删除独立运行部署使用的持久卷声明,因此请手动删除该声明。要学习;了解更多信息,请参阅删除 MongoDB资源。

独立运行部署会保持不变,直到您将其删除。要回滚迁移,请将应用程序定向回独立运行部署。独立运行部署不包含副本集在切换后收到的写入。