- Reference >
- Database Commands >
- Sharding Commands >
- removeShard
removeShard¶
-
removeShard
¶ Removes a shard from a sharded cluster. When you run
removeShard
, MongoDB drains the shard by using the balancer to move the shard’s chunks to other shards in the cluster. Once the shard is drained, MongoDB removes the shard from the cluster.To run
removeShard
, use thedb.runCommand( { <command> } )
method.
Behavior¶
You can only remove one shard at a time.
removeShard
returns an error if an existing
removeShard
operation is in progress.
Access Requirements¶
You must run removeShard
while connected to a
mongos
. Issue the command against the admin
database or
use the sh._adminCommand()
helper.
If you have authorization
enabled, you must have the
clusterManager
role or any role that
includes the removeShard
action.
Database Migration Requirements¶
Each database in a sharded cluster has a primary shard. If the shard you
want to remove is also the primary of one of the cluster’s databases, then
you must manually move the databases to a new shard after migrating
all data from the shard. See the movePrimary
command and
the Remove Shards from an Existing Sharded Cluster for more information.
Chunk Balancing¶
When you remove a shard in a cluster with an uneven chunk distribution, the balancer first removes the chunks from the draining shard and then balances the remaining uneven chunk distribution.
Example¶
From the mongo
shell, the removeShard
operation resembles the following:
db.adminCommand( { removeShard : "bristol01" } )
Replace bristol01
with the name of the shard to remove. When you
run removeShard
, the command returns immediately,
with a message that resembles the following:
{
"msg" : "draining started successfully",
"state" : "started",
"shard" : "bristol01",
"note" : "you need to drop or movePrimary these databases",
"dbsToMove" : [
"fizz",
"buzz"
],
"ok" : 1
}
The balancer begins migrating chunks from the shard named bristol01
to other shards in the cluster. These migrations happen slowly in order to
avoid placing undue load on the cluster. Since bristol01
is
the primary shard for the fizz
and buzz
databases,
removeShard
notes that you must use the
movePrimary
command to move those
databases to another shard. Alternatively, you can use dropDatabase
to drop the database and delete its associated data files.
Note
If the shard you are removing is not the primary shard for any
databases, the dbsToMove
array will be empty and
removeShard
can complete the migration without
intervention.
If you run the command again, removeShard
returns output
that resembles the following:
{
"msg" : "draining ongoing",
"state" : "ongoing",
"remaining" : {
"chunks" : NumberLong(2),
"dbs" : NumberLong(2)
},
"note" : "you need to drop or movePrimary these databases",
"dbsToMove" : [
"fizz",
"buzz"
],
"ok" : 1
}
The remaining
document specifies how many chunks and databases
remain on the shard. Use the movePrimary
command to move
each database listed in dbsToMove
to another shard.
Alternatively, use dropDatabase
to drop the database.
When the balancer completes moving all chunks off of the shard and
you have either moved or dropped any database listed in dbsToMove
,
running removeShard
again returns output that
resembles the following:
{
"msg" : "removeshard completed successfully",
"state" : "completed",
"shard" : "bristol01",
"ok" : 1
}