Mongodb 添加删除分片与非分片表维护
admin
2023-04-11 14:43:24
0

去年的笔记,接着发

一、如何移除分片

1、确认balancer已经开启

mongos> sh.getBalancerState()
true


2、移除分片

注:在admin db下执行命令。

mongos> use admin
switched to db admin
mongos> db.runCommand( { removeShard: "shard3" } )
{
	"msg" : "draining started successfully",
	"state" : "started",
	"shard" : "shard3",
	"ok" : 1
}


3、检查迁移的状态

同样执行

mongos> use admin
switched to db admin
mongos> db.runCommand( { removeShard: "shard3" } )
{
	"msg" : "draining ongoing",
	"state" : "ongoing",
	"remaining" : {
		"chunks" : NumberLong(3),
		"dbs" : NumberLong(0)
	},
	"ok" : 1
}

remaining中的chunks表示还有多少数据块未迁移。


4、移除未分片数据

In a cluster, a database with unsharded collections stores those collections only on a single shard.

That shard becomes the primary shard for that database. (Different databases in a cluster can have different primary shards.)


WARNING

Do not perform this procedure until you have finished draining the shard.


1)To determine if the shard you are removing is the primary shard for any of the cluster’s databases, issue one of the following methods:

sh.status()

db.printShardingStatus()

In the resulting document, the databases field lists each database and its primary shard.

For example, the following database field shows that the products database uses mongodb0 as the primary shard:

{  "_id" : "products",  "partitioned" : true,  "primary" : "mongodb0" }


2)To move a database to another shard, use the movePrimary command. For example, to migrate all remaining unsharded data from mongodb0 to mongodb1, 

issue the following command:

use admin

db.runCommand( { movePrimary: "products", to: "mongodb1" })       --products为db name

This command does not return until MongoDB completes moving all data, which may take a long time. 

The response from this command will resemble the following:

{ "primary" : "mongodb1", "ok" : 1 }


If you use the movePrimary command to move un-sharded collections, you must either restart all mongos instances,

 or use the flushRouterConfig command on all mongos instances before writing any data to the cluster. 

 This action notifies the mongos of the new shard for the database.


If you do not update the mongos instances’ metadata cache after using movePrimary, the mongos may not write data to the correct shard. 

To recover, you must manually intervene.

根据上面所说,迁移非分片表 时 最好停机,在运行db.runCommand( { movePrimary: "products", to: "mongodb1" })  命令完成之后,

刷新所有mongos后(所有mongos上运行db.runCommand("flushRouterConfig")),再对外提供服务。当然也可以重新启动所有mongos实例 。


5、完成迁移

mongos> use admin
switched to db admin
mongos> db.runCommand( { removeShard: "shard3" } )
{
	"msg" : "removeshard completed successfully",
	"state" : "completed",
	"shard" : "shard3",
	"ok" : 1
}

如果state为 completed,表示已完成迁移。


二、添加分片

1、首先确认balancer已经开启

mongos> sh.getBalancerState()
true

2、执行添加分片的命令

如果出现以下错误,删除目标shard3上的test1数据库,再次执行命令

mongos> sh.addShard("shard3/192.168.137.138:27019")
{
	"ok" : 0,
	"errmsg" : "can't add shard shard3/192.168.137.138:27019 because a local database 'test1' exists in another shard1:shard1/192.168.137.111:27017,192.168.137.75:27017"
}

mongos> sh.addShard("shard3/192.168.137.138:27019")
{ "shardAdded" : "shard3", "ok" : 1 }

最后运行sh.status()命令确认迁移是否成功,可能会花比较长的时间。



相关内容

热门资讯

徐巧芯剖析赖清德:最怕自己丢掉... 海峡导报综合报道 大罢免投票一周年纪念活动26日举行,台北市长蒋万安出席并怒轰,民进党一年过后仍没有...
中国红十字会总会紧急向广东调拨... 记者从中国红十字会总会了解到,针对台风“红霞”给广东造成的灾情,中国红十字会总会启动四级应急响应,紧...
这些少年,正被“毒蛋”围猎 李梦抽了几口电子烟,吐出了白色的烟雾,有一股浓烈的水果香味。随后,她看着自己握电子烟的手,跟身边人说...
蒋万安号召“倒阁”,卢秀燕认为... 海峡导报综合报道 台北市长蒋万安27日抛出震撼议题,表示多名民代向他提议推动“倒阁”,要求台行政机构...
特朗普将在白宫会见两位重要客人 俄乌战争仍未结束,美伊冲突又有升级风险。在此背景下,美国总统特朗普将在白宫接见乌克兰和以色列领导人。...
新租客打扫卧室柜子上掉落4万元... 近日,莲前西路某小区内,张倩签下一套房子的租赁合同。当天上午,她带着12岁的大女儿周馨怡和11岁的小...
六部门通告:禁止涉军队退役报废... 关于禁止涉军队退役报废装备销售活动的通告近年来,部分经营者在线上线下公开销售涉及我军退役报废装备(指...
九寨沟景区发生泥石流,部分道路... 7月26日,九寨沟风景名胜区管理局发布泥石流灾害通报:2026年7月26日15时50分,九寨沟景区局...
空调26度不凉是什么原因 从空调内部元器件来说,不凉的原因有可能是温度传感器出现故障了,也有可能是空调压缩机或者铜管出现问题,...
鲸鸿动能携手香港国际机场、鸿蒙...   2026 年 7 月 25 日,十余位鸿蒙车主组成的车队从珠海出发,经港珠澳大桥通关抵达香港国际...