Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
Balanceador

Migrar fragmentos en un clúster fragmentado

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.

Volver

Gestionar