Por que o NTP está sendo sincronizado com o LOCAL em vez do servidor remoto?

11

Então, estou tentando depurar minha configuração atual do NTP e descobri que o deslocamento do meu único servidor configurado é superior a 3 segundos e não se ajusta. O asterisco no LOCAL (0) na saída ntpq parece indicar que o sistema está felizmente sincronizando consigo mesmo em vez do servidor 10.130.33.201 (que é outra caixa linux em nosso sistema que 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, então 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 eles podem não ser necessários, mas não acho que isso tenha alguma coisa a ver com o meu problema atual.

Além disso, por causa de como ele é implantado, esse arquivo de configuração vai precisar de muito trabalho para mudar, então espero que não haja nada que realmente deva ser alterado. Espero que este seja um caso de eu não entender como funciona o NTP.

EDITAR

Portanto, parece que esta é uma duplicata de Esta questão , mas eu não sinto que o pôster tenha uma resposta suficiente, então eu ainda gostaria de saber por que o horário local está sendo preferido em relação ao servidor. Além disso, de acordo com uma das respostas abaixo, tentei usar a palavra-chave prefer na linha do servidor da configuração e reiniciar, mas isso parece não ter tido efeito.

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

EDIÇÃO IMPORTANTE -

Ok, normalmente, 10.130.33.201 (o "servidor") não tem acesso à internet e não tem uma fonte de tempo GPS para usar. A parte importante é que todos os dispositivos no sistema têm o mesmo tempo que o servidor, independentemente de quão correta a hora realmente é.

Então, só para ver o que aconteceria, adicionei um dos servidores de pool do NTP ao arquivo de configuração do servidor para que ele tivesse tempo de lá, em vez de obter tempo do local. Agora, ele recebe corretamente o tempo do servidor de horário NTP.

Depois disso, os clientes agora sincronizam com o servidor, em vez de preferir 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) - I ' Vou usar isso diretamente, em vez de obter as mesmas informações via 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 o tempo de LOCAL (0), e eu preciso que os clientes obtenham tempo do servidor. Agora, 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, evite alterar suas configurações (a mudança de configuração será muito trabalhosa devido a nosso meio ambiente ...).

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

    
por JPhi1618 25.01.2013 / 18:44

5 respostas

9

Com apenas um servidor NTP configurado, o algoritmo não tem certeza em quem confiar. Mesmo assim, o estrato é menor com o host remoto, aposto que o algoritmo acha que o horário local é mais confiável.

Tente usar a palavra-chave prefer com sua instrução server para definir isso como uma fonte de horário preferencial.

EDIT -

So, it looks like this is a duplicate of This question, but I don't feel that poster got a sufficient answer, so I would still like to know why the local time is being preferred over the server.

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

If I do remove all of the "local" lines in the config as the answer to the other question suggest, what will happen if the server is unreachable? Does NTP die or does it just keep trying?

O daemon NTP não morre ou pára, mas deixa de sincronizar o tempo depois que ele não consegue acessar o servidor remoto. É por isso que as práticas recomendadas sugerem um mínimo de três servidores remotos e não usam o LCL, a menos que você esteja desconectado da rede. Três servidores são sugeridos porque quando há apenas dois, e eles discordam, qual escolherá? O terceiro servidor deve ajudar o algoritmo a eliminar o servidor falso.

Por último, observei que você não define um driftfile . Isso pode ajudar?

    
por 25.01.2013 / 19:25
7

Parece-me que o intervalo de deslocamento (diferença entre a hora do seu sistema e a hora do host do 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.

    
por 25.01.2013 / 18:48
2

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

Se você quiser que esta configuração funcione, configure o servidor LOCAL 'master' para um estrato menor que 9. Não é muito baixo se você quiser que um tempo rastreável a um servidor de estrato 1 seja preferido.

    
por 01.02.2013 / 15:25
1

Eu sei que isso é velho, mas acho que você está certo. Ninguém mostra como depurar problemas do 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 foi em uma ilha do tempo de 4 servidores que eu tive um problema semelhante com. Todos estavam prontos para serem pares um do outro, então, possivelmente, um assunto diferente para vocês.

Primeiro, há uma maneira melhor de lidar com ilhas de tempo chamadas de modo órfão, suportadas com 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 eles ainda preferiam o relógio local (o estrato parece ser importante).

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

Na saída do rv é um campo chamado flash. Se tudo estiver bem, isso será zero. Se não, é um bitmask (exibido em hexadecimal) dos problemas. Eles podem ser pesquisados aqui:

decodificação interna do ntpd

O problema que eu tive foi o 0800 peer_loop. Descobriu-se que refid do relógio é importante. Ver LOCAL (0) no relógio local e no servidor remoto teve o ntpd pensando que havia um loop. David Mills confirma que em posts no comp.protocols.time'Como evitar o loop no NTP '(cheguei ao meu limite de 2 links, desculpe!)

Usar o argumento refid para falsificar para definir refid exclusivo não funcionou - ele ainda é exibido como LOCAL (0) no destinatário.

O que parece funcionar foi usar 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 fudge. Quando fiz isso, os servidores geralmente eram sincronizados com o servidor de estrato mais baixo, que normalmente usava seu relógio local. No entanto, ocasionalmente, tentou usar um dos outros servidores que o estava usando como fonte. No entanto, os tempos entraram em sincronia e parecem continuar assim.

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

    
por 15.11.2015 / 20:24
-1

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

    
por 28.08.2017 / 02:48

Tags