重命名 Mongo 分片

重命名 Mongo 分片

我可以吗?如果可以,我该如何在 Mongo 中重命名分片?

例如,如果我想将 rs0 的实例更改为下面 rep0:

mongos> sh.status()
--- Sharding Status --- 
  sharding version: {
    "_id" : 1,
    "version" : 4,
    "minCompatibleVersion" : 4,
    "currentVersion" : 5,
    "clusterId" : ObjectId("111111111111")
}
  shards:
    {  "_id" : "rs0",  "host" : "rs0/mongo0a:27017,mongo0b:27017" }
...

我曾考虑过删除并重新添加分片,但我不确定如何在不耗尽分片和删除数据库的情况下做到这一点。

目前,0 个集合已启用分片,我只是添加了几个独立集合作为分片。

谢谢

答案1

不,目前不支持重命名分片的方法,但正如您所提到的,您可以删除并重新添加。即便如此,它也不像您想象的那么简单,因为虽然您可以在添加分片时指定名称,但事情并没有就此结束 - 还有副本集本身需要担心。添加时的名称规范只是 的值_id,请参见以下示例(我的副本集是 rs0,与您的一样):

mongos> db.adminCommand({addShard : "rs0/host.example.com:27017,host.example.com:27018", name : "rep0"});

mongos> sh.status()
--- Sharding Status --- 
  sharding version: {
    "_id" : 1,
    "version" : 4,
    "minCompatibleVersion" : 4,
    "currentVersion" : 5,
    "clusterId" : ObjectId("539838845bc6bf5ee52a56ea")
}
  shards:
    {  "_id" : "rep0",  "host" : "rs0/host.example.com:27017,host.example.com:27018" }
  databases:
    {  "_id" : "admin",  "partitioned" : false,  "primary" : "config" }

请注意,所有更改的都是_id分片的,"host"值保持不变,因为rs0是副本集的名称 - 如果您尝试rep0在那里使用,它将无法添加。因此,删除并重新添加只会给您两个名称之间的不匹配。

要更改该host值,您不仅必须删除/重新添加分片,还必须在重新添加分片之前更改副本集配置。换句话说,replSet必须更改参数rep0,这意味着重新初始化集合 - 也不是一件容易的事。

总体而言,您可以实现目标,但需要做大量工作,而且不会很快完成(消耗、重新初始化集合),尤其是当您有大量数据时。为了更改几个字符串,我通常建议保持原样。

答案2

这可能不受支持。不过,我找到了一种重命名碎片的方法。使用时请自担风险。

基本上,分片名称出现在以下集合中的配置服务器中:config.databases、config.chunks 和 config.shards。

进行简单更新,用新分片名称替换具有旧分片名称的字段。 您必须在所有配置服务器上重复此操作。 首先关闭分片服务器和 mongos 客户端。示例如下:

$ mongo <configserver>:<port>/config
configsvr> db.databases.update({primary:'old_shard_name'},{$set:{primary:'new_shard_name'}},{multi:true})
configsvr> db.chunks.update({shard:'old_shard_name'},{$set:{shard:'new_shard_name'}},{multi:true})
configsvr> var temp = db.shards.findOne({_id:'old_shard_name'})
configsvr> temp._id = 'new_shard_name'
configsvr> db.shards.remove({_id:'old_shard_name'})
configsvr> db.shards.insert(temp)

如果你同时更改副本集名称,则可以同时修改config.shards集合中记录的“hosts”字段。

相关内容