Para eliminar un Fragmento: debe asegurarse de que sus datos se migren a los fragmentos restantes del clúster. Este procedimiento describe cómo migrar datos de forma segura y cómo eliminar un fragmento.
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.
Este procedimiento describe cómo eliminar un fragmento de un clúster. No utilice este procedimiento para migrar un clúster completo a un nuevo hardware. Para migrar, consulte Migrar un clúster fragmentado autoadministrado a un hardware diferente.
Para eliminar un fragmento, primero conéctese a uno de los clústeres
mongos mongosh instancias que usan. Luego, utilice la secuencia de tareas de este documento para eliminar un fragmento del clúster.
Considerations
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.
Puede reiniciar un clúster de forma segura durante la eliminación de un fragmento. Si reinicia un clúster durante un proceso de vaciado en curso, este continuará automáticamente después de que se reinicien los componentes del clúster. MongoDB registra el estado del vaciado del fragmento
config.shardsen la colección.
Asegúrese de que el proceso de balanceo esté habilitado
Para migrar correctamente los datos desde un fragmento, el proceso de balanceo debe estar habilitado. Compruebe el estado del balanceador con el sh.getBalancerState() asistente en. Para obtener más información, consulte la sección mongosh sobre operaciones del balanceador.
Determinar el nombre del fragmento a eliminar
Para determinar el nombre del fragmento, conéctese a una mongos instancia con mongosh y:
Utilice el comando, como en el siguiente
listShardsejemplo:db.adminCommand( { listShards: 1 } ) Ejecute
sh.status()el métododb.printShardingStatus()o.
El campo shards._id enumera el nombre de cada fragmento.
Eliminar fragmentos del fragmento
Desde la admin base de datos, ejecute el removeShard comando. Esto inicia el vaciado de fragmentos del fragmento que está eliminando a otros fragmentos del clúster. Por ejemplo, para un fragmento mongodb0 llamado, ejecute:
db.adminCommand( { removeShard: "mongodb0" } )
mongos convierte la preocupación removeShard de escritura del "majority" comando a.
Esta operación retorna con la siguiente respuesta:
{ "msg" : "draining started successfully", "state" : "started", "shard" : "mongodb0", "note" : "you need to drop or movePrimary these databases", "dbsToMove" : [ "fiz", "buzz" ], "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 fragmentos del fragmento mongodb0 a otros fragmentos del clúster. Estas migraciones se realizan lentamente para evitar una carga excesiva en el clúster. Dependiendo de la capacidad de la red y la cantidad de datos, esta operación puede tardar desde unos minutos hasta varios días en completarse.
Nota
La salida incluye el campo, que indica las dbsToMove bases de datos, si las hay, para las que el fragmento es el principal. Una vez vaciados todos los fragmentos del fragmento, debe movePrimary usar para las bases de datos o, alternativamente, eliminarlas (lo que elimina los archivos de datos asociados).
Comprobar el estado de la migración
Para comprobar el progreso de la migración en cualquier etapa del proceso, vuelva a ejecutar desde removeShard la admin base de datos. Por ejemplo, para un fragmento mongodb0 llamado, ejecute:
db.adminCommand( { removeShard: "mongodb0" } )
mongos convierte la preocupación removeShard de escritura del "majority" comando a.
El comando devuelve un resultado similar al siguiente:
{ "msg" : "draining ongoing", "state" : "ongoing", "remaining" : { "chunks" : NumberLong(2), "dbs" : NumberLong(2), "jumboChunks" : NumberLong(0) }, "note" : "you need to drop or movePrimary these databases", "dbsToMove" : [ "fizz", "buzz" ], "ok" : 1, "operationTime" : Timestamp(1575399086, 1655), "$clusterTime" : { "clusterTime" : Timestamp(1575399086, 1655), "signature" : { "hash" : BinData(0,"XBrTmjMMe82fUtVLRm13GBVtRE8="), "keyId" : NumberLong("6766255701040824328") } } }
En la salida, el campo remaining incluye los siguientes campos:
Campo | Descripción |
|---|---|
| Número total de fragmentos que quedan actualmente en el fragmento. |
| Número total de bases de datos cuyo fragmento principal es el fragmento. Estas bases de datos se especifican en el |
| Del número total Si Una vez que se |
Continúe verificando el estado del comando hasta que el número de fragmentos removeShard restantes 0 sea.
db.adminCommand( { removeShard: "mongodb0" } )
Mover bases de datos a otro fragmento principal
Si el fragmento es el principal de una o más bases de datos del clúster, debe configurar dicha base de datos para que use un fragmento diferente como principal. enumera las bases de datos que necesita mover enremoveShard el dbsToMove campo de la salida del comando. Si el fragmento no es el principal de ninguna base de datos, pase a la siguiente tarea: Finalizar la migración.
Para mover una base de datos a otro fragmento, utilice el movePrimary comando.
Importante
Para garantizar una migración sin problemas, consulte las consideraciones en la movePrimary documentación del comando antes de movePrimary ejecutar.
Para migrar la base de datos fizz de mongodb0 a mongodb1, emita el siguiente comando:
db.adminCommand( { movePrimary: "fizz", to: "mongodb1" })
mongos usa para escribir "majority" preocupación movePrimary por.
Este comando no regresa hasta que MongoDB complete la transferencia de todos los datos. La respuesta de este comando será similar a la siguiente:
{ "ok" : 1, "operationTime" : Timestamp(1575400369, 9), "$clusterTime" : { "clusterTime" : Timestamp(1575400369, 9), "signature" : { "hash" : BinData(0,"2Nz8QCcVXB0LJLm1hsXfpTCaM0M="), "keyId" : NumberLong("6766255701040824328") } } }
Finalizar la migración
Para limpiar toda la información de metadatos y finalizar la eliminación, ejecuta removeShard nuevamente. Por ejemplo, para una partición llamada mongodb0, ejecuta:
db.adminCommand( { removeShard: "mongodb0" } )
mongos convierte la preocupación removeShard de escritura del "majority" comando a.
Al finalizar aparece un mensaje de éxito:
{ "msg" : "removeshard completed successfully", "state" : "completed", "shard" : "mongodb0", "ok" : 1, "operationTime" : Timestamp(1575400370, 2), "$clusterTime" : { "clusterTime" : Timestamp(1575400370, 2), "signature" : { "hash" : BinData(0,"JjSRciHECXDBXo0e5nJv9mdRG8M="), "keyId" : NumberLong("6766255701040824328") } } }
Una vez que el valor del campo state esté "completo", puede detener de forma segura las instancias que comprenden el fragmento mongodb0.