Desenhar um ensaio com conclusões limitadas
O laboratório cria três processos etcd 3.6.15, com diretórios descartáveis, um token de cluster próprio e portas apenas em loopback. O binário oficial foi verificado por SHA256. O ramo 3.6 acompanha os exemplos existentes; isto não declara que seja o ramo mais recente do projeto. Os três processos partilham o portátil, pelo que não representam zonas independentes. O ensaio usa HTTP sem autenticação apenas neste âmbito local e não fornece uma configuração de deployment. O código não recebe endpoints externos e termina os processos que criou. Antes de usar resultados num comité, escreve o que foi observado e que condições de ambiente ficaram fora do exercício.
Ligar a decisão à operação numa transação
Dois clientes tentam criar /dr/owner. Cada transação verifica version igual a zero e só escreve se a chave ainda não existir. A primeira recebe succeeded=true; a segunda recebe false e encontra worker-a como proprietário. A segunda chamada respondeu normalmente, mas não executou o ramo de aquisição. Esta distinção evita tratar qualquer resposta sem erro de transporte como autorização. O exercício usa uma condição e uma escrita na mesma transação etcd, eliminando a janela entre uma leitura separada e a decisão local. O resultado protege esta chave segundo esse contrato. Não concede automaticamente exclusividade sobre uma base ou ficheiro que não participa na operação.
Detetar uma mudança que voltou ao mesmo valor
O fixture guarda a mod_revision inicial de owner, muda o valor de A para B e regressa a A. Um cliente antigo pode ver novamente o mesmo texto e concluir que nada mudou. O guard compara a revisão observada, pelo que recusa a escrita de /dr/guarded-resource. O laboratório confirma que essa chave não foi criada. A distinção é útil quando uma tarefa retoma depois de uma pausa: identidade textual igual não demonstra continuidade da autorização anterior. A revisão representa alteração no histórico, não segundos de relógio nem duração de lease. Mantém explícito o âmbito: aqui, a verificação e o efeito protegido pertencem à mesma transação etcd.
Escolher a garantia de leitura pela decisão
Depois de parar dois membros, o processo restante ainda aceita uma ligação TCP e responde com estado local. A leitura linearizável não completa, mas a leitura com --consistency=s devolve after-leader-stop. Este valor é útil para observar o estado que o membro conserva, mas a resposta não demonstra quorum nem autoridade atual. Num sistema fictício de coordenação de batch, uma leitura local pode servir um ecrã informativo se a sua limitação estiver aceite. Não deve substituir silenciosamente a leitura exigida para autorizar um writer. Define a decisão primeiro e escolhe uma operação cuja garantia a suporte; conseguir uma resposta é diferente de obter a evidência necessária.
A lease não termina o processo
O ensaio associa uma chave a uma lease de dois segundos e inicia um subprocesso que fica à espera de uma instrução local. Quando a chave desaparece, o subprocesso continua vivo. Ao receber resume, escreve late-write num ficheiro temporário externo ao etcd. Não há armazenamento bancário nem chamada remota: o ficheiro é um contraexemplo controlado à ideia de que expirar uma lease mata o worker. A coordenação deixou de reconhecer a chave, mas o destino não aplicava controlo sobre a escrita. Para proteger um recurso real, usa um mecanismo adequado que imponha exclusividade no destino ou isole o writer anterior, com evidência do efeito.
Prazos e eventos não substituem observação de estado
O laboratório aguarda condições verificáveis com prazo limitado, em vez de declarar sucesso depois de dormir um número fixo de segundos. Uma lease não garante que todos os clientes observem eliminação exatamente no mesmo instante do relógio. Falhas, eleição e entrega de eventos precisam de ser consideradas. A documentação distingue garantias de operações e observação por watch. Num caso fictício, a falta de evento não prova que houve renovação; pode existir atraso no caminho de observação. Regista a operação executada, a garantia pedida e o resultado observado. Um temporizador local pode decidir parar uma tentativa, mas não cria sozinho prova de ausência de efeito ou de autoridade atual.
python3 content/labs/ha-quorum/run.py --bin-dir /path/to/etcd-3.6.15
# Creates its own loopback cluster and temporary data.
# No existing endpoints or data directories are accepted.Com um único membro vivo, TCP e status respondem e a leitura serializable devolve dados; a leitura linearizável falha. A acessibilidade não demonstra o contrato necessário para autorizar escrita.
Armadilhas comuns
Tratar succeeded=false como aquisição; comparar apenas o valor depois de uma pausa; trocar leitura linearizável por local; confundir lease com fencing.
Tópicos relacionados: Eleição, regresso e manutenção · Capacidade residual e domínios de falha · Fencing e recuperação de serviço
A autoridade exige uma garantia adequada à decisão e proteção no caminho que realmente aceita o efeito.
Referência: etcd API · DR HA 2026-09; Pacemaker 3.0, etcd 3.6, PostgreSQL 18 and selected Kubernetes/AWS behavior