Como alguém pode garantir ou até mesmo garantir que o horário do servidor esteja sincronizado corretamente entre dezenas de servidores em vários datacenters em locais diferentes?

3

Atualmente, nossos aplicativos da web contêm uma lógica para verificar se os dados enviados para o servidor da web expiraram ou não, comparando o registro de data e hora dos dados com a data / hora do servidor.

Tudo acontece, até que algum funcionário do data center modifique acidentalmente uma data / hora do servidor da web e cause algumas interrupções em nossos serviços da web. Meus gerentes não estão felizes com isso, e disseram que não devemos usar timestamp para verificar a expiração em primeiro lugar ... de qualquer maneira ....

O Network Time Protocol é implementado, porque os datacenters estão espalhados por diferentes continentes, portanto, temos um servidor NTP em cada datacenter. Os servidores dentro do data center terão tarefas agendadas para checar o tempo com seu servidor NTP do mesmo data center. Se o tempo estiver fora de sincronia, ele atualizará automaticamente a data / hora do servidor.

Mas, com nossos gerentes, não estamos felizes com isso e achamos que isso ainda pode facilmente causar o mesmo problema. por exemplo. E se alguém acidentalmente modificar a data / hora do NTP? E se todos os servidores NTP estiverem fora de sincronia um com o outro? em quais servidores NTP podemos realmente confiar? e blá blá ..

Então, minhas perguntas são:

  1. Qual é a prática atual para sincronizar data / hora entre servidores em vários datacenters ou locais?
  2. Como alguém gerencia o registro de data e hora entre aplicativos da web? por exemplo. Servidor A envia dados (contêm registro de data e hora do Servidor A) para o Servidor B (compara o registro de data e hora entre o Servidor B e o registro de data e hora dos dados para ver se expirou ou não. Isso evita a repetição HTTP)
  3. Deveríamos realmente não usar a verificação de timestamp?

Obrigado & Atenciosamente

    
por forestclown 31.08.2011 / 04:07

2 respostas

4

some dude from data center accidentally modify one of the web server date/time

Este é o seu primeiro problema. É provavelmente causado por uma combinação de:

  • 'cara [s] do [centro] de dados' com treinamento insuficiente e
  • Privilégios excessivamente altos

A alteração da hora do sistema requer privilégios administrativos. Alterar a hora manualmente em um sistema que não só tem a hora correta, mas cujo tempo está sendo gerenciado usando o NTP é um sinal de treinamento insuficiente. Resolva este problema primeiro, porque até que você o resolva, o tempo exato do sistema é provavelmente o mais visível dos seus problemas. O que mais eles estão fazendo neste sistema e por quê?

My managers ... said we shouldn't use timestamp to check expiry in the first place

Se houver uma opção alternativa viável que tenha sido proposta, eu pelo menos consideraria isso. De alguma forma eu suspeito que não é o caso.

Network Time Protocol is implemented, because of data centers are spread across different continents so we have one NTP server in each data center.

Eu recomendaria dois em cada centro de dados. E cada um deles faria referência a um conjunto diferente de servidores NTP externos, além de fazer referência um ao outro. Isso vai resultar em um tempo mais estável e torná-lo muito mais robusto para falhas únicas. Eu também sou paranóico e super engenheiro, então tem isso. Ainda assim, os servidores NTP exigem aproximadamente zero em termos de recursos, portanto, execute-os em qualquer lugar.

The servers within the data center will have cron jobs to check against the time with their NTP server from the same data center. If time is out of sync it will auto update the server date/time.

Este é um plano ruim. Cron não tem lugar mudando o tempo em um sistema NTP. Os servidores devem executar clientes NTP reais. Esses clientes devem referenciar os (dois) servidores NTP locais.

Se você deseja usar o cron, use o cron em cada servidor para verificar se o servidor foi sincronizado com êxito com os servidores NTP locais. Você pode fazer isso examinando a saída do comando ntpq. Você deve aprender sobre a saída do comando ntpq; é seu amigo.

Para resolver as questões que você relata como tendo sido levantadas:

But then with our managers not happy with it, and think it could still easily causes the same problem. e.g. what if someone accidentally modify the NTP date/time? what if all the NTP servers are out of sync with each other? which NTP servers we can really trust? and blah blah..

A primeira pergunta não é insana. Um pouco paranoico se levado ao extremo, mas bem. Respostas são:

  • Use mais de um relógio de referência independente. (um único erro será ignorado em vez do tempo estável de outras fontes)
  • Use um relógio de referência confiável (por exemplo, GPS) (Se os seus caras operacionais puderem modificar a hora em um satélite GPS acidentalmente, você terá problemas mais sérios do que os relógios do servidor da Web.)
  • Use chaves criptográficas para garantir que o relógio de referência com o qual você está se comunicando seja o que você confia.

O segundo é resolvido configurando os servidores NTP para referenciar um ao outro. Eles tendem a se unir, todas as outras coisas sendo iguais. Também usando relógios independentes de referência confiáveis.

  • Se um dos três relógios de referência de estrato inferior ficar dessincronizado, ele será ignorado.
  • Se dois ficarem fora de sincronia, eles serão ignorados.
  • Se todos os três relógios ficarem descontroladamente fora de sincronia, o NTP irá ignorar todos os três e fazer o melhor que puder (ainda muito bom, especialmente se houver um relógio de estrato igual ao qual possa fazer referência).
  • Você praticamente só precisa se preocupar com um ataque mal-intencionado aqui.

Pode ser complexo descrever esses casos, mas o NTP é estável primeiro e precisa se tiver uma fonte precisa.

No que diz respeito à confiança, a maioria das pessoas que executam um servidor NTP público não tem motivos para interferir no seu tempo. Muitos deles têm um motivo para fornecer um tempo preciso. Em termos de nível de interesse em fornecer um tempo preciso, sugiro que:

  • satélites GPS.
  • Servidores NIST NTP.
  • Qualquer fornecedor de estratos 1 bem conhecido.
  • Qualquer fornecedor bem conhecido de estrato 2.
  • O seu datacenter (supondo que você adquira hospedagem) provavelmente deve ter um servidor NTP ou três próprios, para uso próprio, se não houver outro.

Além disso, e isso é importante: o protocolo NTP é projetado para sincronizar o tempo em milissegundos. Não é o segundo. Se você usar o cron + ntpdate, seu tempo pode ser desligado por vários segundos (latência variável de agradecimento!). O NTP manterá seus relógios muito mais estáveis e precisos em circunstâncias semelhantes.

    
por 31.08.2011 / 06:11
1

O NTP e o GMT configurados corretamente para todos os servidores é a melhor prática. Há servidores de relógio mestre GPS que você pode comprar, se isso é um grande negócio, você tem o dinheiro e pode justificar a compra de um para cada data center. Isso parece um problema de operação - eles devem monitorar os horários nos servidores e alertar se eles estão significativamente fora do limite.

    
por 31.08.2011 / 04:27