Docs Menu
Docs Home
/ /

removeShard (comando de base de datos)

removeShard

Elimina un fragmento de un Clúster fragmentado. Al removeShard ejecutar, MongoDB drena el fragmento mediante el balanceador para mover sus fragmentos a otros fragmentos del clúster.

Si el fragmento contiene colecciones no fragmentadas, debe vaciarlas todas. A partir de MongoDB,8.0 puede usar para mover colecciones no fragmentadas. Para obtener más información sobre el procedimiento para vaciar un fragmento,sh.moveCollection() consulte Eliminar fragmentos de un clúster fragmentado.

Una vez que se drena el fragmento, MongoDB lo elimina del clúster.

Nota

Si desea volver a agregar un fragmento eliminado a su clúster fragmentado, debe borrar storage.dbPath de todos los nodos del fragmento para eliminar los archivos del fragmento antes de poder volver a agregarlo.

Este comando está disponible en implementaciones alojadas en los siguientes entornos:

  • MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB

  • MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.

Nota

Este comando no es compatible con MongoDB Atlas. Consulte "Modificar su clúster fragmentado de Atlas" para agregar o eliminar fragmentos de su clúster de Atlas.

El comando tiene la siguiente sintaxis:

db.adminCommand(
{
removeShard : <shardToRemove>
}
)

No es posible realizar una copia de seguridad de los datos del clúster durante la eliminación de fragmentos.

Puede tener más de una operación en removeShard curso.

Si tiene habilitado,authorization debe tener el rol o cualquier clusterManager removeShard rol que incluya la acción.

Cada base de datos de un clúster fragmentado tiene un fragmento principal. Si el fragmento que desea eliminar también es el principal de una de las bases de datos del clúster, deberá mover manualmente las bases de datos a un nuevo fragmento después de migrar todos los datos desde este.movePrimary Consulte el comando y la sección "Eliminar fragmentos de un clúster fragmentado" para obtener más información.

Cuando se elimina un fragmento en un clúster con una distribución de fragmentos desigual, el equilibrador primero elimina los fragmentos del fragmento de drenaje y luego equilibra la distribución de fragmentos desigual restante.

Tip

mongos convierte la preocupación removeShard de escritura del "majority" comando a.

La eliminación de un fragmento puede provocar que un cursor de flujo de cambio abierto se cierre y que el cursor de flujo de cambio cerrado no pueda reanudarse por completo.

Si removeShard ejecuta mientras su clúster ejecuta una operación DDL (operación que modifica una colección reshardCollection como), removeShard solo se ejecuta después de que finalice la operación DDL simultánea.

A partir mongosh de, la operación se asemeja a la removeShard siguiente:

db.adminCommand( { removeShard : "bristol01" } )

Reemplace bristol01 con el nombre del fragmento que desea eliminar. Al ejecutar, el comando muestra un mensaje similar al removeShard siguiente:

{
"msg" : "draining started successfully",
"state" : "started",
"shard" : "bristol01",
"note" : "you need to call moveCollection for collectionsToMove and afterwards movePrimary for the dbsToMove",
"dbsToMove" : [
"fizz",
"buzz"
],
"collectionsToMove" : [
"fizz.coll1",
"buzz.coll1"
],
"ok" : 1,
"operationTime" : Timestamp(1575398919, 2),
"$clusterTime" : {
"clusterTime" : Timestamp(1575398919, 2),
"signature" : {
"hash" : BinData(0,"Oi68poWCFCA7b9kyhIcg+TzaGiA="),
"keyId" : Long("6766255701040824328")
}
}
}

El balanceador comienza a migrar ("drenar") fragmentos del fragmento bristol01 a otros fragmentos del clúster. Estas migraciones se realizan lentamente para evitar una carga excesiva en el clúster.

Si ejecuta el comando nuevamente, removeShard dará el estado actual del proceso. Por ejemplo, si la operación está en un estado ongoing, el comando devuelve un resultado similar a lo siguiente:

{
"msg" : "draining ongoing",
"state" : "ongoing",
"remaining" : {
"chunks" : Long(2),
"dbs" : Long(2),
"jumboChunks" : Long(0),
"collectionsToMove": Long(2)
},
"note" : "you need to call moveCollection for collectionsToMove and afterwards movePrimary for the dbsToMove",
"dbsToMove" : [
"fizz",
"buzz"
],
"collectionsToMove" : [
"fizz.coll1",
"buzz.coll1"
],
"ok" : 1,
"operationTime" : Timestamp(1575399086, 1655),
"$clusterTime" : {
"clusterTime" : Timestamp(1575399086, 1655),
"signature" : {
"hash" : BinData(0,"XBrTmjMMe82fUtVLRm13GBVtRE8="),
"keyId" : Long("6766255701040824328")
}
}
}

En la salida, el campo remaining incluye los siguientes campos:

Campo
Descripción

chunks

Número total de fragmentos que quedan actualmente en el fragmento.

dbs

Número total de bases de datos cuyo fragmento principal es el fragmento. Estas bases de datos se especifican en el dbsToMove campo de salida.

jumboChunks

Del número total chunks de, el número que son gigantes.

Si jumboChunks es mayor 0 que, espere hasta que solo jumboChunks queden en el fragmento. Una vez que solo queden los fragmentos jumbo, debe borrar manualmente la marca jumbo antes de que se complete el vaciado. Consulte Borrar la marca.jumbo

Una vez que se jumbo borra el indicador, el balanceador puede migrar estos fragmentos. Para obtener más información sobre el procedimiento de migración, consulte Procedimiento de migración de rangos.

collectionsToMove

Número total de colecciones no fragmentadas que necesita mover desde el fragmento.

Continúe verificando el estado del removeShard comando (es decir, vuelva a ejecutar el comando) hasta que el número de fragmentos restantes 0 sea.

{
"msg" : "draining ongoing",
"state" : "ongoing",
"remaining" : {
"chunks" : Long(0), // All chunks have moved
"dbs" : Long(2),
"jumboChunks" : Long(0),
"collectionsToMove": Long(2)
},
"note" : "you need to call moveCollection for collectionsToMove and afterwards movePrimary for the dbsToMove",
"dbsToMove" : [
"fizz",
"buzz"
],
"collectionsToMove" : [
"fizz.coll1",
"buzz.coll1"
],
"ok" : 1,
"operationTime" : Timestamp(1575400343, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1575400343, 1),
"signature" : {
"hash" : BinData(0,"9plu5B/hw4uWAgEmjjBP3syw1Zk="),
"keyId" : Long("6766255701040824328")
}
}
}

Después de que el balanceador drene todos los fragmentos del fragmento, es posible que tengas que mover manualmente tus colecciones y bases de datos fuera del fragmento drenado.

Si la removeShard salida contiene colecciones en el collectionsToMove campo, utilice para mover esas colecciones a un fragmento distinto del fragmento de drenaje o eliminar las colecciones (lo que elimina los archivos de datos moveCollection asociados).

Si la removeShard salida contiene bases de datos en el dbsToMove campo, utilice para esas bases movePrimary de datos o elimine las bases de datos (lo que elimina los archivos de datos asociados).

Nota

Para obtener el mejor rendimiento, mueva sus colecciones antes de mover sus bases de datos.

Una vez que el balanceador haya terminado de mover todos los fragmentos del fragmento y usted haya gestionado los dbsToMove y,collectionsToMove removeShard podrá finalizar. Al ejecutar removeShard de nuevo, se obtendrá un resultado similar al siguiente:

{
"msg" : "removeshard completed successfully",
"state" : "completed",
"shard" : "bristol01",
"ok" : 1,
"operationTime" : Timestamp(1575400370, 2),
"$clusterTime" : {
"clusterTime" : Timestamp(1575400370, 2),
"signature" : {
"hash" : BinData(0,"JjSRciHECXDBXo0e5nJv9mdRG8M="),
"keyId" : Long("6766255701040824328")
}
}
}

Volver

refinar clave de fragmento de colección

En esta página