Utiliza este procedimiento para analizar distribución de datos fragmentados. Puede usar esta información para determinar si habrá una gran cantidad de balanceo en su clúster.
Acerca de esta tarea
Este procedimiento muestra cómo puedes:
Actualiza tu clúster de 5.0 a 6.0.
Determina la distribución de tus datos particionados en el clúster utilizando la
$shardedDataDistributionetapa.Actualiza la configuración de tu balanceador, si es necesario.
Antes de comenzar
Mantener el balanceador apagado durante el proceso de actualización y a lo largo de este procedimiento. Una vez que tenga una comprensión de la equidad de sus colecciones bajo la nueva política de balanceo, puede volver a encender el balanceador.
Pasos
Actualiza tu clúster de 5.0 a 6.0.
Para actualizar tu clúster de 5.0 a 6.0, consulta Actualizar un clúster particionado a 6.0.
Conéctate a mongos usando mongosh.
Puedes conectarte a cualquier mongos del clúster.
Analiza la distribución de datos en tu clúster.
Para comprender cómo la distribución de datos de sus conjuntos afectará el equilibrado, utilice la etapa de agregación $shardedDataDistribution.
Para devolver todas las métricas de distribución de datos fragmentados, ejecute lo siguiente:
db.aggregate([ { $shardedDataDistribution: { } } ])
Ejemplo de salida:
[ { "ns": "test.names", "shards": [ { "shardName": "shard-1", "numOrphanedDocs": 0, "numOwnedDocuments": 6, "ownedSizeBytes": 366, "orphanedSizeBytes": 0 }, { "shardName": "shard-2", "numOrphanedDocs": 0, "numOwnedDocuments": 6, "ownedSizeBytes": 366, "orphanedSizeBytes": 0 } ] } ]
Si la diferencia entre la partición con la mayor ownedSizeBytes y la partición con la menor ownedSizeBytes está dentro del umbral de migración, se considera que la colección está equilibrada. Cuando el balanceador está habilitado para estas colecciones, no realiza migraciones.
(Opcional) Configura el balanceador en 6.0.
Si tu colección está desequilibrada y deseas controlar el comportamiento del balanceador, puedes utilizar uno o ambos de los siguientes métodos:
Configura el equilibrador para que solo esté activo en determinados momentos modificando la ventana de equilibrio.
Restringe las operaciones de balanceo a colecciones específicas deshabilitando el balanceador en las colecciones.
Modifique la ventana de balanceo
Cambia a la base de datos de configuración.
Ejecute el siguiente comando para pasar a la base de datos
config.use config Establece los horarios de inicio y fin de la ventana de balanceo.
Para configurar la ventana activa, usa el método
updateOne():db.settings.updateOne( { _id: "balancer" }, { $set: { activeWindow : { start : "<start-time>", stop : "<stop-time>" } } }, { upsert: true } ) Reemplaza
<start-time>y<end-time>con valores de tiempo utilizando valores de hora y minuto de dos dígitos (es decir,HH:MM) que especifican los límites de inicio y fin de la ventana de balanceo.Para valores de
HH, utilice valores de hora con un rango de00a23.Para el valor
MM, use valores de minutos que van desde00hasta59.
Para clústeres fragmentados autogestionados, MongoDB evalúa los tiempos de inicio y parada en relación con la zona horaria del miembro primario en el set de réplicas del servidor de configuración.
Para clústeres de Atlas, MongoDB evalúa las horas de inicio y paro en relación con la zona horaria UTC.
Nota
La ventana del balanceador debe ser suficiente para terminar la migración de todos los datos insertados durante el día.
Dado que las tasas de inserción de datos pueden cambiar según la actividad y los patrones de uso, asegúrate de que la ventana de equilibrio que elijas sea suficiente para satisfacer las necesidades de tu implementación.
(Opcional) Asegúrese de que la eliminación por rango sea síncrona.
Solo utilice este paso si desea restringir la eliminación de rango a la ventana de equilibrio.
Por defecto, el balanceador no espera a que se complete la fase de borrado de la migración en curso antes de iniciar la siguiente migración de fragmentos. Para que la fase de eliminación bloquee el inicio de la siguiente migración de fragmento, puedes establecer
_waitForDeletecomo verdadero.Actualiza el valor de
_waitForDeleteen la colecciónsettingsde la base de datosconfig. Por ejemplo:use config db.settings.updateOne( { "_id" : "balancer" }, { $set : { "_waitForDelete" : true } }, { upsert : true } )
Desactiva el balanceo para colecciones específicas
Por defecto, cada colección tiene el balance activo.
Para desactivar el balanceo para una colección específica, conéctate a un mongos con la shell mongosh y llama al método sh.disableBalancing().
Este ejemplo desactiva el balanceo en la colección students.grades:
sh.disableBalancing("students.grades")
El método sh.disableBalancing() acepta el namespace completo de la colección como su parámetro.
Vuelve a habilitar el balanceador en tu clúster.
Utilice este procedimiento si ha desactivado el balanceador y está listo para volver a activarlo:
Conecta a cualquier en el
mongosmongoshclúster usando la shell a través de shell.Emita una de las siguientes operaciones para habilitar el equilibrador:
Desde el shell
mongosh, ejecute:sh.startBalancer() Nota
Para habilitar el balanceador desde un controlador, utilice el comando balancerStart con la base de datos
admin, como en el siguiente ejemplo:db.adminCommand( { balancerStart: 1 } ) A partir de MongoDB 6.0.3, no se realiza la división automática de fragmentos. Esto se debe a las mejoras en la política de balanceo. Los comandos de división automática aún existen, pero no ejecutan ninguna operación. Para obtener más información, consulta Cambios en la política de balanceo.
En las versiones de MongoDB anteriores a la 6.0.3,
sh.startBalancer()también habilita la división automática para el clúster particionado.