我可以,如果可以的话,我怎么能在蒙戈重命名一个碎片?
就像我想将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" }
...我已经考虑过删除和重新添加碎片,但我不确定如何做到这一点,而不需要排放碎片和下降dbs。
目前,0的集合已启用切分,我只是有几个标准添加为碎片。
谢谢
发布于 2014-06-11 11:49:04
不,目前还没有被支持的重命名碎片的方法,尽管正如您提到的,您可以删除并重新添加。即使这样,它也不像您想象的那么简单,因为虽然您可以在添加一个碎片时指定一个名称,但它并没有就此结束--它本身就是要担心的副本集。添加时的名称规范只是_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,这意味着重新初始化集合--这也不是一项容易的任务。
总的来说,它可以到达你想要的地方,但是会有大量的工作,而且它不会很快(排水,重新输入集合),特别是当你有很多数据的时候。为了更改几个字符串,我通常建议保持原样。
https://serverfault.com/questions/604234
复制相似问题