Eu tenho duas máquinas Linux (A e B) em uma rede isolada. Eles devem estar sincronizados com o horário. A máquina A é alimentada intermitentemente e deve atender às horas, pois está conectada a uma fonte de tempo autorizada (GPS). A máquina B é energizada apenas se a máquina A estiver ligada, mas é um dispositivo linux incorporado e seu estado de energia muda com freqüência. Nenhuma máquina tem acesso a outros sistemas. É uma rede fechada.
Entendo que essa é uma tarefa bastante difícil para o NTP, pois o NTP normalmente espera ter contato com vários servidores. Estou tendo problemas para que isso funcione corretamente na Máquina B. A máquina A sincroniza perfeitamente com o GPS, e a máquina B pode alcançar a máquina A e até fazer consultas de tempo, mas a máquina A não é confiável (talvez por si só?). Depois de uma hora sólida de máquina A em funcionamento, isso mudou repentinamente e a máquina B funcionou. No entanto, quando a máquina A caiu (e, portanto, a máquina B), a máquina B novamente não consegue encontrar uma boa sincronização de tempo.
Aqui estão algumas informações sobre o ntpdate. Observe que, mesmo quando o estrato da máquina A é 1, a operação falha com a mesma saída no final.
10.10.10.1: Servidor descartado: estratos muito altos servidor 10.10.10.1, porta 123 estrato 16, precisão -19, salto 11, confiança 000 refid [10.10.10.1], atraso 0,02614, dispersão 0,00000 transmitido 4, no filtro 4 tempo de referência: 00000000.00000000 qui, 7 de fevereiro de 2036 6: 28: 16.000 carimbo de data e hora de origem: d3a9bdc4.27ebb350 qui, 12 de julho de 2012 21: 19: 00.155 carimbo de data / hora de transmissão: bc17c803.b42dfffe sáb, 1 de janeiro de 2000 0: 25: 39.703 atraso do filtro: 0,02625 0,02614 0,02618 0,02625 0,00000 0,00000 0,00000 0,00000 deslocamento do filtro: 39544160 39544160 39544160 39544160 0,000000 0,000000 0,000000 0,000000 atraso 0,02614, dispersão 0,00000 deslocamento 395441600.451568 1 Jan 00:25:39 ntpdate [677]: nenhum servidor adequado para sincronização encontrado
Meu palpite é que a máquina A simplesmente não confia em si mesma para cumprir as horas. Após 51 minutos (pode ter acontecido anteriormente, não sei) de tempo de atividade e com o relógio sincronizado com o GPS, a máquina A começou a servir corretamente a hora e a máquina B a pegou. Eu preciso que isso aconteça mais cedo. Em segundos, se possível.
Com as seguintes configurações (e muita espera), ele acaba sendo bem-sucedido.
Máquina A ntp.conf:
servidor 127.127.28.0 prefere verdadeiro minpoll 4 maxpoll 4 fudge 127.127.28.0 estrato 1 vez1 0.420 refid GPS
Máquina B ntp.conf:
servidor 10.10.10.1 prefere minpoll verdadeiro 4 maxpoll 4
ntpq -c pares na Máquina B sem correção de tempo:
refid remoto st t quando o alcance da pesquisa atrasa o jitter de deslocamento ==================================================== ============================ 10.10.10.1. STEP. 16 u 9 16 0 0,000 0,000 0,000
pares ntp1 -c na máquina B com boa correção de tempo:
refid remoto st t quando o alcance da pesquisa atrasa o jitter de deslocamento ==================================================== ============================ * 10.10.10.1 SHM (0) 2 u 7 16 17 0,669 2,597 1,808
Então, agora a pergunta se torna: como faço para que a Máquina A confie em si mesma rapidamente?
Algumas saídas de depuração da Máquina A antes e depois da máquina B decidem que a Máquina A é boa o suficiente para usar.
antes..
~ # ntpq -c rv associd = 0 status = c418 leap_alarm, sync_uhf_radio, 1 evento, no_sys_peer, version = "ntpd [email protected] sexta-feira, 24 de fevereiro 15:01:45 UTC 2012 (1)", processador = "armv7l", sistema = "Linux / 2.6.35.14", salto = 11, estrato = 2, precisão = -19, atraso na raiz = 0,000, descoberta de raiz = 44,537, refid = SHM (0), reftime = d3ab0053.43b44780 sexta-feira, 13 de julho de 2012 20: 15: 15.264, clock = d3ab0062.e7e03154 sexta-feira, 13 de julho de 2012 20: 15: 30.905, ponto = 34819, tc = 4, mintc = 3, deslocamento = 0,000, frequência = 0,000, sys_jitter = 3,853, clk_jitter = 36.492, clk_wander = 0.000
depois de...
~ # ntpq -c rv associd = 0 status = 0415 leap_none, sync_uhf_radio, 1 evento, clock_sync, version = "ntpd [email protected] sexta-feira, 24 de fevereiro 15:01:45 UTC 2012 (1)", processador = "armv7l", sistema = "Linux / 2.6.35.14", salto = 00, estrato = 2, precisão = -19, rootdelay = 0,000, rootdisp = 41,278, refid = SHM (0), reftime = d3ab0063.43b37856 sexta-feira, 13 de julho de 2012 20: 15: 31.264, clock = d3ab006d.9ee53ec2 sexta-feira, 13 de julho de 2012 20: 15: 41.620, ponto = 34819, tc = 4, mintc = 3, deslocamento = 0,000, frequência = 43,896, sys_jitter = 0,762, clk_jitter = 36.953, clk_wander = 0.000
ntp.conf
arquivos e a saída dentpq -p
quando a máquina B NÃO está se divertindo muito com a máquina A? Pode ser a marcação da máquina A como um código falso ou algo assim. Quando a máquina B não confia na máquina A, a máquina A está sincronizada com o GPS? (Saídantpstat
na máquina A.)Respostas:
NTP deve funcionar bem. Veja algumas das opções para sincronização rápida na inicialização. Veja as opções
burst
eiburst
para o sistema B. Veja atrue
opção para a fonte do relógio GPS.Considere usar o relógio do hardware como uma fonte de tempo de backup nos dois sistemas. Defina um sistema de estrato mais alto B. Algo como o seguinte deve funcionar:
Assista à saída de
ntpq -c peers
para ver quando você obtém uma fonte de relógio confiável. Normalmente,ntp
deseja um número de respostas de uma fonte de tempo confiável antes de confiar nela. Isso é indicado pelo primeiro caractere em cada linha.Enquanto o NTP gosta de mais fontes, qualquer número ímpar de fontes de tempo em um nível de estrato deve funcionar bem. Como você possui apenas dois servidores e um relógio GPS, a prioridade (estrato) das fontes deve aumentar em relação ao GPS, relógio no servidor A, relógio no servidor B. O aumento do estrato entre cada um em três ou quatro níveis garantirá que as prioridades sejam respeitadas.
EDIT: Se você tiver o servidor NTP do busybox no servidor A, pode valer a pena instalar o pacote completo do servidor ntp. Compreender o que está acontecendo com o servidor A deve percorrer um longo caminho para resolver seu problema. Você precisará de pelo menos uma fonte de tempo confiável para que o servidor B confie nela. Se
ntpq -c peers
não funcionar, você pode tentarntpdc peers
. Ambos os comandos permitem consultar outros hosts. Umpeerstats
log também pode ser útil.No servidor B, use ntpclient como documentado, o busybox ntp howto para registrar o que está acontecendo nele
Os relógios devem estar razoavelmente próximos do tempo correto se os servidores não estiverem inativos por muito tempo. Se você precisar sincronizar os dois sistemas, isso deve ser suficiente. O GPS sincronizará o tempo com o mundo real.
'ntpd -q' sincroniza rapidamente, mas sai (comportamento do ntpdate). Ele precisa ser seguido por um
ntpd
comando sem a opção quit para ter sincronização contínua.EDIT2: Verifico meu servidor e descobri que um dos servidores estava desativado por um segundo. Enquanto consertava isso, brinquei com as configurações.
iburst
obtém um servidor confiável muito rapidamente.true
garantiu que o driver do relógio fosse confiável se não houvesse várias outras fontes confiáveis. O relógio levou um pouco mais de um minuto antes de ser confiável localmente e poder ser confiável remotamente.Ao testar, você poderá reiniciar o
ntpd
processo depois que ele estiver sincronizado e testar a rapidez com que as configurações funcionam. No caso acima, o servidor B pode precisar ser reiniciado para testar a rapidez com que sincroniza. Ao monitorarntpd
alterações, uso uma linha como:O nome do host e o tempo de suspensão são ajustados conforme necessário. Em alguns casos, encadeio duas ou mais
ntpq
linhas de comando no loop. Ao fazer isso, uso um comando de eco e / ou data para fornecer uma indicação de onde os conjuntos de dados são alterados.fonte
true
eiburst
para o servidor B.