Mantendo o tempo em uma pilha de tecnologia moderna

O tempo é algo que a maioria de nós ignora sem pensar muito. No entanto, quando se trata de sistemas distribuídos modernos como Cassandra e Zookeeper, o tempo é incrivelmente importante

O que precisamos…

Precisamos que todos os nossos nós tenham seus relógios sincronizados com milissegundos um do outro

Por quê…

O inferno pode congelar! não, sério, quando o tempo está fora de sincronia entre seus nós, você acabará causando estragos em algum ponto. Nosso maior medo era escrever para Cassandra sendo sobrescrito porque os nós estavam fora de sincronia por algo ridículo como 0,1 segundo, mas existem centenas de outros casos extremos que tornam a vida miserável

Soluções … Problemas …

Portanto, o NTP é a resposta óbvia aqui, mas é muito mais complicado do que apenas instalar o pacote NTP, porque precisamos que todos os nossos nós tenham exatamente o mesmo tempo.

A sincronização com pools NTP externos não é confiável, há muita instabilidade. Se você obtiver um nó inválido, seu tempo será confuso para aquele nó e você perderá a consistência. O objetivo de todo esse projeto era ter um único horário verdadeiro para toda a nossa rede e todos os nossos nós estariam em sincronia com esse horário.

O que fizemos…

Construímos nosso próprio cluster de servidor NTP privado em 3 nós existentes. 1 nó é um mestre que é sincronizado com o pool NTP amazon e os outros 2 fornecem HA e sincronizados diretamente do mestre.

Melhor ainda, esses nós podem ser trocados por chips de framboesa com módulos GPS para precisão de tempo Stratum 0 … ótimo se você quiser cortar completamente os pools públicos de NTP

Todos os outros nós da rede (app, db, etc.) obtêm seu tempo diretamente do mestre único ou dos escravos em espera no caso de um mestre com falha. Isso significa que temos uma única hora verdadeira do mestre que está sincronizada com a hora do relógio de parede e consistente em alguns microssegundos na rede.

Protip:

O pool NTP do Ubuntu é horrível. Independentemente do seu caso de uso, mude seu para usar um pool mais estável, como ,/etc/ntp.conf0.amazon.pool.ntp.org1.amazon...

Resumindo

Portanto, construímos isso em um livro de receitas do Chef que gerencia todas as escolhas de mestre / escravo, configuração de cliente e servidor e configuração de NTP automaticamente. É código aberto no Github: https://github.com/evertrue/ntp_cluster e o Supermercado

Se você estiver interessado em usá-lo, por favor me avise, ficarei feliz em ajudá-lo

http://edhurtig.com/2015/05/keeping-time-in-a-modern-tech-stack/