Como consertar o tempo no servidor NTP com muitas máquinas sincronizadas por ele

4

Eu tenho um servidor NTP que tem uma configuração de hora errada que é de 7 horas no futuro (o fuso horário foi alterado após o envio da máquina, mas não o tempo). O servidor em si não está sincronizado, mas tem apenas o seu relógio local. Neste servidor > 10 clientes sincronizam seu relógio, o que leva a um grupo inteiro de servidores com uma hora errada.

Como posso alterar a hora no servidor NTP em que a correção é rotacionada e todos os clientes também serão corrigidos? Eu primeiro testei com apenas uma correção via "data MMDDhhmm" que permite aos clientes desconectarem do servidor (o asterisco na frente do nome do servidor no ntpq desapareceu).

Eu não sei como todos os serviços sincronizados irão se comportar quando eu mudar a hora em todos os servidores manualmente, definindo o relógio de volta 7 horas levando os sistemas a terem arquivos do futuro. Pode haver falhas e os sistemas fornecem serviços para uma produção fab.

    
por Rick-Rainer Ludwig 22.10.2015 / 02:38

2 respostas

4

Quando você fala sobre passar o tempo, você está geralmente falando sobre pequenas quantidades de tempo. A correção é executada com uma chamada para adjtime() , ou no linux talvez adjtimex() .

Na página de manual do ntpd:

   -x     Normally, the time is slewed if the offset is less than the step
          threshold,  which is 128 ms by default, and stepped if above the
          threshold.  This option sets the threshold to 600  s,  which  is
          well  within  the  accuracy  window  to  set the clock manually.
          Note: Since the slew rate of typical Unix kernels is limited  to
          0.5  ms/s,  each  second  of adjustment requires an amortization
          interval of 2000 s.  Thus, an adjustment as much as 600  s  will
          take  almost  14 days to complete.  This option can be used with
          the -g and -q options.  Note: The kernel time discipline is dis‐
          abled with this option.

Eu duvido que você queira esperar por uma correção de 7 horas nesta velocidade. Levaria mais de um ano. No linux adjtime em um sistema de 32 bits é efetivamente restrito a um delta de cerca de 2000 segundos. Os sistemas de 64 bits provavelmente não causam problemas, mas a velocidade na qual a alteração entraria em vigor ainda é uma preocupação.

Portanto, há um limite na implementação do Linux, e presumivelmente outros, sob o qual você obtém um 'slew' que é muito lento, mas acima disso os clocks do sistema no master e clientes serão escalonados, o que pode acontecer muito mais rápido.

Haverá também outro limite onde, se a diferença de tempo entre o mestre e o cliente for muito grande, o cliente assumirá um erro e não atualizará. Na página man do ntpd:

   -g     Normally, ntpd exits with a message to the  system  log  if  the
          offset  exceeds the panic threshold, which is 1000 s by default.
          This option allows the time to  be  set  to  any  value  without
          restriction; however, this can happen only once.  If the thresh‐
          old is exceeded after that, ntpd will exit with a message to the
          system log.  This option can be used with the -q and -x options.

Observe que a opção -g quase certamente não está definida para um daemon. Geralmente é usado como ntpd -gq , executado como um único no início do sistema ou manualmente, que se comporta de maneira semelhante a ntpdate . O limite de pânico é presumivelmente configurável em tempo de compilação, portanto, verifique a página de manual do (s) seu (s) fornecedor (es) do SO.

É bastante simples escrever um programa que faça uma série de ajustes de tempo usando qualquer frequência e tamanho de ajuste que você escolher. Você pode fazer isso no mestre ntp, e ele servirá o tempo ajustado para seus clientes, mas você precisa saber qual o ajuste máximo de tamanho que os sistemas cliente aceitarão, e qual limite mínimo fará com que eles executem uma mudança muito lenta. Por segurança, você deve pesquisar as implementações do ntp nos sistemas clientes.

Se você está atualizando sistemas com características similares ao padrão ntpd no linux sem a opção -x , então você pode usar um regime como fazer um ajuste de meio segundo a cada 5 segundos e entrar em sincronia ao longo do curso cerca de 3 dias. Fazer ajustes de sub-segundo que não cruzam um segundo limite pode ajudar a evitar coisas como acionar tarefas do cron duas vezes, mas espere que você encontre provavelmente algum tipo de efeitos colaterais.

Se você acabar em uma situação em que seus servidores não estão mais sincronizados entre si, fica mais confuso. Se possível, gostaria de monitorar as diferenças de horário e automaticamente parar de fazer as atualizações periódicas automatizadas se alguns servidores não estiverem mais acompanhando e gerar um alerta.

    
por 28.10.2015 / 14:01
0

Como você sabe, os clientes permanecerão sincronizados se a alteração do relógio estiver dentro de um pequeno intervalo. Em alguns sistemas, isso leva apenas cinco minutos. Seu pode ser de 10 minutos. Você pode pular o relógio dentro desse intervalo e os clientes irão rodar para acompanhar.

Eu posso ver quatro opções:

  1. Não faça nada e viva com o tempo incorreto indefinidamente.

  2. Redefina o relógio por quatro minutos (ou nove minutos se você tiver um intervalo de 600 segundos) e repita ad nauseum durante o ano em que mc0e calculado é necessário . Você realmente quer fazer isso com um script. Permitir que o tempo seja incorreto para grande parte deste ano. Faça anotações copiosas do deslocamento de tempo para correlacionar com os relatórios de produção.

  3. Retire os servidores para um período de manutenção de sete horas (Dia de Natal, alguém?) e conserte todos os relógios adequadamente, de uma só vez.

  4. Salte os relógios e garanta que todos saibam que haverá uma sobreposição de relatórios de sete horas. No entanto, essas mesmas pessoas já devem saber que os tempos de produção estão fora de sete horas, então você pode achar isso aceitável. (Obviamente, eu não sei o impacto que isso teria em seus processos de fab.)

Nenhuma das soluções é ideal. Se os tempos de relatório de produção são importantes, a opção 2 é provavelmente a pior de um grupo ruim.

    
por 29.10.2015 / 19:32