Definición
removeShardElimina un fragmento de un Clúster fragmentado. Al
removeShardejecutar, 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.dbPathde todos los nodos del fragmento para eliminar los archivos del fragmento antes de poder volver a agregarlo.
Compatibilidad
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.
Sintaxis
El comando tiene la siguiente sintaxis:
db.adminCommand( { removeShard : <shardToRemove> } )
Comportamiento
No se realizan copias de seguridad del clúster durante la eliminación de fragmentos
No es posible realizar una copia de seguridad de los datos del clúster durante la eliminación de fragmentos.
Operacionesconcurrentes removeShard
Puede tener más de una operación en removeShard curso.
Requisitos de acceso
Si tiene habilitado,authorization debe tener el rol o cualquier clusterManager removeShard rol que incluya la acción.
Requisitos de migración de bases de datos
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.
Equilibrio de fragmentos
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.
Nivel de confirmación de escritura
mongos convierte la preocupación removeShard de escritura del "majority" comando a.
Flujos de cambio
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.
Operaciones de DDL
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.
Ejemplo
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 |
|---|---|
| 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 |
| 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") } } }