- Sharding >
- Remove Shards from an Existing Sharded Cluster
Remove Shards from an Existing Sharded Cluster¶
On this page
To remove a shard you must ensure the shard’s data is migrated to the remaining shards in the cluster. This procedure describes how to safely migrate data and how to remove a shard.
This procedure describes how to safely remove a single shard. Do not use this procedure to migrate an entire cluster to new hardware. To migrate an entire shard to new hardware, migrate individual shards as if they were independent replica sets.
To remove a shard, first connect to one of the cluster’s
mongos
instances using mongo
shell. Then follow
the ordered sequence of tasks on this page:
- Ensure the Balancer Process is Active
- Determine the Name of the Shard to Remove
- Remove Chunks from the Shard
- Check the Status of the Migration
- Move Unsharded Data
- Finalize the Migration
Ensure the Balancer Process is Active¶
To successfully migrate data from a shard, the balancer process
must be active. Check the balancer state using the
sh.getBalancerState()
helper in the mongo
shell.
For more information, see the section on balancer operations.
Determine the Name of the Shard to Remove¶
To determine the name of the shard, connect to a mongos
instance with the mongo
shell and either:
Use the
listShards
command, as in the following:Run either the
sh.status()
or thedb.printShardingStatus()
method.
The shards._id
field lists the name of each shard.
Remove Chunks from the Shard¶
Run the removeShard
command. This begins “draining” chunks
from the shard you are removing to other shards in the cluster. For
example, for a shard named mongodb0
, run:
This operation returns immediately, with the following response:
Depending on your network capacity and the amount of data, this operation can take from a few minutes to several days to complete.
Check the Status of the Migration¶
To check the progress of the migration at any stage in the process, run
removeShard
. For example, for a shard named mongodb0
, run:
The command returns output similar to the following:
In the output, the remaining
document displays the remaining number
of chunks that MongoDB must migrate to other shards and the number of
MongoDB databases that have “primary” status on this shard.
Continue checking the status of the removeShard command until the
number of chunks remaining is 0
. Then proceed to the next step.
Move Unsharded Data¶
If the shard is the primary shard for one or more databases in the cluster, then the shard will have unsharded data. If the shard is not the primary shard for any databases, skip to the next task, Finalize the Migration.
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.
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:
In the resulting document, the
databases
field lists each database and its primary shard. For example, the followingdatabase
field shows that theproducts
database usesmongodb0
as the primary shard:To move a database to another shard, use the
movePrimary
command. For example, to migrate all remaining unsharded data frommongodb0
tomongodb1
, issue the following command: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:
Finalize the Migration¶
To clean up all metadata information and finalize the removal, run
removeShard
again. For example, for a shard named
mongodb0
, run:
A success message appears at completion:
Once the value of the stage
field is “completed”, you may safely
stop the processes comprising the mongodb0
shard.