Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

Remover fragmentos de un clúster con particiones

Para remover un Partición debe asegurarse de que los datos de la partición se migren a las particiones restantes en el clúster. Este procedimiento describe cómo migrar datos de forma segura y remover una partición.

  1. Este procedimiento utiliza el método sh.moveCollection() para mover colecciones fuera de la partición eliminada. Antes de comenzar este procedimiento, revise las moveCollection consideraciones y los requisitos para comprender el comportamiento del comando.

  2. Para remover una partición, primero conéctese a una de las instancias mongos del clúster usando mongosh.

Nota

Al remover múltiples particiones, remuévelos simultáneamente en lugar de uno a la vez. Eliminar una partición a la vez provoca que el balanceador drene los datos a otras particiones restantes. Una partición solo puede participar en una migración de fragmentos a la vez, por lo que remover una partición limita el rendimiento de la migración de datos.

1

Para migrar datos desde una partición, el proceso balanceador debe estar habilitado. Para verificar el estado del balanceador, utiliza el método sh.getBalancerState():

sh.getBalancerState()

Si la operación devuelve true, el balanceador está habilitado.

Si la operación devuelve false, consulta Activar el balanceador.

2

Para encontrar el nombre de la partición, ejecuta el comando listShards:

db.adminCommand( { listShards: 1 } )

El campo shards._id contiene el nombre de la partición.

3

Ejecuta el comando startShardDraining para comenzar a mover fragmentos de las colecciones particionadas a las demás particiones del clúster:

db.adminCommand( { startShardDraining: "shard04" } )

Si necesitas remover varias particiones, puedes iniciar los procesos de drenaje para que se ejecuten en paralelo.

4

Cuando creas una colección en mongos y no llamas a shardCollection, dicha colección permanece sin fragmentar y MongoDB la almacena íntegramente en un shard particular del clúster. Las bases de datos que usan la partición como primario también almacenan sus colecciones en la partición.

Si la partición que deseas eliminar contiene una colección no fragmentada o una base de datos principal, necesitas mover la colección a otra partición.

Para identificar si la partición que deseas remover contiene estas colecciones y ver el estado de drenaje, ejecuta el comando shardDrainingStatus y revisa el arreglo para el campo de salida collectionsToMove:

db.adminCommand( { shardDrainingStatus: "shard04" } )
{
msg: "draining ongoing",
state: "ongoing",
remaining: {
chunks: Long(2),
dbs: Long(2),
jumboChunks: Long(0),
collectionsToMove: Long(2)
},
shard: "shard04",
note: "you need to call moveCollection for collectionsToMove and afterwards movePrimary for the dbsToMove",
dbsToMove: [
"accounts",
],
collectionsToMove: [
"accounts.us-east",
"accounts.us-west",
"locations.us",
],
ok: 1,
operationTime: Timestamp(1575399086, 1655),
$clusterTime: {
clusterTime: Timestamp(1575399086, 1655),
signature: {
hash: BinData(0,"XBrTmjMMe82fUtVLRm13GBVtRE8="),
keyId: Long("6766255701040824328")
}
}
}

Cualquier colección encontrada en el campo collectionsToMove es una colección almacenada en esta partición. Antes de que puedas remover la partición, primero debes mover estas colecciones a otra partición.

Para mover una colección a otra partición, utiliza el comando moveCollection:

db.adminCommand( {
moveCollection: "accounts.us-east",
toShard: "shard05"
} )
5

Los clústeres fragmentados designan una partición específica para que actúe como la partición primaria de una base de datos. Si la partición que desea remover es una primaria, debe moverlo a una partición diferente.

Para identificar los principales, ejecute el comando shardDrainingStatus y verifique el arreglo en el campo de salida de dbsToMove.

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

Cada base de datos mostrada en el campo dbsToMove es una base de datos que necesitas mover a una partición diferente.

Para mover la base de datos, use el comando movePrimary:

db.adminCommand( {
movePrimary: "accounts",
to: "shard05"
})
6

Antes de remover la partición, compruebe que la operación de drenaje esté completa.

Para comprobar el estado de la operación de vaciado, ejecute el comando shardDrainingStatus:

db.adminCommand( { shardDrainingStatus: "shard04" } )
{
"msg" : "draining completed successfully",
"state" : "drainingComplete",
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1771839836, 139),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1771839836, 139)
}

Cuando el campo state devuelve drainingComplete para la partición que deseas remover, el proceso de drenaje se haya completado. Ahora puedes remover la partición.

Para remover la partición, ejecutar el comando commitShardRemoval:

db.adminCommand( { commitShardRemoval: "shard04" } )
{
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1771840037, 12),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1771840037, 12)
}

Si la partición no está completamente vaciada, el comando devuelve un error.

Volver

Añadir un nodo a una partición

En esta página