Docs Menu
Docs Home
/ /
Balanceador

Migrar fragmentos en un clúster fragmentado

En la mayoría de las circunstancias, debe dejar que el sistema automático El balanceador migra fragmentos entre fragmentos. Sin embargo, en algunos casos, es posible que desee migrar fragmentos manualmente:

  • 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 equilibrador de un clúster activo no puede distribuir fragmentos dentro de la ventana de equilibrado, tendrá que migrar los fragmentos manualmente.

Para migrar rangos manualmente, utilice el moveChunk dominio.

Para obtener más información sobre cómo el balanceador automático mueve rangos entre fragmentos, 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 clave de fragmento "smith" al mongodb-shard3.example.netfragmento. El comando se bloqueará hasta que se complete la migración.

Tip

Para devolver una lista de fragmentos, utilice el listShards comando.

Ejemplo

Migrar fragmentos de manera uniforme

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 fragmentado para obtener una introducción a la división previa.

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 puede producir el siguiente mensaje de moveChunk 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