MongoDB Academy · Lección

Elecciones y conmutación por error automática

Simulará un fallo del primario y observará el algoritmo de elección que promociona a un secundario, manteniendo la interrupción por debajo de 10 segundos.

Lección 2 de 413 pasos

Elecciones y conmutación por error automática es una lección gratuita de MongoDB Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de MongoDB Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de MongoDB Academy incluye 4 lecciones en total.

Por qué es importante la conmutación por error automática

La conmutación por error automática es la capacidad de un conjunto de réplicas de MongoDB para recuperarse del fallo del nodo primario sin intervención humana. Cuando el primario deja de estar accesible, los miembros restantes eligen automáticamente un nuevo primario, normalmente en un plazo de 10 a 30 segundos, de modo que las aplicaciones solo experimentan una breve pausa en lugar de una interrupción total.

Heartbeats: detección de fallos

Los miembros del conjunto de réplicas intercambian continuamente mensajes de heartbeat cada 2 segundos. Si un miembro no recibe una respuesta de heartbeat dentro de electionTimeoutMillis (10 segundos de forma predeterminada), marca al miembro silencioso como inaccesible. Si el miembro ausente es el primario, los miembros restantes que cumplen los requisitos inician una elección.

// Check heartbeat interval and election timeout in replica set config
rs.conf().settings.heartbeatIntervalMillis   // 2000 ms
rs.conf().settings.electionTimeoutMillis     // 10000 ms

Inicio de una elección

Una elección se inicia en tres situaciones: 1) el primario deja de estar accesible (por una partición de red o un fallo), 2) un usuario hace que el primario renuncie manualmente mediante rs.stepDown() o 3) se incorpora un secundario con mayor prioridad y el primario actual tiene una prioridad menor. Solo los miembros con votes: 1 y priority > 0 pueden convertirse en el nuevo primario.

// Manually step down the current primary (useful for maintenance)
rs.stepDown(60)  // yield primary for at least 60 seconds

Protocolo de consenso inspirado en Raft

Las elecciones de MongoDB utilizan un protocolo inspirado en el consenso de Raft. Cada candidato incrementa su contador term y solicita votos a los demás miembros. Un candidato gana si recibe los votos de la mayoría de los miembros con derecho a voto. Se prefiere al candidato con el oplog más actualizado (el optime más alto), lo que evita la pérdida de datos al garantizar que el nuevo primario haya visto todas las escrituras confirmadas.

// Inspect the term number and optime of all members
rs.status().members.forEach(m => {
  print(m.name, 'term:', m.configTerm, 'optime:', m.optimeDate)
})

Requisito de mayoría de votos

Un candidato necesita los votos de más de la mitad de todos los miembros con derecho a voto (no solo de los que están accesibles en ese momento). En un conjunto de 3 miembros con 3 votos, la mayoría es 2. Esto significa que, si 2 miembros dejan de funcionar simultáneamente, el miembro superviviente no puede elegirse a sí mismo: estaría operando con datos obsoletos y no tendría forma de saber si los otros dos miembros tienen escrituras más recientes.

// With 3 members:
// majority = floor(3/2) + 1 = 2
// If only 1 member survives, it cannot elect itself
// The set becomes read-only until connectivity is restored

El proceso de elección paso a paso

La elección se desarrolla de la siguiente manera: 1) un secundario detecta que el primario ha desaparecido después del tiempo de espera. 2) cambia al estado CANDIDATE. 3) envía mensajes RequestVote a todos los demás miembros. 4) los miembros conceden sus votos si el oplog del candidato está al menos tan actualizado como el suyo y aún no han votado. 5) el ganador cambia al estado PRIMARY y comienza a aceptar escrituras.

Indisponibilidad de escrituras durante la elección

Durante la ventana de elección (normalmente de unos segundos), se rechazan las escrituras porque no hay ningún primario. El controlador de MongoDB almacena en búfer las operaciones de escritura y las reintenta una vez elegido el nuevo primario. Con las escrituras reintentables habilitadas (la configuración predeterminada en los controladores modernos), los errores transitorios de elección se reintentan de forma transparente una vez.

// Retryable writes are enabled by default in the connection string
const client = new MongoClient(
  'mongodb+srv://host/db?retryWrites=true'
)

Prioridad y preferencia en las elecciones

Cuando varios candidatos están igual de actualizados, la priority deshace el empate: gana el miembro con mayor prioridad. Si un secundario con mayor prioridad vuelve a incorporarse después de haber estado desconectado, activará una nueva elección para asumir el rol de primario. Establecer la prioridad en 0 excluye permanentemente a un miembro de la posibilidad de convertirse en primario.

// Boost priority on the preferred primary node
let cfg = rs.conf()
cfg.members[0].priority = 2   // preferred
cfg.members[1].priority = 1
cfg.members[2].priority = 1
rs.reconfig(cfg)

Situaciones de partición de red

En una partición de red, los miembros de un lado de la división no pueden comunicarse con los del otro. El lado que tiene la mayoría de los votos puede elegir un primario; el lado minoritario entra en un estado de solo lectura. Esto evita una situación de split-brain en la que dos miembros creen simultáneamente que son el primario y aceptan escrituras en conflicto.

Supervisión de eventos de conmutación por error

Puede supervisar las elecciones y las conmutaciones por error examinando el registro de MongoDB o consultando la configuración de system.replset. Atlas proporciona alertas en tiempo real para los eventos de elección. En los registros de su aplicación, observará picos de MongoNotPrimaryError o MongoNetworkError durante una elección; las escrituras reintentables gestionan estos errores automáticamente.

// Check the number of elections in the current status
rs.status().electionHighestObservedTime
// Or watch change streams on 'admin.$cmd' for electionId changes

Cómo mantener rápida la conmutación por error: prácticas recomendadas

Para minimizar el tiempo de conmutación por error: 1) mantenga los conjuntos de réplicas con un número impar de miembros (3 o 5) para evitar la necesidad de árbitros. 2) use un write concern de mayoría para garantizar que el secundario elegido tenga todas las escrituras confirmadas. 3) minimice el retraso del oplog proporcionando un tamaño de oplog suficiente. 4) coloque los miembros del conjunto de réplicas en la misma región para obtener heartbeats de baja latencia.

// Increase oplog size at runtime (requires 4.4+)
db.adminCommand({ replSetResizeOplog: 1, size: 16384 })
// size in MB — 16 GB is suitable for busy clusters

Comprobación rápida

Compruebe su comprensión de los conceptos de MongoDB y las bases de datos NoSQL de esta lección.

Resumen de la lección

En esta lección aprendió que: los heartbeats detectan el fallo del primario en un plazo de electionTimeoutMillis (10 s de forma predeterminada), el candidato con el oplog más actualizado y la prioridad más alta gana la elección y las escrituras reintentables permiten que las aplicaciones superen de forma transparente las breves ventanas de elección. A continuación, veremos los write concerns y cómo controlar la durabilidad de las escrituras en el conjunto de réplicas.

Gratis para empezar

Aprende JavaScript con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
30
Lecciones
120

Preguntas frecuentes

¿La lección «Elecciones y conmutación por error automática» es gratis?

Sí — el texto completo de «Elecciones y conmutación por error automática» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de MongoDB Academy, actualiza a CoddyKit PRO. El curso de MongoDB Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Elecciones y conmutación por error automática»?

Simulará un fallo del primario y observará el algoritmo de elección que promociona a un secundario, manteniendo la interrupción por debajo de 10 segundos. Practicas MongoDB Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar MongoDB Academy?

No se requiere experiencia previa. MongoDB Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Elecciones y conmutación por error automática»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de MongoDB Academy?

Sí. Cada lección de MongoDB Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Miembros de un conjunto de réplicas: primario, secundario y árbitro
  2. Elecciones y conmutación por error automática
  3. Write concerns y durabilidad confirmada
  4. Preferencias de lectura: distribución de la carga de lectura
← Volver a MongoDB Academy