Dia 12 de 15

Alta Disponibilidade e Replicação

Olá, dev! Seja bem-vindo ao Dia 12 da sua preparação para a certificação MongoDB Associate Developer. Hoje nos aprofundaremos na espinha dorsal da resiliência do MongoDB: os Replica Sets, o funcionamento interno do log de operações (oplog), regras de quorum de eleição e como controlar o roteamento de consultas com Read Preferences.

1. Arquitetura de um Replica Set

Um Replica Set é um cluster composto por múltiplos processos mongod que mantêm o mesmo conjunto de dados sincronizado. Seu propósito principal é prover redundância de dados, alta disponibilidade (HA) e recuperação automática contra falhas de hardware.

Regra do Quórum de Maioria para Certificação:
Para eleger um novo Primary ou manter um Primary existente ativo, o Replica Set deve manter uma maioria estrita de membros votantes comunicáveis:
Maioria = floor(N / 2) + 1 (onde N é o total de membros votantes configurados).
• Em um cluster de 3 nós: a maioria necessária é 2.
• Em um cluster de 5 nós: a maioria necessária é 3.
Se o Primary perder contato com a maioria dos nós, ele automaticamente abdica (step down) para Secondary para evitar partições de escrita (Split-Brain).

2. Configurações Especiais de Membros Secundários

O MongoDB permite configurar membros secundários para atender funções operacionais especializadas:

3. O Mecanismo do `oplog` (Operations Log)

O oplog.rs é uma capped collection (coleção circular de tamanho fixo) localizada no banco de dados reservado local.

4. Estratégias de Leitura com `Read Preferences`

O Read Preference define como o driver cliente roteia as consultas de leitura (find, aggregate) entre os membros do Replica Set:

// Exemplo no mongosh / Driver configurando Read Preference
db.pedidos.find({ status: "ENTREGUE" }).readPref("secondaryPreferred")

5. Diagnóstico e Gestão no `mongosh`

// 1. Obter o status completo do Replica Set (estado de cada nó, latência, lag)
rs.status()

// 2. Visualizar a configuração atual (prioridades, delays, tags)
rs.conf()

// 3. Forçar o Primary atual a abdicar e iniciar uma nova eleição
rs.stepDown(60) // Fica impedido de ser eleito por 60 segundos

// 4. Verificar se a conexão atual está no nó Primary
db.hello() // (Substituto moderno do antigo db.isMaster())

6. Questões no Estilo Exame de Certificação

Questão 1: Um Replica Set possui 5 membros votantes distribuídos igualmente entre três zonas de disponibilidade. Um corte de rede isola 2 membros do restante do cluster. O que acontece com o grupo minoritário de 2 membros que continha o Primary original?

A) O Primary continua aceitando leituras e escritas normalmente.
B) O Primary detecta que perdeu a comunicação com a maioria (3 nós) e abdica (step down) para o estado SECONDARY, rejeitando novas escritas.
C) Os 2 membros elegem um novo Primary imediatamente.
D) O cluster entra em travamento permanente até intervenção manual do administrador.

Resposta Correta: B. O MongoDB requer a maioria estrita dos nós votantes (3 de 5) para manter um Primary. Sem a maioria, o Primary abdica para proteger a integridade dos dados e evitar escrita divergente.

Questão 2: Uma equipe de engenharia precisa rodar rotinas diárias pesadas de BI/Analytics sem degradar a performance das transações da aplicação no Primary e sem correr o risco de a aplicação principal ler dados defasados por engano. Qual é a configuração de membro recomendada para o nó de BI?

A) Um membro Arbiter.
B) Um membro com priority: 1 e slaveDelay: 3600.
C) Um membro com priority: 0 e hidden: true.
D) Um membro Standalone sincronizado manualmente.

Resposta Correta: C. Membros hidden não recebem tráfego dos drivers de aplicação normal e com priority: 0 nunca se tornam Primary, permitindo que as consultas de BI se conectem diretamente a ele de forma isolada.