Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

Algoritmo de selección de servidor

Los drivers de MongoDB utilizan un algoritmo de selección de servidor para elegir qué miembro del set de réplicas usar o, cuando se conecta a múltiples mongos instancias, las cuales mongos instancia usar.

La selección del servidor se produce una vez por operación.

Nota

Transacciones que contienen operaciones de lectura deben utilizar la preferencia de lectura primary. Todas las operaciones en una transacción dada deben dirigirse al mismo nodo.

La selección de servidor ocurre una vez por operación y está regida por la preferencia de lectura y la configuración de localThresholdMS para determinar la elegibilidad de los nodos para lecturas. La preferencia de lectura se reevalúa para cada operación.

Modo de preferencia de lectura
Proceso de Selección

primary (por defecto)

  1. El driver selecciona el primario.

  1. El driver elabora una lista de miembros secundarios elegibles. maxStalenessSeconds y conjuntos de etiquetas especificados en la preferencia de lectura pueden restringir aún más la elegibilidad de los nodos.

  2. Si la lista de nodos elegibles no está vacía, el driver determina qué nodo elegible es el "más cercano" (es decir, el nodo con el menor promedio de tiempo de ida y vuelta de la red) y calcula una ventana de latencia sumando el promedio de tiempo de ida y vuelta de este servidor "más cercano" y el localThresholdMS. El driver utiliza esta ventana de latencia para reducir la lista de nodos elegibles a aquellos nodos que caen dentro de esta ventana.

  3. De esta lista de nodos aptos que se encuentran dentro de la ventana de latencia, el driver selecciona aleatoriamente un nodo apto.

  1. El driver assembles una lista de nodos elegibles (primarios y secundarios). maxStalenessSeconds y conjuntos de etiquetas especificados en la preferencia de lectura pueden limitar aún más la elegibilidad de los nodos.

  2. Si la lista de nodos elegibles no está vacía, el driver determina cuál es el nodo "más cercano" (es decir, el nodo con el menor tiempo de ida y vuelta promedio de red) y calcula una ventana de latencia sumando el tiempo de ida y vuelta promedio de este servidor "más cercano" y el localThresholdMS [1]. El driver utiliza esta ventana de latencia para reducir la lista de nodos elegibles a aquellos nodos que se encuentren dentro de este rango.

  3. De esta lista de nodos aptos que se encuentran dentro de la ventana de latencia, el driver selecciona aleatoriamente un nodo apto.

  1. Si está disponible, el driver selecciona el primario.

  2. Si el primario no está disponible, la selección del servidor sigue el proceso de la preferencia de lectura secondary para seleccionar un secundario elegible.

  1. Después del proceso de selección del servidor para la preferencia de lectura secondary, si una lista de miembros secundarios elegibles no está vacía, el controlador elige a un miembro secundario elegible.

  2. De lo contrario, si la lista está vacía, el driver selecciona la primaria.

Si hay más de una mongos instancia en la lista de nodos iniciales, el controlador determina cuál mongos es el "más cercano" (es decir, el miembro con el menor tiempo promedio de ida y vuelta en la red) y calcula la ventana de latencia sumando el tiempo promedio de ida y vuelta de esta mongos instancia "más cercana" y el localThresholdMS. El controlador equilibrará la carga aleatoriamente entre las instancias de mongos que se encuentren dentro de la ventana de latencia.

Para los clústeres fragmentados que tienen fragmentos de set de réplicas, mongos aplica la preferencia de lectura al leer de los fragmentos. La selección del servidor está gobernada por la preferencia de lectura y los ajustes de replication.localPingThresholdMs. La preferencia de lectura se vuelve a evaluar para cada operación.

mongos soporta lecturas protegidas para los modos de preferencias de lectura no-primary. Es decir, mongos puede enviar una lectura adicional a otro miembro, si está disponible, para proteger la operación de lectura si se utilizan preferencias de lectura no-primary. La lectura adicional enviada para asegurar la operación de lectura utiliza el valor maxTimeMS de maxTimeMSForHedgedReads.

Las lecturas protegidas son compatibles con las siguientes operaciones:

Para utilizar lecturas protegidas:

Modo de preferencia de lectura
Proceso de Selección

primary (por defecto)

  1. El mongos selecciona el primario.

  1. El mongos crea una lista de miembros secundarios elegibles. maxStalenessSeconds y conjuntos de etiquetas especificados en la preferencia de lectura pueden restringir aún más la elegibilidad de los nodos.

  2. Si la lista de nodos elegibles no está vacía, el mongos determina qué nodo elegible es el "más cercano" (es decir, el nodo con el menor tiempo de ida y vuelta promedio en la red) y calcula una ventana de latencia sumando el tiempo promedio de ida y vuelta de este servidor "más cercano" y el replication.localPingThresholdMs (o la opción de línea de comandos --localThreshold). El mongos utiliza esta ventana de latencia para reducir la lista de nodos elegibles a aquellos que se encuentran dentro de esta ventana.

  3. De esta lista de nodos elegibles que se encuentran dentro de la ventana de latencia, el mongos elige aleatoriamente a un nodo elegible. Si se utilizan lecturas protegidas, mongos selecciona un segundo nodo elegible si está disponible.

  1. El mongos ensambla una lista de nodos elegibles (primarios y secundarios). maxStalenessSeconds y conjuntos de etiquetas especificados en la preferencia de lectura pueden limitar aún más la elegibilidad de los nodos.

  2. Si la lista de miembros elegibles no está vacía, el mongos determina qué miembro elegible está "más cerca" (es decir, el miembro con el menor promedio de tiempo de ida y vuelta en la red) y calcula una ventana de latencia sumando el tiempo promedio de ida y vuelta de este servidor "más cercano" y el replication.localPingThresholdMs (o la --localThreshold opción de la línea de comandos) [1]. El mongos usa esta ventana de latencia para reducir la lista de miembros elegibles a aquellos que están dentro de esta ventana.

  3. De esta lista de nodos elegibles que se encuentran dentro de la ventana de latencia, el mongos elige aleatoriamente a un nodo elegible. Si se utilizan lecturas protegidas, mongos selecciona un segundo nodo elegible si está disponible.

  1. Si el primario está disponible, mongos selecciona el primario.

  2. Si el nodo primario no está disponible o si mongos está usando lecturas protegidas, la selección del servidor sigue el proceso de la preferencia de lectura secondary. Para lecturas protegidas,

    • Si el primario está disponible, mongos selecciona un único secundario elegible, si está disponible.

    • Si el primario no está disponible, mongos selecciona dos secundarios elegibles, si están disponibles.

  1. Después del proceso de selección del servidor para la preferencia de lectura secondary, si la lista de miembros secundarios elegibles no está vacía, mongos elige un secundario elegible. Si se están utilizando lecturas protegidas, mongos selecciona otro secundario si está disponible.

  2. Si la lista de secundarios elegibles está vacía o si mongos está usando lecturas protegidas y solo hay un secundario elegible disponible, mongos selecciona el primario.

[1](1, 2) El valor umbral por defecto es de 15 milisegundos.

Volver

Lecturas protegidas

En esta página