Docs Menu
Docs Home
/ /

Hardware autogestionado por niveles para diferentes SLA o SLO

En clústeres fragmentados, puedes crear Zonas de datos fragmentados según la clave de fragmento. Puede asociar cada zona con uno o más fragmentos del clúster. Un fragmento puede asociarse con cualquier número de zonas. En un clúster equilibrado, MongoDB migra los fragmentos cubiertos por una zona únicamente a los fragmentos asociados a ella.

Tip

Al definir las zonas y sus rangos antes de fragmentar una colección vacía o inexistente, la operación de recopilación de fragmentos crea fragmentos para los rangos de zona definidos, así como fragmentos adicionales para cubrir todo el rango de valores de clave de fragmento, y realiza una distribución inicial de fragmentos basada en los rangos de zona. Esta creación y distribución inicial de fragmentos permite una configuración más rápida de la fragmentación por zonas. Tras la distribución inicial, el balanceador gestiona la distribución de fragmentos en adelante.

Consulte Zonas predefinidas y rangos de zonas para una colección vacía o inexistente para ver un ejemplo.

Este tutorial utiliza zonas para enrutar documentos según la fecha de creación, ya sea a fragmentos zonificados para admitir documentos recientes o a aquellos zonificados para admitir documentos archivados.

Los siguientes son algunos ejemplos de casos de uso para segmentar datos según el Acuerdo de Nivel de Servicio (SLA) o el Objetivo de Nivel de Servicio (SLO):

  • Una aplicación requiere proporcionar acceso de baja latencia a documentos insertados o actualizados recientemente

  • Una aplicación requiere priorizar el acceso de baja latencia a un rango o subconjunto de documentos

  • Una aplicación que se beneficia al garantizar que rangos específicos o subconjuntos de datos se almacenen en servidores con hardware que se adapta a los SLA para acceder a esos datos.

El siguiente diagrama ilustra un clúster fragmentado que utiliza zonas basadas en hardware para satisfacer los SLA o SLO de acceso a datos.

Diagrama de la arquitectura del clúster fragmentado para SLA escalonados.

Una aplicación para compartir fotos requiere acceso rápido a las fotos subidas en los últimos 6 meses. La aplicación almacena la ubicación de cada foto junto con sus metadatos en el photoshare base de datos bajo la colección data.

Los siguientes documentos representan fotos cargadas por un solo usuario:

{
"_id" : 10003010,
"creation_date" : ISODate("2012-12-19T06:01:17.171Z"),
"userid" : 123,
"photo_location" : "example.net/storage/usr/photo_1.jpg"
}
{
"_id" : 10003011,
"creation_date" : ISODate("2013-12-19T06:01:17.171Z"),
"userid" : 123,
"photo_location" : "example.net/storage/usr/photo_2.jpg"
}
{
"_id" : 10003012,
"creation_date" : ISODate("2016-01-19T06:01:17.171Z"),
"userid" : 123,
"photo_location" : "example.net/storage/usr/photo_3.jpg"
}

Tenga en cuenta que solo el documento con _id : 10003012 se cargó durante el último año (a partir de junio 2016).

La colección de fotografías utiliza el índice { creation_date : 1 } como clave de fragmento.

El campo creation_date en cada documento permite crear zonas en la fecha de creación.

La implementación del clúster fragmentado actualmente consta de tres fragmentos.

Diagrama de la arquitectura del clúster fragmentado para SLA escalonados.

La aplicación requiere agregar cada fragmento a una zona según su nivel de hardware. Cada nivel de hardware representa una configuración de hardware específica diseñada para cumplir un SLA o SLO determinado.

Diagrama de la arquitectura del clúster fragmentado para SLA escalonados.
Nivel rápido ("reciente")

Estas son las máquinas de más rápido rendimiento, con grandes cantidades de RAM, discos SSD rápidos y CPU potentes.

La zona requiere un rango con:

  • un límite inferior de { creation_date : ISODate(YYYY-mm-dd)}, donde el año, mes y fecha especificados por YYYY-mm-dd están dentro de los últimos 6 meses.

  • un límite superior de { creation_date : MaxKey }.

Nivel de archivo ("archivo")

Estas máquinas utilizan menos RAM, discos más lentos y CPU más básicas. Sin embargo, tienen mayor capacidad de almacenamiento por servidor.

La zona requiere un rango con:

  • un límite inferior de { creation_date : MinKey }.

  • un límite superior de { creation_date : ISODate(YYYY-mm-dd)}, donde el año, el mes y la fecha coinciden con los valores utilizados para el límite inferior del nivel recent.

Nota

Los MinKey valores y son valores especiales reservados para comparaciones.MaxKey

A medida que aumentan las necesidades de rendimiento, agregar fragmentos adicionales y asociarlos a la zona adecuada según su nivel de hardware permite que el clúster se escale horizontalmente.

Al definir rangos de zonas según intervalos de tiempo, considere las ventajas de actualizarlos con poca frecuencia frente a la cantidad de datos que deben migrarse en cada actualización. Por ejemplo, establecer un límite de 1 años para que los datos se consideren "recientes" probablemente cubra más datos que establecer un límite de 1 meses. Si bien se requieren más migraciones al rotar en una escala de 1 meses, la cantidad de documentos que deben migrarse es menor que al rotar en una escala de 1 años.

Con zonas, si un documento insertado o actualizado coincide con una zona configurada, solo se puede escribir en un fragmento dentro de esa zona.

MongoDB puede guardar documentos que no coinciden con una zona configurada en cualquier partición del clúster.

Nota

El comportamiento descrito anteriormente requiere que el clúster se encuentre en un estado estable sin fragmentos que violen una zona configurada. Consulte la siguiente sección sobre balanceador para obtener más información.

MongoDB puede enrutar consultas a un fragmento específico si la consulta incluye la clave del fragmento.

Por ejemplo, MongoDB puede intentar una operación de lectura dirigida en la siguiente consulta porque incluye creation_date en el documento de consulta:

photoDB = db.getSiblingDB("photoshare")
photoDB.data.find( { "creation_date" : ISODate("2015-01-01") } )

Si el documento solicitado se encuentra dentro del rango de zona recent, MongoDB enviará esta query a las particiones dentro de esa zona, asegurando así una lectura más rápida en comparación con una operación de lectura por difusiónen todo el clúster.

El balanceador migra los fragmentos al fragmento correspondiente respetando las zonas configuradas. Hasta la migración, los fragmentos pueden contener fragmentos que infrinjan las zonas configuradas. Una vez completado el balanceo, los fragmentos solo deben contener fragmentos cuyos rangos no infrinjan las zonas asignadas.

Añadir o eliminar zonas o rangos de zonas puede provocar migraciones de fragmentos. Según el tamaño del conjunto de datos y la cantidad de fragmentos afectados por una zona o rango de zonas, estas migraciones pueden afectar el rendimiento del clúster. Considere ejecutar el balanceador durante períodos programados específicos. Consulte "Programar el período de balanceo" para obtener un tutorial sobre cómo configurar un período de programación.

Para los clústeres fragmentados que se ejecutan clusterManager con admin control de acceso basado en roles en implementaciones autoadministradas, autentíquese como un usuario con al menos el rol en la base de datos.

Debe estar conectado a un para crear zonas o rangos de zonas. No puede crear zonas ni rangos de zonas conectándose directamente a mongos un shard.

1

El balanceador debe estar deshabilitado en todo el clúster fragmentado para garantizar que no se realicen migraciones mientras se configuran las nuevas zonas.

Utilice para detener el balanceador del sh.stopBalancer() clúster.

sh.stopBalancer()

Utilice para comprobar si el proceso de balanceo está en ejecución. Espere a que se completen las rondas de balanceo actuales antes de sh.isBalancerRunning() continuar.

2

Agregue shard0000 a la zona recent.

sh.addShardTag("shard0000", "recent")

Agregue shard0001 a la zona recent.

sh.addShardTag("shard0001", "recent")

Agregue shard0002 a la zona archive.

sh.addShardTag("shard0002", "archive")

Puede revisar la zona asignada a cualquier fragmento determinado sh.status() ejecutando.

3

Define el rango de fotos recientes y asócialo a la recent zona mediante el método. Este método sh.addTagRange() requiere:

  • el espacio de nombres completo de la colección de destino.

  • el límite inferior inclusivo del rango.

  • el límite superior exclusivo del rango.

  • la zona.

sh.addTagRange(
"photoshare.data",
{ "creation_date" : ISODate("2016-01-01") },
{ "creation_date" : MaxKey },
"recent"
)

Define el rango de fotos antiguas y asócialo a la archive zona mediante el método. Este método sh.addTagRange() requiere:

  • el espacio de nombres completo de la colección de destino.

  • el límite inferior inclusivo del rango.

  • el límite superior exclusivo del rango.

  • la zona.

sh.addTagRange(
"photoshare.data",
{ "creation_date" : MinKey },
{ "creation_date" : ISODate("2016-01-01") },
"archive"
)

MinKey y son valores especiales reservados para MaxKey comparaciones.

4

Vuelva a habilitar el balanceador para reequilibrar el clúster.

sh.enableBalancing()Utilice, que especifica el espacio de nombres de la colección, para iniciar el balanceador

sh.enableBalancing("photoshare.data")

Utiliza sh.isBalancerRunning() para comprobar si el proceso del balanceador se está ejecutando actualmente.

5

La próxima vez que se ejecute el balanceador, dividirá y migrará fragmentos a través de los fragmentos respetando las zonas configuradas.

Una vez finalizado el equilibrio, los fragmentos en la zona recent solo deben contener documentos con creation_date mayor o igual a ISODate("2016-01-01"), mientras que los fragmentos en la zona archive solo deben contener documentos con creation_date menor que ISODate("2016-01-01").

Puede confirmar la distribución de fragmentos sh.status() ejecutando.

Para actualizar los rangos de fragmentos, realice las siguientes operaciones como parte de un trabajo cron u otro procedimiento programado:

1

El balanceador debe estar deshabilitado en todo el clúster fragmentado para garantizar que no se realicen migraciones mientras se configuran las nuevas zonas.

Utilice para detener el balanceador del sh.stopBalancer() clúster.

sh.stopBalancer()

Utilice para comprobar si el proceso de balanceo está en ejecución. Espere a que se completen las rondas de balanceo actuales antes de sh.isBalancerRunning() continuar.

2

Remover el antiguo rango de zona recent utilizando el método sh.removeTagRange(). Este método requiere:

  • el espacio de nombres completo de la colección de destino.

  • el límite inferior inclusivo del rango.

  • el límite superior exclusivo del rango.

sh.removeTagRange(
"photoshare.data",
{ "creation_date" : ISODate("2016-01-01") },
{ "creation_date" : MaxKey }
)

Remover el antiguo rango de zona archive utilizando el método sh.removeTagRange(). Este método requiere:

  • el espacio de nombres completo de la colección de destino.

  • el límite inferior inclusivo del rango.

  • el límite superior exclusivo del rango.

sh.removeTagRange(
"photoshare.data",
{ "creation_date" : MinKey },
{ "creation_date" : ISODate("2016-01-01") }
)

MinKey y son valores especiales reservados para MaxKey comparaciones.

3

Define el rango de fotos recientes y asócialo a la recent zona mediante el método. Este método sh.addTagRange() requiere:

  • el espacio de nombres completo de la colección de destino.

  • el límite inferior inclusivo del rango.

  • el límite superior exclusivo del rango.

  • la zona.

sh.addTagRange(
"photoshare.data",
{ "creation_date" : ISODate("2016-06-01") },
{ "creation_date" : MaxKey },
"recent"
)

Define el rango de fotos antiguas y asócialo a la archive zona mediante el método. Este método sh.addTagRange() requiere:

  • el espacio de nombres completo de la colección de destino.

  • el límite inferior inclusivo del rango.

  • el límite superior exclusivo del rango.

  • la zona.

sh.addTagRange(
"photoshare.data",
{ "creation_date" : MinKey },
{ "creation_date" : ISODate("2016-06-01") },
"archive"
)

MinKey y son valores especiales reservados para MaxKey comparaciones.

4

Vuelva a habilitar el balanceador para reequilibrar el clúster.

sh.enableBalancing()Utilice, que especifica el espacio de nombres de la colección, para iniciar el balanceador

sh.enableBalancing("photoshare.data")

Utiliza sh.isBalancerRunning() para comprobar si el proceso del balanceador se está ejecutando actualmente.

5

La próxima vez que se ejecute el balanceador, migrará los datos a través de los fragmentos respetando las zonas configuradas.

Antes del equilibrio, los fragmentos en la zona recent solo contenían documentos con creation_date mayor o igual a ISODate("2016-01-01"), mientras que los fragmentos en la zona archive solo contenían documentos con creation_date menor que ISODate("2016-01-01").

Una vez finalizado el equilibrio, los fragmentos en la zona recent solo deben contener documentos con creation_date mayor o igual a ISODate("2016-06-01"), mientras que los fragmentos en la zona archive solo deben contener documentos con creation_date menor que ISODate("2016-06-01").

Puede confirmar la distribución de fragmentos sh.status() ejecutando.

Volver

Implementar un clúster particionado

En esta página