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

Ejecute el comando para comenzar a mover fragmentos de las colecciones fragmentadas a los otros fragmentos del startShardDraining clúster:

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

Si necesita eliminar varios fragmentos, puede iniciar los procesos de drenaje para que se ejecuten en paralelo.

4

Cuando se crea una colección en mongos y no se llama a, esa colección permanece sin fragmentar y MongoDB la almacena completamente en un fragmento específico del clúster. Las bases de datos que utilizan el fragmento como principal también almacenan sus colecciones en shardCollection él.

Si el fragmento que desea eliminar contiene una colección no fragmentada o una base de datos principal, deberá mover la colección a otro fragmento.

Para identificar si el fragmento que desea eliminar contiene esta colección y para ver el estado de drenaje, ejecute el comando y verifique el array para shardDrainingStatus el collectionsToMove campo de salida:

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 que se encuentre en el campo collectionsToMove es una colección almacenada en este fragmento. Antes de poder eliminar el fragmento, primero debe mover estas colecciones a otro fragmento.

Para mover una colección a otro fragmento, utilice el moveCollection comando:

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

En los clústeres fragmentados, se designa una partición específica como partición principal de la base de datos. Si la partición que desea eliminar es la principal, deberá moverla a otra partición.

Para identificar los elementos primarios, ejecute el comando y compruebe la matriz en shardDrainingStatus el dbsToMove campo de salida.

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 que se muestra en el campo dbsToMove es una base de datos que debe mover a un fragmento diferente.

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

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

Antes de retirar el fragmento, compruebe que el drenaje se haya completado.

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

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 el fragmento que desea eliminar, el proceso de vaciado ha finalizado. Ahora puede eliminar el fragmento.

Para eliminar el fragmento, ejecute el commitShardRemoval comando:

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

Si el fragmento no se vacía por completo, el comando devuelve un error.

Volver

Añadir un nodo a una partición

En esta página