Atualmente em testes: o código do GitHub será aberto quando concluído.

Procedimento de Reinício sem Interrupção (Rolling)

Há um princípio central: uma maioria deve sempre permanecer viva. Com 3 nós, você só pode derrubar 1 de cada vez; com 5 nós, até 2.

  1. Reinicie primeiro os seguidores (nós não-líderes), um de cada vez — o líder continua atendendo durante todo o processo. Confirme que cada nó reiniciado alcançou o estado atual via replicação de log/snapshot de um par antes de passar para o próximo.
  2. Por fim, derrube o líder. Os nós restantes detectam a perda do heartbeat e elegem um novo líder em 0,5-1 segundo. As requisições de clientes durante essa janela recebem E no_leader, mas os clientes oficiais tentam novamente de forma transparente, então a aplicação só percebe um breve atraso.
  3. Suba novamente o antigo líder — ele reingressa como seguidor e se atualiza (ele não retoma automaticamente a liderança).

O estado do lock é preservado durante todo o processo, enquanto uma maioria permanecer viva — locks concedidos ou liberados durante o reinício também passam pelo commit, então nada é perdido.

Fluxo (com 3 Nós)

Líder
Seguidor 1
Seguidor 2
① reinicia o seguidor 1 — o líder continua atendendo
alcança via replicação de log/snapshot
② uma vez alcançado, reinicia o seguidor 2
alcança via replicação de log
③ reinicia o líder por último
Vote → novo líder eleito em 0,5-1s
o antigo líder reingressa como seguidor e se atualiza
RPC de consenso (Raft)

Durante a breve janela em que o líder está fora do ar, os clientes podem receber E no_leader, mas os clientes oficiais tentam novamente de forma transparente, então isso aparece para a aplicação apenas como um pequeno atraso.