有没有办法在每个分片中加载数据后对 MongoDB 集合进行分片?

问题描述 投票:0回答:1

我有一个 3 分片 MongoDB 集群(版本 4.4),我想将其移动到另一个集群。每个分片都有 5 亿个文档作为集合“A”。我正在尝试通过对每个分片使用 mongodump / mongorestore 并同时为所有分片并行移动数据来加快该过程。

移动数据后,目标集群的所有 3 个分片中均已拥有数据。有没有办法更新或启动分片,以便 mongos 已经识别所有分片中的数据?

我尝试了以下命令:https://www.mongodb.com/docs/manual/reference/command/shardCollection/

但只有第一个分片 (rs0) 成功收集“A”。

这是状态输出:

'Migration Results for the last 24 hours': {
    '44': "Failed with error 'aborted', from rs0 to rs1",
    '68': "Failed with error 'aborted', from rs0 to rs2",
    '682': 'Success'
  }

我已启用分片并创建分片密钥。

我不知道这是否可能,因为通常分片是在集合中完成的,并且它会根据分片键自动在可用分片之间分割数据。

mongodb mongo-shell
1个回答
0
投票

最合适的选项如下(取决于您是否要备份/恢复分片集群或仅分片集合):

  1. 通过文件系统快照备份/恢复 mongoDB 分片集群官方流程是这里

  2. 通过 mongodump/mongorestore 备份/恢复 mongoDB 分片集合(如果目标集群中有其他集合并且集合相对较小,则此选项最好,较大的集合可能需要时间)。

2.1 从 mongos 为整个集合创建 mongodump (如果集合很大可能需要一些时间,因为它需要从 3x 分片读取所有 500M 文档)

2.2 创建集合,创建必要的索引,对其进行分片并在目标集群中进行预分割,使其为空,但在加载之前在所有 3x 分片中具有必要数量的块。

2.3。 mongore通过 mongos 存储集合。

© www.soinside.com 2019 - 2024. All rights reserved.