Sincronizando o horário por meio do NTP
- O QUE É?
Este artigo descreve o que é a sincronização de horário e como configurá-la.
- POR QUÊ?
Manter o horário do sistema sincronizado é crucial ao compartilhar tarefas e recursos pela rede com outros membros da equipe.
- DEDICAÇÃO
A leitura deste artigo e a configuração básica da sincronização de horário no computador levam até 60 minutos.
- REQUISITOS
É necessário ter conhecimento básico da administração do sistema Linux. Tarefas específicas exigem privilégios de
root
.Conexão ativa com a rede interna ou com a Internet para acessar o servidor de horário de origem.
1 Introdução #
Manter o horário do sistema preciso e sincronizado no computador é fundamental para o trabalho em equipe. Os aplicativos de planejamento e de calendário contam com isso para controlar o horário corretamente e notificar os usuários em tempo sobre os compromissos. Para aplicativos em cluster, as máquinas host individuais geralmente exigem o horário do sistema sincronizado para comunicação mútua.
O relógio incorporado do hardware não é uma fonte de horário confiável. Uma correção manual do horário do sistema pode causar mau funcionamento de aplicativos críticos devido a intervalos repentinos de horário. Portanto, o horário do sistema precisa ser sincronizado por rede com uma fonte de horário externa confiável.
1.1 O que é NTP? #
O NTP (Network Time Protocol) foi projetado para sincronizar o horário do sistema por rede. O objetivo é manter o horário absoluto e usá-lo para sincronizar o horário do sistema de todas as máquinas em uma rede.
1.2 Como funciona o protocolo NTP? #
Quando o serviço NTP está devidamente configurado, ele consulta e ajusta o horário do sistema com os servidores de horário confiáveis de maneira contínua. Normalmente, os computadores domésticos e outros dispositivos conectados à Internet são configurados para consultar um servidor de horário público na Internet.
Por outro lado, os computadores desktop e os servidores que residem em uma sub-rede corporativa são configurados para consultar um servidor de horário dedicado na rede local. O próprio servidor de horário sincroniza seu horário com um servidor de horário público.
1.2.1 Implementação #
O chrony
é a implementação padrão do NTP no SLE Micro. O chrony
inclui duas partes:
O
chronyd
é um serviçosystemd
que pode ser iniciado no momento da inicialização.O
chronyc
é um programa de interface de linha de comando que monitora o desempenho dochronyd
e muda os parâmetros operacionais específicos em runtime.
1.3 Benefícios #
O uso do NTP para manter o horário preciso tem os seguintes benefícios:
As pessoas podem confiar em seus relógios ao seguir uma programação planejada.
Os aplicativos podem acionar ações programadas da área de trabalho ou do sistema com precisão.
Os nós do cluster podem manter seus dados sincronizados e atualizados.
O uso de um servidor de horário interno ajuda a manter o horário do sistema sincronizado em redes com acesso restrito à Internet.
2 Configurando o NTP ajustando /etc/chrony.conf
#
Quando chronyd
é iniciado, ele lê sua configuração no arquivo /etc/chrony.conf
. As seções a seguir listam parâmetros importantes que podem afetar o comportamento do chronyd
.
2.1 Especificando fontes de horário #
Para manter o relógio do computador sincronizado, você precisa informar ao chronyd
quais fontes de horário devem ser usadas. Para essa finalidade, use as diretivas server
, pool
e peer
. Você pode usar cada uma delas várias vezes.
A diretiva server
instrui o chronyd
a usar um host específico como servidor de horário por nome ou endereço IP.
server 0.europe.pool.ntp.org offline1 server 1.europe.pool.ntp.org offline prefer2 server 192.168.2.254
A opção | |
A opção |
A diretiva pool
permite especificar um nome de rede que seja resolvido para vários endereços IP que podem mudar ao longo do tempo.
pool pool.ntp.org iburst1 maxsources 32
A opção | |
A opção |
A diretiva peer
especifica um host de peer NTP em vez de um servidor de horário. A sincronização de horário do sistema entre peers usa uma arquitetura simétrica, em vez do modo do cliente/servidor chamado pelas opções server
e pool
. Você pode usar peer
várias vezes para especificar mais de um peer.
peer 192.168.1.116 peer ntp.example.com
2.2 Executando chronyd
como servidor NTP #
Por padrão, o chronyd
funciona como um cliente para servidores NTP especificados. Para fazê-lo operar também como um servidor NTP, adicione a diretiva allow
ao arquivo /etc/chrony.conf
. Ele abre a porta do servidor NTP (123 por padrão) e responde às solicitações do cliente.
Você pode especificar um único IP de um cliente NTP ou uma sub-rede para incluir vários clientes. Você pode usar a diretiva allow
várias vezes:
allow 1.2.3.4 allow 3.4.5.0/24
Se você não especificar um endereço IP ou uma sub-rede, a diretiva allow
independente permitirá o acesso de todos os endereços IPv4 e IPv6.
Para limitar o acesso da diretiva allow
anterior, use a diretiva deny
:
allow 1.2.3.4 deny 1.2.3.0/24 allow 1.2.0.0/16
No exemplo acima, o efeito é o mesmo, seja qual for a ordem das três diretivas. A sub-rede 1.2.0.0/16
tem o acesso permitido, exceto para a sub-rede 1.2.3.0/24
, que tem o acesso negado. No entanto, o acesso é permitido ao host 1.2.3.4
.
2.3 Configurando um relógio de referência local #
O chronyd
depende de outros programas (como gpsd
) para acessar os dados de horário por meio de um driver específico. Use a diretiva refclock
em /etc/chrony.conf
para especificar um relógio de referência de hardware a ser usado como fonte de horário. Ela tem dois parâmetros obrigatórios: um nome de driver e um parâmetro específico do driver. Os dois parâmetros são seguidos de zero ou de mais opções do refclock
. O chronyd
inclui os seguintes drivers:
- PPS
Driver para a API Pulse-Per-Second do kernel. Por exemplo:
refclock PPS /dev/pps0 lock NMEA refid GPS
- SHM
Driver de memória compartilhada do NTP. Por exemplo:
refclock SHM 0 poll 3 refid GPS1 refclock SHM 1:perm=0644 refid GPS2
- SOCK
Driver de soquete de domínio do Unix. Por exemplo:
refclock SOCK /var/run/chrony.ttyS0.sock
- PHC
Driver de relógio do hardware PTP. Por exemplo:
refclock PHC /dev/ptp0 poll 0 dpoll -2 offset -37 refclock PHC /dev/ptp1:nocrossts poll 3 pps
Para obter mais informações sobre as opções de drivers individuais, consulte man 8
chrony.conf
.
2.4 Ativando fontes de horário offline #
O chronyd
é inicializado normalmente em um sistema que inicializa sem uma conexão de rede, mas ele não pode acessar os servidores de horário especificados em /etc/chrony.conf
. Para evitar que o chronyd
tente consultar servidores de horário inacessíveis, use a opção offline
ao lado da diretiva de fonte de horário, por exemplo:
server ntp.example.org offline
O chronyd
não tentará fazer poll no servidor até ser habilitado usando o seguinte comando:
#
chronyc online ntp.example.org
Quando a opção auto_offline
está definida em vez da opção offline
, o chronyd
pressupõe que o servidor de horário estava offline quando duas solicitações foram enviadas a ele sem receber uma resposta. Essa opção evita a necessidade de executar o comando offline
do chronyc
ao desconectar o link de rede.
3 Gerenciando chronyd
em runtime #
3.1 O que é o comando chronyc
? #
O chronyc
é a parte cliente da implementação chrony
do NTP. Você pode usar o comando chronyc
para mudar o comportamento do serviço chronyd
em runtime. Ele também gera relatórios de status sobre a operação do chronyd
.
As mudanças feitas com o chronyc
não são permanentes. Elas serão perdidas após a próxima reinicialização do chronyd
. Para mudanças permanentes, modifique /etc/chrony.conf
conforme descrito na Seção 2, “Configurando o NTP ajustando /etc/chrony.conf
”.
3.2 Como funciona o chronyc
? #
Você pode executar o chronyc
no modo interativo ou não interativo. Para executar o chronyc
interativamente, digite chronyc
na linha de comando e pressione Enter. Esse procedimento exibe um prompt e aguarda a entrada do seu comando. Por exemplo, para verificar quantas fontes NTP estão online ou offline, execute o comando activity
:
#
chronyc
chronyc> activity 200 OK 4 sources online 2 sources offline 1 sources doing burst (return to online) 1 sources doing burst (return to offline) 0 sources with unknown address
Para sair do prompt do chronyc
, digite quit
ou exit
.
Se você não precisa usar o prompt interativo, digite o comando diretamente, por exemplo:
#
chronyc
activity
4 O serviço chronyd
systemd
#
A parte principal do chrony
é o serviço chronyd
systemd
, que é executado em segundo plano e sincroniza o horário do sistema com os servidores de horário selecionados. Você pode usar os seguintes comandos systemd
para operar o serviço chronyd
:
-
systemctl status chronyd.service
Imprime informações estendidas sobre o status atual do serviço
chronyd
.-
systemctl is-enabled chronyd.service
Verifica se o início automático do serviço
chronyd
na inicialização do sistema está habilitado.-
systemctl enabled chronyd.service
Habilita o início automático do serviço
chronyd
na inicialização do sistema.-
systemctl disable chronyd.service
Desabilita o início automático do serviço
chronyd
na inicialização do sistema.-
systemctl is-active chronyd.service
Verifica se o serviço
chronyd
foi iniciado e está em execução.-
systemctl start chronyd.service
Inicia o serviço
chronyd
.-
systemctl stop chronyd.service
Interrompe o serviço
chronyd
.-
systemctl restart chronyd.service
Reinicia o serviço
chronyd
e recarrega o/etc/chronyd.conf
.
5 Solução de problemas #
Em caso de erros, verifique o seguinte.
Verifique se o seu computador está conectado a uma rede e se a rede está configurada corretamente:
>
sudo
systemctl status network.service ● NetworkManager.service - Network Manager Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2021-08-07 20:09:44 CEST; 4 days ago [...]Verifique se os servidores de horário que você inseriu como fontes de horário existem e podem ser acessados pela rede. Por exemplo:
>
ping pool.ntp.org PING pool.ntp.org (85.199.214.101) 56(84) bytes of data. 64 bytes from 85.199.214.101 (85.199.214.101): icmp_seq=1 ttl=37 time=29.9 ms [...]Se o serviço
firewalld
estiver ativo no computador, verifique se o serviço NTP é permitido.Verifique se o serviço
chronyd
está em execução:>
sudo
systemctl status chronyd.service ● chronyd.service - NTP client/server Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2021-08-07 20:09:44 CEST; 4 days ago [...]Se o horário do sistema em um convidado virtualizado for diferente do horário exato, verifique se o horário do sistema do Servidor de Host de VM está sincronizado com um servidor de horário válido e se o convidado está sincronizado com a mesma fonte de horário do host.
Se o serviço NTP não for iniciado corretamente durante a inicialização do sistema, isso pode ser causado por switches de rede configurados para usar o
Spanning Tree Protocol
, enquanto as portas não estão configuradas comoEdge Ports
, mas comoPortfast
. Nesse caso, pode levar até um minuto para que a conectividade de rede seja estabelecida.Se houver falha ao iniciar o serviço NTP durante a inicialização do sistema quando o NetworkManager for usado, edite o arquivo
/etc/sysconfig/network/config
e mude o valor deNM_ONLINE_TIMEOUT
para 30. Se o problema persistir, aumente o valor do tempo de espera em 15 e tente novamente.Se as fontes NTP não puderem ser acessadas, identifique-as com o seguinte comando:
>
chronyc sources -v [...] MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* time.mydomain.com 3 10 377 81 -5354us[-8257us] +/- 191ms ^? ntp1.example.com 0 10 0 - +0ns[ +0ns] +/- 0ns ^? 77.177.77.177 0 10 0 - +0ns[ +0ns] +/- 0ns ^? ntp3.example.com 0 10 0 - +0ns[ +0ns] +/- 0ns ^? ntp4.example.net 0 10 0 - +0ns[ +0ns] +/- 0ns ^? 2a02:3d8:1::1:1 0 6 0 - +0ns[ +0ns] +/- 0ns ^? ntp2.example.org 0 10 0 - +0ns[ +0ns] +/- 0nsNesse caso, o único servidor que está realmente exibindo o horário é
time.mydomain.com
. Geralmente, é necessário solucionar problemas de conexão de rede com as fontes de horário NTP remotas com falha.
6 Para obter mais informações #
A proteção do computador com
firewalld
está descrita em https://documentation.suse.com/sles/html/SLES-all/cha-security-firewall.html#sec-security-firewall-firewalld.Os comandos para serviços
systemd
operacionais estão listados em https://susedoc.github.io/doc-modular/main/html/reference-systemctl-enable-disable-services/.Para obter uma referência completa, consulte as páginas de manual relacionadas:
Para obter uma lista completa de dispositivos de configuração, execute
man 1 chrony.conf
.Para obter uma lista completa dos comandos
chronyc
, executeman 1 chronyc
.Para obter uma lista completa das opções de linha de comando
chronyd
, executeman 8 chronyd
.
7 Informações legais #
Copyright © 2006-2024 SUSE LLC e colaboradores. Todos os direitos reservados.
Permissão concedida para copiar, distribuir e/ou modificar este documento sob os termos da Licença GNU de Documentação Livre, Versão 1.2 ou (por sua opção) versão 1.3; com a Seção Invariante sendo estas informações de copyright e a licença. Uma cópia da versão 1.2 da licença está incluída na seção intitulada “GNU Free Documentation License” (Licença GNU de Documentação Livre).
Para ver as marcas registradas da SUSE, visite https://www.suse.com/company/legal/. Todas as marcas comerciais de terceiros pertencem a seus respectivos proprietários. Os símbolos de marca registrada (®, ™ etc.) indicam marcas registradas da SUSE e de suas afiliadas. Os asteriscos (*) indicam marcas registradas de terceiros.
Todas as informações deste manual foram compiladas com a maior atenção possível aos detalhes. Entretanto, isso não garante uma precisão absoluta. A SUSE LLC, suas afiliadas, os autores ou tradutores não serão responsáveis por possíveis erros nem pelas consequências resultantes de tais erros.