En la mayoría de las circunstancias, deberías dejar que el automático balanceador migrate chunks between shards. Sin embargo, es posible que desee migrar fragmentos manualmente en algunos casos:
Al predividir una colección vacía, migre los fragmentos manualmente para distribuirlos uniformemente entre los fragmentos. Use la predivisión en casos limitados para facilitar la ingesta masiva de datos.
Si el balanceador en un clúster activo no puede distribuir fragmentos dentro de la ventana de balanceo, entonces tendrás que migrar fragmentos manualmente.
Para migrar rangos manualmente, utilice el moveChunk dominio.
Para obtener más información sobre cómo el balanceador automático mueve los rangos entre particiones, consulte Balanceador de clúster.
Ejemplo
Migrar un solo fragmento
El siguiente ejemplo asume que el campo username es users la myapp clave de smith fragmento de una colección llamada en la base de datos y que el valor existe en el fragmento que se va a migrar. Migre el fragmento con el siguiente comando mongosh en.
db.adminCommand( { moveChunk : "myapp.users", find : {username : "smith"}, to : "mongodb-shard3.example.net" } )
Este comando mueve el fragmento que incluye el valor de la clave de partición "smith" a la partición llamado mongodb-shard3.example.net. El comando se bloqueará hasta que la migración esté completa.
Tip
Para devolver una lista de particiones, utiliza el comando listShards.
Ejemplo
Migrar uniformemente los fragmentos
Para migrar de manera uniforme los fragmentos de la colección myapp.users, coloque cada fragmento con prefijo en el siguiente fragmento del otro y ejecute los siguientes comandos en el shell de mongo:
var shServer = [ "sh0.example.net", "sh1.example.net", "sh2.example.net", "sh3.example.net", "sh4.example.net" ]; for ( var x=97; x<97+26; x++ ){ for( var y=97; y<97+26; y+=6 ) { var prefix = String.fromCharCode(x) + String.fromCharCode(y); db.adminCommand({moveChunk : "myapp.users", find : {email : prefix}, to : shServer[(y-97)/6]}) } }
Consulte Crear fragmentos en un clúster compartido para una introducción a la predivisión.
El comando tiene los moveChunk parámetros_secondaryThrottle y,writeConcern que determinan cuándo el balanceador procede con el siguiente documento del fragmento migratorio. Consulte el comando moveChunk para obtener más información.
Advertencia
El comando moveChunk puede arrojar el siguiente mensaje de error:
The collection's metadata lock is already taken.
Esto ocurre cuando los clientes tienen demasiados cursores abiertos que acceden al fragmento que se está migrando. Puede esperar a que los cursores completen sus operaciones o cerrarlos manualmente.