Los servidores de configuración almacenan los metadatos de un Clúster fragmentado. Los metadatos reflejan el estado y la organización de todos los datos y componentes dentro del clúster. Incluyen la lista de fragmentos de cada fragmento y los rangos que los definen.
El Las instancias mongosalmacenan estos datos en caché y los utilizan para enrutar las operaciones de lectura y escritura a los fragmentos correctos. mongosactualiza la caché cuando se producen cambios en los metadatos del clúster, como la adición de un fragmento. Los fragmentos también leen los metadatos de los fragmentos de los servidores de configuración.
Los servidores de configuración también almacenan información de configuración de autenticación en implementaciones autoadministradas, como control de acceso basado en roles o configuraciones de autenticación interna para el clúster.
MongoDB también utiliza los servidores de configuración para administrar bloqueos distribuidos.
Cada clúster fragmentado debe tener sus propios servidores de configuración. No utilice los mismos servidores de configuración para diferentes clústeres fragmentados.
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 fragmentado. Según la cantidad de servidores de configuración afectados, el clúster puede estar en modo de solo lectura o sin conexión durante un tiempo.
A partir de MongoDB,8.0 puede configurar un servidor de configuración para almacenar datos de la aplicación, además de los metadatos habituales del clúster fragmentado. El servidor de configuración se conoce como fragmento de configuración. Encontrará más información más adelante en esta página, en el... SecciónFragmentos de configuración.
Servidores de configuración del conjunto de réplicas
Las siguientes restricciones se aplican a una configuración de conjunto de réplicas cuando se utiliza para servidores de configuración:
Debe tener cero árbitros.
No debe tener miembros retrasados.
Se deben crear índices (es decir, ningún miembro debe tener la configuración establecida en
members[n].buildIndexesfalso).
Operaciones de lectura y escritura en servidores de configuración
La base de datos admin y la base de datos config existen en los servidores de configuración.
Escribe en servidores de configuración
La admin base de datos contiene las colecciones relacionadas con la autenticación y autorización, así como otras colecciones del sistema.* para uso interno.
La config base de datos contiene las colecciones que contienen los metadatos del clúster fragmentado. MongoDB escribe datos en la config base de datos cuando los metadatos cambian, por ejemplo, después de una migración o división de fragmentos.
Los usuarios deben evitar escribir directamente en la base de datos de configuración durante el funcionamiento o mantenimiento normal.
Al escribir en los servidores de configuración, MongoDB utiliza una preocupación de escritura "majority"de.
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 config base de datos cuando se inicia un o después de un cambio en los metadatos, como después de una migración de fragmentos. Los fragmentos también leen los metadatos de los fragmentos de los servidores de mongos configuración.
Al leer desde los servidores de configuración del conjunto de réplicas, MongoDB utiliza un nivel de preocupación de "majority" lectura de.
Las vistas de metadatos deben estar actualizadas
Para que una operación se realice correctamente, la vista de los metadatos del miembro del fragmento específico debe estar actualizada. El fragmento y el enrutador que emite la solicitud deben tener la misma versión de los metadatos del fragmento.
Si los metadatos no están actualizados, la operación falla con el error StaleConfig y se inicia el proceso de actualización de metadatos. Actualizar los metadatos puede generar latencia operativa adicional.
En una lectura secundaria, la actualización de metadatos puede tardar mucho si hay un retraso de replicación significativo. Para lecturas secundarias, configure maxStalenessSeconds para minimizar el impacto del retraso de replicación.
Disponibilidad del servidor de configuración
Si el conjunto de réplicas del servidor de configuración pierde su servidor principal y no puede elegir uno, los metadatos del clúster pasan a ser de solo lectura. Aún se pueden leer y escribir datos desde los fragmentos, pero no se realizarán migraciones ni divisiones de fragmentos hasta que el conjunto de réplicas pueda elegir uno principal.
En un clúster fragmentado, mongod las mongos instancias y monitorean los conjuntos de réplicas en el clúster fragmentado (por ejemplo, conjuntos de réplicas de fragmentos, conjunto de réplicas del servidor de configuración).
Si todos los servidores de configuración dejan de estar disponibles, el clúster puede quedar inoperativo. Para garantizar que los servidores de configuración permanezcan disponibles e intactos, es fundamental realizar copias de seguridad de los mismos. Los datos del servidor de configuración son pequeños en comparación con los datos almacenados en un clúster, y su carga de actividad es 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 fragmentados
Los servidores de configuración almacenan metadatos en la base de datos config.
Importante
Siempre haga una copia de seguridad de la base de datos config antes de realizar cualquier mantenimiento en el servidor de configuración.
Para acceder a la config base de datos, emita el siguiente comando mongosh en:
use config
En general,nunca se debe editar directamente el contenido de la config base de datos. La config base de datos contiene las siguientes colecciones:
Para obtener más información sobre estas colecciones y su función en clústeres fragmentados, consulte Base de datos de configuración. Consulte Operaciones de lectura y escritura en servidores de configuración para obtener más información sobre las lecturas y actualizaciones de metadatos.
Seguridad de clúster fragmentado
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 dentro del clúster. Solo se admite SCRAM-SHA-.256
En versiones anteriores de MongoDB, tanto SCRAM-SHA-1 como SCRAM-SHA-256 se pueden usar para la autenticación dentro del clúster, incluso si SCRAM no está habilitado explícitamente.
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:
Configure un servidor de configuración para almacenar los datos de su aplicación, además de los metadatos habituales del clúster fragmentado. Un servidor de configuración que almacena datos de la aplicación se denomina fragmento de configuración.
Transición de un servidor de configuración de ser un fragmento de configuración a un servidor de configuración dedicado.
Un clúster requiere un servidor de configuración, pero puede ser un fragmento de configuración en lugar de un servidor de configuración dedicado. Usar un fragmento de configuración reduce la cantidad de nodos necesarios y simplifica la 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 consistente para las operaciones críticas del clúster.
No se puede utilizar el mismo fragmento de configuración para varios clústeres fragmentados.
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 un fragmento de configuración tiene el mismo comportamiento que un usuario creado en un servidor de configuración dedicado.
Confirmar el uso de Config Shard
Puede confirmar que un clúster fragmentado utiliza un fragmento de configuración mediante uno de los siguientes métodos:
Ejecute el
sh.isConfigShardEnabled()métodomongoshen. Si lash.isConfigShardEnabled()salidaenabled: truecontiene, el clúster usa un fragmento de configuración. Si la salidaenabled: falsecontiene, el clúster no usa ningún fragmento de configuración.Ejecute el comando en
listShardslaadminbase de datos mientras esté conectado a un e inspeccione la salida para ver si hay un documentomongosdonde_idesté configurado"config"como. Si lalistShardssalida no contiene un documento donde_idesté configurado"config"como, el clúster no usa un fragmento 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 establecido en "config", lo que confirma que este clúster usa un fragmento de configuración.
{ _id: "config", host: "configRepl/localhost:27018", state: 1, topologyTime: Timestamp({ t: 1732218671, i: 13 }), replSetConfigVersion: Long('-1') }
Versión de compatibilidad de funciones de degradación
Si su clúster tiene un fragmento de configuración y necesita degradar la versión de compatibilidad de funciones a una anterior 8.0 a, conéctese a mongos y realice este procedimiento:
Configura una partición de configuración para que ejecute como un servidor de configuración dedicado.
Para comenzar a configurar un fragmento de configuración para que se ejecute como un servidor de configuración dedicado,transitionToDedicatedConfigServer ejecute:
db.adminCommand( { transitionToDedicatedConfigServer: 1 } )
Enumere todas las bases de datos y colecciones del clúster.
Para enumerar todas las bases de datos del clúster,
listDatabasesejecute:db.adminCommand( { listDatabases: 1, nameOnly: true } ) Excluir las bases de datos
adminyconfig.Para cada base de datos, enumere todas las colecciones en la base de datos.
Para enumerar todas las colecciones en la base de datos,
listCollectionsejecute.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, mueva la colección a un nuevo fragmento.
Para mover la colección a un nuevo fragmento,moveCollection ejecute:
db.adminCommand( { moveCollection: "<database>.<collection>", toShard: "<new shard>", } )
Espere a que el balanceador mueva los datos de recopilación fragmentados fuera del servidor de configuración.
Para verificar que el balanceador haya movido los datos de recopilación fragmentados fuera del servidor de configuración, ejecute transitionToDedicatedConfigServer nuevamente:
db.adminCommand( { transitionToDedicatedConfigServer: 1 } )
La respuesta tras una transferencia de datos exitosa state:
"completed" contiene. Si la respuesta state: "pendingDataCleanup" contiene, espere un momento y continúe llamando transitionToDedicatedConfigServer a hasta que la respuesta del comando state: "completed" contenga. Para obtener detalles completos de la removeShard respuesta, consulte.
Establecer la versión de compatibilidad de funciones.
Para configurar la versión de compatibilidad de funciones,setFeatureCompatibilityVersion ejecute:
db.adminCommand( { setFeatureCompatibilityVersion: "7.0" } )