Los servidores de configuración almacenan los metadatos de un clúster particionado. Los metadatos reflejan el estado y la organización de todos los datos y componentes dentro del clúster dividido. Los metadatos incluyen la lista de fragmentos en cada partición y los rangos que definen los fragmentos.
La Las instancias mongos almacenan en caché estos datos y los utilizan para dirigir las operaciones de lectura y escritura a las particiones correctas. mongos actualiza la caché cuando hay cambios de metadatos para el clúster, como cuando se agrega una partición. Las particiones también leen los metadatos de los fragmentos de los servidores de configuración.
Los servidores de configuración también almacenan la información de configuración de Autenticación en Despliegues Autogestionados como el Control de Acceso Basado en Roles o la autenticación interna para el clúster.
MongoDB también utiliza los servidores de configuración para gestionar bloqueos distribuidos.
Cada clúster fragmentado debe tener sus propios servidores de configuración. No utilices los mismos servidores de configuración para diferentes clústeres.
Advertencia
Las operaciones administrativas realizadas en los servidores de configuración pueden tener un impacto significativo en el rendimiento y la disponibilidad del clúster particionado. Dependiendo del número de servidores de configuración afectados, el clúster puede estar solo en modo lectura o fuera de línea durante un periodo de tiempo.
A partir de MongoDB 8.0, se puede configurar un servidor de configuración para almacenar datos de aplicación además de los metadatos habituales del clúster compartido. El servidor de configuración se conoce entonces como partición de configuración. Aprenderás más después en esta página en la La sección Particiones de configuración.
Servidores de configuración del set de réplicas
Se aplican las siguientes restricciones a una configuración de set de réplicas cuando se utilizan para servidores de configuración:
Debe tener cero árbitros.
No debe tener miembros atrasados.
Deben crear índices (i.e. ningún nodo debería tener el ajuste
members[n].buildIndexesajustado en falso).
Operaciones de Lectura y Escritura en los Servidores de Configuración
La base de datos admin y la base de datos config existen en los servidores de configuración.
Guardar en los servidores de configuración
La base de datos admin contiene las colecciones relacionadas con la autenticación y la autorización, así como las otras colecciones del sistema.* para uso interno.
La base de datos de config contiene las colecciones que contienen los metadatos del clúster compartido. MongoDB escribe datos en la base de datos config cuando cambian los metadatos, como después de una migración de fragmento o una división de fragmento.
Los usuarios deben evitar escribir directamente en la base de datos de configuración durante la operación normal o el mantenimiento.
Al escribir en los servidores de configuración, MongoDB utiliza un nivel de confirmación de escritura (write concern) de "majority".
Lecturas desde servidores de configuración
MongoDB lee de la base de datos admin para datos de autenticación y autorización y otros usos internos.
MongoDB lee de la base de datos config cuando se inicia un mongos o después de un cambio en los metadatos, como después de la migración de un fragmento. Las particiones también leen los metadatos de los fragmentos de los servidores de configuración.
Al leer desde los servidores de configuración del set de réplicas, MongoDB utiliza un nivel de consistencia de lectura de "majority".
Las vistas de metadatos deben estar actualizadas
Para que una operación tenga éxito, la visualización de los metadatos en el nodo específico de la partición debe estar actualizada. La partición y el router que emite la solicitud deben tener la misma versión de metadatos de los fragmentos.
Si los metadatos no están actualizados, la operación falla con el error StaleConfig y se activa el proceso de actualización de metadatos. Actualizar los metadatos puede introducir una latencia operativa adicional.
En un secundario, una actualización de metadatos puede tardar mucho tiempo si hay un atraso de la replicación significativo. Para lecturas secundarias, configure maxStalenessSeconds para minimizar el impacto del atraso de la replicación.
Disponibilidad del servidor de configuración
Si el set de réplicas del servidor de configuración pierde su primario y no puede elegir un primario, los metadatos del clúster se vuelven solo de lectura. Todavía puedes leer y escribir datos de las particiones, pero no se producirá ninguna migración ni división de fragmentos hasta que el conjunto de réplicas pueda elegir un primario.
En un clúster fragmentado, las instancias mongod y mongos supervisan los sets de réplicas en el clúster fragmentado (por ejemplo, set de réplicas de particiones, set de réplicas del servidor de configuración).
Si todos los servidores de configuración se vuelven inaccesibles, el clúster puede volverse inoperable. Para garantizar que los servidores de configuración permanezcan disponibles e intactos, es fundamental contar con copias de seguridad de los servidores de configuración. Los datos en el servidor de configuración son pequeños en comparación con los datos almacenados en un clúster, y el servidor de configuración tiene una carga de actividad relativamente baja.
Ver Un miembro del set de réplicas del servidor de configuración se volvió no disponible para más información.
Metadatos de clúster segmentado
Los servidores de configuración almacenan metadatos en la base de datos config.
Importante
Realice siempre una copia de seguridad de la base de datos config antes de realizar cualquier tarea de mantenimiento en el servidor de configuración.
Para acceder a la base de datos config, ejecuta el siguiente comando en mongosh:
use config
En general, nunca debe editar directamente el contenido de la base de datos config. La base de datos config contiene las siguientes colecciones:
Para obtener más información sobre estas colecciones y su rol en clústeres particionados, consulta Base de datos de configuración. Consulta Operaciones de lectura y escritura en los servidores de configuración para obtener más información sobre las lecturas y actualizaciones de los metadatos.
Seguridad en el clúster particionado
Utiliza Autenticación interna/membresía autogestionada para aplicar la seguridad entre clústeres y evitar que componentes de clúster no autorizados accedan al clúster. Debes iniciar cada mongod en el clúster con la configuración de seguridad adecuada para aplicar la autenticación interna.
A partir de MongoDB 5.3, SCRAM-SHA-1 no se puede usar para la autenticación intraclúster. Solo se admite SCRAM-SHA-256.
En versiones anteriores de MongoDB, se pueden usar tanto SCRAM-SHA-1 como SCRAM-SHA-256 para la autenticación intra-clúster, incluso si SCRAM no está explícitamente habilitado.
Consulta Implementar clúster fragmentado autogestionado con autenticación de clave para aprender cómo implementar un clúster fragmentado seguro.
Fragmentos de configuración
Nuevo en la versión 8.0.
A partir de MongoDB 8.0, puedes:
Configura un servidor de configuración para almacenar tus datos de la aplicación además de los metadatos habituales del clúster particionado. Un servidor de configuración que almacena datos de la aplicación se denomina partición de configuración.
Transicionar un servidor de configuración entre una partición de configuración y un servidor de configuración dedicado.
Un clúster requiere un servidor de configuración, pero puede ser una partición de configuración en lugar de un servidor de configuración dedicado. El uso de una partición de configuración reduce el número de nodos requeridos y puede simplificar su implementación.
Si su aplicación tiene requisitos exigentes de disponibilidad y resiliencia, considere implementar un servidor de configuración dedicado. Un servidor de configuración dedicado proporciona aislamiento, recursos dedicados y un rendimiento coherente para operaciones críticas del clúster.
No se puede utilizar la misma partición de configuración para varios clústeres.
Comandos
Para configurar un servidor de configuración dedicado para que funcione como un fragmento de configuración, ejecute el comando transitionFromDedicatedConfigServer.
Para configurar un fragmento de configuración para que funcione como un servidor de configuración dedicado, ejecute el comando transitionToDedicatedConfigServer.
Usuarios
Un usuario creado en una partición de configuración tiene el mismo comportamiento que un usuario creado en un servidor de configuración dedicado.
Confirmar el uso de Config partición
Para confirmar que un clúster utiliza una partición de configuración, ejecuta el comando listShards en la base de datos admin mientras estás conectado a un mongos e inspecciona la salida en busca de un documento donde _id esté configurado en "config". Si la salida de listShards no contiene un documento donde _id esté configurado en "config", el clúster no utiliza una partición de configuración.
El siguiente ejemplo ejecuta el comando listShards e intenta encontrar un documento donde _id esté establecido en "config".
db.adminCommand({ listShards: 1 })["shards"].find(element => element._id === "config")
En este ejemplo, el documento devuelto tiene _id asignado a "config", lo que confirma que este clúster utiliza una partición de configuración.
{ _id: "config", host: "configRepl/localhost:27018", state: 1, topologyTime: Timestamp({ t: 1732218671, i: 13 }), replSetConfigVersion: Long('-1') }
Reducir la compatibilidad de características entre versiones
Si el clúster tiene una partición de configuración y se necesita reducir la compatibilidad de características entre versiones a una versión anterior a 8.0, conectarse a mongos y realizar este procedimiento:
Configura una partición de configuración para que ejecute como un servidor de configuración dedicado.
Para comenzar a configurar un shard de configuración para que funcione como un servidor dedicado de configuración, ejecuta transitionToDedicatedConfigServer:
db.adminCommand( { transitionToDedicatedConfigServer: 1 } )
Enumerar todas las bases de datos y colecciones del clúster.
Para listar todas las bases de datos en el clúster, ejecute
listDatabases:db.adminCommand( { listDatabases: 1, nameOnly: true } ) Excluye las bases de datos
adminyconfig.Para cada base de datos, enumerar todas las colecciones de esa base de datos.
Para listar todas las colecciones de la base de datos, ejecuta
listCollections.db.adminCommand( { listCollections: 1, nameOnly: true, filter: { type: { $ne: "view" } } } ) Excluir colecciones que comiencen con
system.
Para cada colección que no sea del sistema, traslada la colección a una nueva partición.
Para mover la colección a una nueva partición, ejecute moveCollection:
db.adminCommand( { moveCollection: "<database>.<collection>", toShard: "<new shard>", } )
Espere a que el balanceador mueva los datos de la colección particionada fuera del servidor de configuración.
Para verificar que el balanceador haya movido los datos de la colección particionada fuera del servidor de configuración, ejecuta transitionToDedicatedConfigServer nuevamente:
db.adminCommand( { transitionToDedicatedConfigServer: 1 } )
La respuesta después de un movimiento de datos exitoso contiene state:
"completed". Si la respuesta contiene state: "pendingDataCleanup", espera un momento y luego sigue llamando a transitionToDedicatedConfigServer hasta que la respuesta del comando contenga state: "completed". Para obtener detalles completos de la respuesta, consulte removeShard.
Establecer la compatibilidad de características entre versiones.
Para configurar la compatibilidad de características entre versiones, ejecute setFeatureCompatibilityVersion:
db.adminCommand( { setFeatureCompatibilityVersion: "7.0" } )