Docs Menu
Docs Home
/ /
Componentes de un clúster particionado

mongos

MongoDB mongosLas instancias enrutan consultas y operaciones de escritura a los fragmentos de un clúster fragmentado. mongos proporciona la única interfaz a un clúster fragmentado desde la perspectiva de las aplicaciones. Las aplicaciones nunca se conectan ni se comunican directamente con los fragmentos.

El mongos rastrea qué datos se encuentran en cada fragmento almacenando en caché los metadatos de los servidores de configuración. El mongos usa los metadatos para enrutar operaciones desde aplicaciones y clientes a las instancias.mongod Un mongos no tiene estado persistente y consume recursos mínimos del sistema.

La práctica más común es ejecutar mongos instancias en los mismos sistemas que los servidores de aplicaciones, pero puede mantener mongos instancias en los fragmentos o en otros recursos dedicados. Consulte también Número de mongos y Distribución.

Una instancia enruta mongos una consulta a un clúster mediante:

  1. Determinar la lista de fragmentos que deben recibir la consulta.

  2. Establecer un cursor en todos los fragmentos seleccionados.

A mongos continuación, fusiona los datos de cada fragmento objetivo y devuelve el documento resultante. Se realizan ciertas modificaciones de consulta, como la ordenación, en cada fragmento antes de que mongos recupere los resultados.

Las operaciones de agregación que se ejecutan en múltiples fragmentos pueden enrutar los resultados de regreso a para fusionarlos si no necesitan ejecutarse en el fragmento mongosprincipal de la base de datos.

Hay dos casos en los que un pipeline no es elegible para ejecutarse mongos en.

El primer caso ocurre cuando la parte de fusión de la canalización dividida contiene una etapa que debe ejecutarse en un fragmento principal. Por ejemplo, si $lookup requiere acceso a una colección no fragmentada en la misma base de datos que la colección fragmentada donde se ejecuta la agregación, la fusión debe ejecutarse en el fragmento principal.

El segundo caso ocurre cuando la parte de fusión de la canalización dividida contiene una etapa que puede escribir datos temporales en el disco, como $group, y el cliente ha especificado allowDiskUse:true. En este caso, suponiendo que no hay otras etapas en la canalización de fusión que requieran el fragmento principal, la fusión se ejecuta en un fragmento seleccionado aleatoriamente del conjunto de fragmentos objetivo de la agregación.

Para obtener más información sobre cómo se divide el trabajo de agregación entre los componentes de una consulta de clúster fragmentado, use explain:true como parámetro en la llamada. El resultado incluye tres objetos aggregate() JSON. mergeType muestra dónde se produce la fusión ("primaryShard", "anyShard" o "mongos"). splitPipeline muestra qué operaciones de su canalización se han ejecutado en fragmentos individuales. shards muestra el trabajo realizado por cada fragmento.

En algunos casos, cuando la clave de fragmento o un prefijo de la clave de fragmento es parte de la consulta,mongos realiza una operación específica y enruta las consultas a un subconjunto de fragmentos en el clúster.

mongos Realiza una operación de difusión para las consultas que no incluyen la clave de fragmento, enrutando las consultas a todos los fragmentos del clúster. Algunas consultas que sí incluyen la clave de fragmento pueden generar una operación de difusión, dependiendo de la distribución de los datos en el clúster y la selectividad de la consulta.

Consulte Operaciones dirigidas vs. Operaciones de transmisión para obtener más información sobre operaciones dirigidas y de transmisión.

mongos Admite lecturas con cobertura para minimizar las latencias.Consulte "Lecturas con cobertura" para obtener más información.

Si el resultado de la consulta no está ordenado, la mongos instancia abre un cursor de resultados que "ordena" los resultados de todos los cursores en los fragmentos.

Si la consulta limita el tamaño del conjunto de resultados utilizando el limit() método de cursor, la mongos instancia pasa ese límite a los fragmentos y luego vuelve a aplicar el límite al resultado antes de devolver el resultado al cliente.

Si la consulta especifica una cantidad de registros para omitir skip() utilizando el mongos método de cursor, no puede pasar el salto a los fragmentos, sino que recupera resultados no omitidos de los fragmentos y omite la cantidad apropiada de documentos al ensamblar el resultado completo.

Cuando se usa junto con limit() un, el mongos pasa el límite más el valor de a los fragmentos para mejorar la eficiencia de estas skip() operaciones.

En clústeres fragmentados, aplicamongos la preferencia de lectura al leer desde los fragmentos. El miembro seleccionado se rige por la preferencia de lectura y replication.localPingThresholdMs la configuración de, y se reevalúa en cada operación.

Para obtener detalles sobre las preferencias de lectura y los clústeres fragmentados, consulte Preferencias de lectura y fragmentos.

mongos: las instancias puedenprimary preferencias de lectura. Con las lecturas compensadas, las instancias de mongos enrutan las operaciones de lectura a dos miembros del set de réplicas por cada partición consultada y devuelven los resultados del primer respondiente de cada partición. La lectura adicional enviada para compensar la operación de lectura utiliza el valor maxTimeMS de maxTimeMSForHedgedReads.

Las lecturas protegidas se admiten para las siguientes operaciones:

Las lecturas protegidas se especifican por operación como parte de la preferencia de lectura. Las preferencias deprimary lectura distintas de admiten lecturas protegidas. Consulte la opción "Preferencia de lectura protegida".

  • Para especificar una lectura protegida para una preferencia de lectura que noprimary sea, consulte la documentación de la API de preferencia de lectura del controlador.

  • La preferencia de lectura habilita la opción de lectura protegida de forma predeterminada.nearest

Para obtener detalles sobre las preferencias de lectura y los clústeres fragmentados, así como la selección de miembros,consulte Preferencias de lectura y fragmentos.

De forma predeterminada, las instanciasmongosadmiten lecturas protegidas. Para desactivar la compatibilidad de una instanciamongoscon lecturas protegidas, consulte el parámetroreadHedgingMode. Si la compatibilidad con lecturas protegidas es off, mongosno utiliza lecturas protegidas, independientemente de la opción hedge especificada para la preferencia de lectura.

El comandoserverStatusy su métodomongoshcorrespondientedb.serverStatus()devuelvenhedgingMetrics.

Para detectar si la instancia de MongoDB a la que está conectado su cliente esmongos, use el comandohello. Cuando un cliente se conecta a una instanciamongos, hellodevuelve un documento con un campo msg que contiene la cadena isdbgrid. Por ejemplo:

{
"isWritablePrimary" : true,
"msg" : "isdbgrid",
"maxBsonObjectSize" : 16777216,
"ok" : 1,
...
}

Si, en cambio, la aplicación está conectada a mongod un, el documento devuelto no incluye la isdbgrid cadena.

Generalmente, las consultas más rápidas en un entorno fragmentado son aquellas que se dirigen a un único mongos fragmento, utilizando la clave del fragmento y los metadatos del clúster del servidor de configuración. Estas operaciones dirigidas utilizan el valor de la clave del fragmento para localizar el fragmento o subconjunto de fragmentos que satisfacen el documento de consulta.

Para las consultas que no incluyen la clave del fragmento, mongos debe consultar todos los fragmentos, esperar sus respuestas y luego devolver el resultado a la aplicación. Estas consultas de "dispersión/recopilación" pueden ser operaciones de larga duración.

mongos Las instancias transmiten consultas a todos los fragmentos de la colección a menos que mongos pueda determinar qué fragmento o subconjunto de fragmentos almacena estos datos.

Operaciones de lectura en un clúster fragmentado. Los criterios de consulta no incluyen la clave del fragmento. El enrutador de consultas «mongos» debe difundir la consulta a todos los fragmentos de la colección.

Después de que recibe respuestas de todos los fragmentos, fusiona los datos y devuelve el documento resultante. El rendimiento de una operación de difusión depende de la carga general del clúster, así como mongos de variables como la latencia de la red, la carga de cada fragmento y la cantidad de documentos devueltos por cada fragmento. Siempre que sea posible, priorice las operaciones que resulten en una operación dirigida sobre las que resulten en una operación de difusión.

Las operaciones de actualización múltiple siempre son operaciones de difusión.

Los updateMany() métodos y son operaciones de transmisión, a menos que el documento de consulta especifique la clave del fragmento en su totalidad.deleteMany()

mongos puede enrutar consultas que incluyan la clave de fragmento o el prefijo de una clave de fragmento compuesta de un fragmento específico o un conjunto de fragmentos. mongos usa el valor de la clave de fragmento para ubicar el fragmento cuyo rango incluye el valor de la clave de fragmento y dirige la consulta al fragmento que contiene ese fragmento.

Operaciones de lectura en un clúster fragmentado. Los criterios de consulta incluyen la clave del fragmento. El enrutador de consultas «mongos» puede dirigir la consulta al fragmento o fragmentos adecuados.

Por ejemplo, si la clave del fragmento es:

{ a: 1, b: 1, c: 1 }

El programa mongos puede enrutar queries que incluyan la clave completa de partición o cualquiera de los siguientes prefijos de clave de partición a una partición específica o a un conjunto de particiones:

{ a: 1 }
{ a: 1, b: 1 }

Todas las operaciones se dirigen a insertOne() insertMany() un fragmento. Cada documento de la matriz se dirige a un único fragmento, pero no hay garantía de que todos los documentos de la matriz se inserten en un único fragmento.

Todas las updateOne() replaceOne() operaciones,deleteOne() y deben incluir la clave de fragmento o _id en el documento de consulta. MongoDB devuelve un error si estos métodos se utilizan sin la clave de fragmento _id o.

Dependiendo de la distribución de datos en el clúster y la selectividad de la consulta, aún puedemongos realizar una operación de transmisión para cumplir con estas consultas.

Cuando un fragmento recibe una consulta, utiliza el índice más eficiente disponible para responderla. Este índice puede ser el índice de clave del fragmento u otro índice válido presente en el fragmento.

Utilice la autenticación interna/de membresía autogestionada para reforzar la seguridad dentro del clúster y evitar que componentes no autorizados accedan a él. Debe iniciar cada mongod o mongos del 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.

Los clústeres fragmentados admiten el Control de Acceso Basado en Roles en Implementaciones Autogestionadas (RBAC) para restringir el acceso no autorizado a los datos y operaciones del clúster. Debe iniciar cada mongod del clúster, incluidos los servidores de configuración, con la --auth opción para aplicar el RBAC. Como alternativa, aplicar la Autenticación Interna/de Membresía Autogestionada para la seguridad entre clústeres también habilita los controles de acceso de usuarios mediante RBAC.

Con RBAC implementado, los clientes deben especificar,--username --passwordy --authenticationDatabase al conectarse mongos al para poder acceder a los recursos del clúster.

Cada clúster tiene sus propios usuarios. Estos usuarios no pueden usarse para acceder a fragmentos individuales.

Consulte Habilitar el control de acceso en implementaciones autoadministradas para obtener un tutorial sobre cómo habilitar la adición de usuarios a una implementación de MongoDB habilitada para RBAC.

mongos usa preocupación de escritura para las siguientes operaciones que afectan los metadatos del clúster "majority" fragmentado:

Comando
Método

El binariomongosno puede conectarse a instanciasmongodcuya versión de compatibilidad de características (FCV) sea superior a la demongos. Por ejemplo, no se puede conectar una versiónmongosde MongoDB 4.0 a un clúster fragmentado 4.2 con FCV establecido en 4.2. Sin embargo, sí se puede conectar una versiónmongosde MongoDB 4.0 a un clúster fragmentado 4.2 con FCV establecido en 4.0.

mongod incluye un mecanismo de Full Time Diagnostic Data Capture para asistir a los ingenieros de MongoDB con la solución de problemas en las implementaciones. Si este hilo falla, termina el proceso que lo originó. Para evitar los errores más comunes, confirme que el usuario que ejecuta el proceso tenga permisos para crear el directorio FTDC diagnostic.data. Para mongod, el directorio se encuentra dentro de storage.dbPath. Para mongos, es paralelo a systemLog.path.

A partir de MongoDB 4.2, MongoDB añade el parámetroShardingTaskExecutorPoolReplicaSetMatching. Este parámetro determina el tamaño mínimo del grupo de conexiones de la instanciamongod/mongospara cada miembro del clúster fragmentado. Este valor puede variar durante la ejecución.

mongod y mantienen grupos de conexiones para cada conjunto de réplicas secundario en cada conjunto de réplicas del clúster fragmentado. De forma predeterminada, estos grupos tienen un número de conexiones igual o superior al número de conexiones al mongos principal.

Para modificar,ShardingTaskExecutorPoolReplicaSetMatching consulte.

Para obtener más información sobre cómo funciona la fragmentación con agregaciones, lea el capítulo sobre fragmentación en Agregaciones prácticas de MongoDB. libro electrónico.

Volver

Config Servers (metadata)

En esta página