Por que o NTP está sincronizando com o servidor LOCAL e não com o servidor remoto?


11

Portanto, estou tentando depurar minha configuração atual do NTP e constatou que o deslocamento do meu único servidor configurado é superior a 3 segundos e não está sendo ajustado. O asterisco no LOCAL (0) na saída ntpq parece indicar que o sistema está sincronizando felizmente consigo mesmo, em vez do servidor 10.130.33.201 (que é outra caixa linux em nosso sistema com a qual queremos que tudo seja sincronizado).

ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 10.130.33.201   LOCAL(0)         9 u   49   64  377    0.242  -3742.2   1.049
*LOCAL(0)        .LOCL.          10 l    2   64  377    0.000    0.000   0.001

E este é o meu arquivo ntp.conf. Escrito por outra pessoa, por isso não tenho 100% de certeza de que tudo está correto.

server 10.130.33.201 burst iburst minpoll 4 maxpoll 11
driftfile /mnt/active/etc/ntp.drift

restrict -4 default  nomodify nopeer notrap
restrict -6 default  ignore

# Undisciplined Local Clock. This is a fake driver intended for backup
# and when no outside source of synchronized time is available.
server  127.127.1.0     # local clock
fudge   127.127.1.0 stratum 10

Eu li sobre o burst e iburst e minpoll / maxpoll, então percebo que esses podem não ser necessários, mas acho que isso não tem nada a ver com o meu problema atual.

Além disso, devido à maneira como ele é implantado, esse arquivo de configuração levará muito trabalho para mudar, então espero que não exista nada que realmente precise ser alterado. Espero que este seja um caso em que eu não entenda como o NTP funciona.


EDIT -

Portanto, parece que esta é uma duplicata desta pergunta , mas não acho que o pôster tenha uma resposta suficiente; portanto, ainda gostaria de saber por que a hora local está sendo preferida ao servidor. Além disso, conforme uma das respostas abaixo, tentei usar a preferpalavra-chave na linha do servidor de configuração e reinicialização, mas isso não parece ter tido efeito.

Se eu remover todas as linhas "locais" na configuração, como sugerem as respostas para a outra pergunta, o que acontecerá se o servidor estiver inacessível? O NTP morre ou continua tentando?


EDIÇÃO IMPORTANTE -

Ok, normalmente, 10.130.33.201 (O "servidor") não tem acesso à Internet e não possui uma fonte de tempo GPS para usar. A parte importante é que todos os dispositivos no sistema tenham o mesmo horário que o servidor, independentemente de quão correto seja esse horário.

Portanto, apenas para ver o que aconteceria, adicionei um dos servidores de pool NTP ao arquivo de configuração do servidor para obter tempo a partir daí e não local. Agora ele obtém tempo corretamente do servidor de horário NTP.

Depois disso, os clientes agora sincronizam com o servidor, em vez de preferirem LOCAL (0)

 ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*10.130.33.201   38.229.71.1      3 u   58   64  377    0.216  715621.   1.001
 LOCAL(0)        .LOCL.          10 l   18   64  377    0.000    0.000   0.001

NOVA PERGUNTA - Quando meu servidor está usando local (exemplo original que foi dado), parece que os clientes estão dizendo: "Oh, 10.130.33.201 está usando LOCAL (0). Hmm, eu também tenho um servidor LOCAL (0) - - Vou usar isso diretamente, em vez de obter as mesmas informações em 10.130.33.201 ".

É esse o caso? Eles estão tentando ir "diretamente para a fonte", que é incorretamente LOCAL (0)? Eu preciso do meu servidor para obter tempo de LOCAL (0) e dos clientes para obter tempo do servidor. No momento, remover o servidor "local" dos arquivos de configuração do cliente é a única opção, mas eu gostaria de entender por que isso está acontecendo e, se possível, evitar alterar suas configurações (a alteração da configuração será muito trabalhosa devido a Nosso ambiente...).

Além disso, isso parece outra duplicata sem uma boa resposta.


Além disso, se você tiver acesso à rede sempre ativo em 30.10.33.201, considere remover a fonte de relógio local.
Aaron Copley

Respostas:


9

Com apenas um servidor NTP configurado, o algoritmo não tem muita certeza em quem confiar. Embora o estrato seja menor com o host remoto, aposto que o algoritmo considera a hora local mais confiável.

Tente usar a preferpalavra-chave com sua serverdeclaração para defini-la como uma fonte de tempo preferencial.


EDIT -

Portanto, parece que esta é uma duplicata desta pergunta, mas não acho que o pôster tenha uma resposta suficiente; ainda assim, gostaria de saber por que a hora local está sendo preferida ao servidor.

Para uma resposta realmente suficiente, você vai cavar as entranhas de um algoritmo muito complexo. A documentação nem fica muito específica, mas tenho certeza de que há um white paper ou especificação por aí.

Se eu remover todas as linhas "locais" na configuração, como sugerem as respostas para a outra pergunta, o que acontecerá se o servidor estiver inacessível? O NTP morre ou continua tentando?

O daemon NTP não morre ou para, mas pára o tempo de sincronização após falha ao acessar o servidor remoto. É por isso que as práticas recomendadas sugerem no mínimo três servidores remotos e não devem ser usadas a LCL, a menos que você esteja desconectado da rede. Três servidores são sugeridos porque, quando existem apenas dois, e eles discordam, qual deles escolherá? O terceiro servidor deve ajudar o algoritmo a eliminar o servidor falso.

Por fim, acabei de perceber que você não define a driftfile. Isso pode ajudar?


Fazer a diferença entre os dois estratos (ums?) Influencia isso? Ter o servidor abaixo de 9 ajudaria?
precisa saber é o seguinte

Poderia. É certo que eu não sei muito sobre os internos do próprio algoritmo. No entanto, o único caso em que você deve falsificar o estrato é com o relógio local. Não posso recomendar que você modifique um servidor remoto como uma correção. O NTP deve ser confiável para determinar a melhor fonte com o mínimo de interferência. Por acaso, você tem um caso em que precisa dar um empurrãozinho.
Aaron Copley

Obrigado pelas sugestões. Havia um arquivo de deriva, mas ele não estava sendo criado, então removi para ver o que aconteceria. A remoção da linha local faz com que ela seja sincronizada com o servidor, então isso é algo. Você diz que o ntpd "encerrará o tempo de sincronização depois de não alcançar o servidor remoto", mas será iniciado novamente depois que o servidor for atingido? Eu só quero estar seguro no caso de uma interrupção temporária da rede.
precisa saber é o seguinte

Não, não começará novamente. Apenas desiste. Isso é chato e tem sido um problema para mim também. Agora sabemos que reiniciar o NTP se a conectividade da rede for perdida. É provável que o seu arquivo de derivação não esteja sendo criado porque o ntp não tem permissões para o caminho. Verifique isso.
Aaron Copley

7

Parece-me que o intervalo de deslocamento (diferença entre a hora do sistema e a hora do host NTP) é muito diferente para o NTP configurá-lo corretamente.

Minha sugestão,

 1. Stop the NTP service
 2. As root ntpdate -bs 10.130.33.201 to reset your time to something close
 3. Start the NTP service

Você não deve ter problemas depois disso.


2
Se a máquina for uma VM ou tiver alguma outra condição que faça com que ocorra um grave problema de tempo, você pode definir a tinker panic 0opção ntp para forçar o NTP a aceitar compensações. Mas use isso apenas com servidores NTP que você nunca terá problemas.
precisa saber é o seguinte

Ok, eu pensei que tinha que ser mais do que 1000s antes que isso fosse um problema, e então eu pensei que o servidor seria listado com um sinal de #? Não é esse o caso? O "deslocamento" está em segundos ou milissegundos?
precisa saber é o seguinte

No momento, ele não será sincronizado com 10.130.33.201 porque o deslocamento é muito alto, mas isso não corrigirá o fato de estar à deriva o suficiente, em primeiro lugar, para que o LCL esteja se tornando mais desejável. Eu acho que isso, um driftfile de trabalho, e preferfaria o truque.
Aaron Copley

Você poderia explicar por que o deslocamento é muito alto? É menos de 1000s (muito menos) e não há sinal de #. Além disso, verifiquei o tempo real nos dois sistemas e eles têm cerca de 4 segundos de diferença.
precisa saber é o seguinte

+/- 1000 ms ... não +/- 1000 s . Está em -3742 ms .
Aaron Copley

2

O estrato de 10.130.33.201 como servidor LOCAL é 9, o que faz com que o estrato local calculado a partir disso (9 + 1 = 10) concorra com o servidor LOCAL local no estrato 10. Como o estrato LOCAL local não possui atrasos ou instabilidade de rede, pode parecer um pouco melhor para ntpd do que o remoto.

Se você deseja que essa configuração funcione, defina o servidor LOCAL 'master' com um nível inferior a 9. Não muito baixo se desejar que um tempo rastreável para um servidor do nível 1 seja preferido.


Obrigado. Vou verificar isso o mais rápido possível. Parece promissor.
JPH1618

Bem, parece que eu tentei abaixar o estrato do servidor LOCAL 10.130.33.201. Atualmente, está definido como 5, o cliente o vê como 6, mas ainda prefere seu próprio LOCAL, que possui um estrato de 10. Essa configuração está em vigor há dias.
precisa saber é o seguinte

2

Eu sei que isso é velho, mas acho que você está certo. Ninguém mostra nenhuma maneira de depurar problemas ntpd. Acontece que é factível.

Acho que você estava no caminho certo quando suspeitou que o uso de LOCAL (0) localmente e no servidor upstream pode ser um problema.

Certamente estava em um console de tempo de 4 servidores com os quais tive um problema semelhante. Tudo estava pronto para ser um do outro, então, possivelmente, um problema diferente do seu.

Primeiro, porém, há uma maneira melhor de lidar com ilhas de tempo, chamada modo órfão, suportada pelas versões ntpd dos últimos anos:

Modo órfão em doc.ntp.org

Inicialmente, todos os 4 servidores tinham o mesmo estrato de 10 e preferiam o relógio local. Eu consertei isso e ainda assim eles preferiam o relógio local (o estrato parece ser importante).

Eu usei o comando ntpq pe (peer), as, rv para obter uma idéia do que estava acontecendo. Você precisa usar rv (readvar) no número de associação para o servidor despejar as informações. pe e como parecem ser classificados pelo mesmo índice para que você possa obter o número as dessa maneira. como tem um campo chamado condição que pode mostrar o valor rejeitado se não gostar do servidor.

Na saída rv existe um campo chamado flash. Se tudo estiver bem, será zero. Caso contrário, é uma máscara de bit (exibida em hexadecimal) dos problemas. Eles podem ser consultados aqui:

decodificações internas ntpd

O problema que tive foi 0800 peer_loop. Descobriu-se que refid do relógio é importante. Vendo LOCAL (0) tanto no relógio local quanto no servidor remoto, o ntpd achou que havia um loop. David Mills confirma que nas postagens em comp.protocols.time'How to evitar loop in NTP '(atingi meu limite de 2 links, desculpe!)

O uso do argumento refid para alterar a definição do refid exclusivo não funcionou - ele ainda aparece como LOCAL (0) no destinatário.

O que parecia funcionar foi o uso de números de instância exclusivos para o driver local. 127.127.1. [0-3]. Use o mesmo ID no servidor e na linha de falsificação. Quando eu fiz isso, os servidores geralmente sincronizavam com o servidor de camada mais baixa, que geralmente usava o relógio local. No entanto, ocasionalmente, tentava usar um dos outros servidores que o estavam usando como fonte. No entanto, os tempos entraram em sincronia e parecem continuar assim.

Provavelmente é tarde demais para ajudar, mas eu ofereço para mostrar que o NTP é passível de lógica e solução de problemas. Levei horas para chegar à resposta por tentativa e erro e depois encontrei os documentos mais tarde.


-1

Use iburst para forçar o servidor a enviar a solicitação NTP para o NTS desejado, mesmo se uma solicitação falhar


Isso precisa de uma explicação melhor.
Sven
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.