Como configurar NTP Linux: O que é o Chrony e a sua importância

Introdução

O mundo da tecnologia está repleto de ferramentas essenciais que muitas vezes passam despercebidas para a maioria dos usuários. Uma dessas ferramentas pouco conhecidas é o NTP (Network Time Protocol) e seu sucessor moderno, o Chrony. Embora o tempo seja uma parte fundamental de nossa vida cotidiana, muitas pessoas não estão cientes da importância da sincronização precisa do tempo em servidores e redes. Neste texto, vamos explorar o mundo do NTP e do Chrony, desvendando suas funcionalidades, diferenças e os contextos em que cada um se aplica e como configurar NTP Linux na prática.

O que é o Chrony

O que é o NTP?

O NTP é um protocolo estabelecido há décadas, mas poucos conhecem a sua existência. Sua função primordial é sincronizar os relógios dos computadores em uma rede, permitindo que todos os dispositivos estejam em acordo sobre o tempo atual. Isso pode parecer trivial à primeira vista, mas a sincronização precisa do tempo é crucial para uma ampla gama de aplicações, desde transações financeiras até a segurança de sistemas críticos.

Apesar da relevância do NTP, uma nova alternativa, o Chrony, tem ganhado destaque recentemente. Desenvolvido como uma resposta aos desafios encontrados em ambientes de rede modernos, o Chrony oferece uma abordagem mais flexível e adaptativa para a sincronização do tempo. Seu objetivo é lidar com variações de latência de rede e garantir que o relógio do servidor esteja sempre preciso.

É surpreendente que essas ferramentas, tão cruciais para a estabilidade e o desempenho de servidores e redes, sejam amplamente desconhecidas. Embora muitos usuários possam não ter contato direto com o NTP ou o Chrony em suas atividades diárias, é importante reconhecer a relevância dessas ferramentas nos bastidores da tecnologia que usamos.

Este post vai fazer parte de uma série de postagens, que vão trazer uma solução de observabilidade muito interessante para quem utiliza Auto Scaling Group na AWS, envolvendo a confiabilidade sobre o horário dos servidores que fazem parte do Auto Scaling Group.

O que é o Chrony e a sua importância

O Chrony desempenha um papel crucial na manutenção da precisão do tempo em um servidor. A sincronização precisa do tempo é essencial para uma ampla gama de tarefas e processos que ocorrem em um ambiente de rede. Nesse sentido, o Chrony oferece uma série de benefícios que contribuem para a estabilidade e o desempenho geral de um servidor.

Em primeiro lugar, o Chrony é responsável por fornecer uma referência de tempo confiável para o servidor. Ele utiliza algoritmos avançados e técnicas de medição precisa para calcular a diferença entre o relógio do servidor e uma fonte de tempo externa, como um servidor NTP (Network Time Protocol). Ao manter o tempo atualizado com precisão, o Chrony assegura que as operações do servidor sejam executadas de forma consistente e coordenada.

Além disso, o Chrony é capaz de lidar com variações na latência de rede, compensando atrasos e estimando o tempo de viagem entre o servidor e a fonte de tempo. Isso é especialmente útil em ambientes de rede onde a latência pode variar significativamente, como em redes de longa distância ou em redes sujeitas a flutuações de tráfego. A capacidade do Chrony de ajustar o tempo de forma inteligente, considerando essas variações, garante que o servidor mantenha uma sincronização precisa, mesmo em condições desafiadoras.

Outro aspecto importante é a capacidade do Chrony de detectar e corrigir eventuais desvios no tempo do sistema. O algoritmo de disciplina do Chrony monitora constantemente o relógio do servidor, identificando e corrigindo pequenos desvios ao longo do tempo. Isso é fundamental para manter a estabilidade e a consistência do tempo no servidor, evitando erros e inconsistências que poderiam impactar negativamente o desempenho de aplicativos e serviços.

Em resumo, o Chrony desempenha um papel fundamental na garantia da precisão do tempo em um servidor. Ao fornecer uma referência de tempo confiável, lidar com variações de latência e corrigir desvios no tempo do sistema, ele contribui para a estabilidade, o desempenho e a coordenação adequada das operações em um ambiente de rede. Sua capacidade de ajuste inteligente e aprimoramento contínuo tornam o Chrony uma escolha valiosa para a sincronização do tempo em servidores.

A diferença entre NTP e Chrony

O NTP (Network Time Protocol) e o Chrony são dois protocolos amplamente utilizados para a sincronização de tempo em servidores. Embora ambos tenham o objetivo comum de fornecer um relógio preciso, eles possuem características distintas que os tornam adequados para diferentes contextos e requisitos.

O NTP é um protocolo estabelecido há mais tempo e amplamente adotado na sincronização de tempo em redes. Ele é projetado para fornecer uma precisão elevada em ambientes onde a latência é relativamente estável e baixa. O NTP utiliza algoritmos complexos para calcular a diferença entre o relógio do servidor e várias fontes de tempo externas, como servidores de referência. Ele é especialmente útil em redes com conectividade confiável e baixa variação de latência, como redes locais ou WANs de alta qualidade.

Por outro lado, o Chrony é uma alternativa mais recente e flexível ao NTP. Ele foi desenvolvido com foco na adaptabilidade às variações de latência de rede e na capacidade de lidar com ambientes desafiadores. O Chrony utiliza técnicas avançadas para medir a latência da rede e calcular a diferença entre o relógio do servidor e uma fonte de tempo externa, como um servidor NTP. Essa abordagem adaptativa permite ao Chrony sincronizar com precisão, mesmo em redes sujeitas a flutuações de latência significativas, como redes de longa distância ou redes com tráfego variável.

Em termos de configuração e gerenciamento, o NTP tende a ser mais complexo, requerendo ajustes finos para otimizar o desempenho. O Chrony, por sua vez, é conhecido por sua facilidade de configuração e operação, tornando-se uma escolha conveniente para ambientes em que a simplicidade é valorizada.

Configurar NTP Linux

Instalando o Chronyc no Amazon Linux

Para instalar o Chrony no Amazon Linux, você pode seguir os seguintes passos:

  1. Conecte-se ao seu servidor Amazon Linux usando SSH ou qualquer outra ferramenta de acesso remoto.
  2. Desinstale o NTP:
sudo yum erase 'ntp*'
  1. Certifique-se de ter privilégios de superusuário ou use o comando sudo nas etapas seguintes para executar as instruções com permissões elevadas.
  2. Atualize os pacotes do sistema executando o seguinte comando:
sudo yum update
  1. Agora, você pode instalar o Chrony usando o gerenciador de pacotes Yum:
sudo yum install chrony
  1. Abra o arquivo /etc/chrony.conf usando um editor de texto (como vim ou nano).
    sudo nano /etc/chrony.conf
    Verifique se o arquivo inclui a seguinte linha:
server 169.254.169.123 prefer iburst minpoll 4 maxpoll 4

Se a linha estiver presente, significa que o Amazon Time Sync Service já está configurado. Nesse caso, siga para a próxima etapa. Caso contrário, adicione a linha depois de todas as outras instruções server ou pool já presentes no arquivo e salve as alterações.

  1. Após a conclusão da instalação, você pode iniciar o serviço do Chrony com o seguinte comando:
sudo service chronyd start
  1. Para verificar o status do serviço, execute o comando:
sudo service chronyd status

O Chrony estará agora instalado e em execução no seu servidor Amazon Linux.

  1. Use o comando chkconfig para configurar o chronyd para ser iniciado em cada inicialização do sistema.
sudo chkconfig chronyd on
  1. Verifique se chrony está usando o endereço IP 169.254.169.123 para sincronizar a hora.
chronyc sources -v

Resultado esperado é parecido com este:

210 Number of sources = 7
        
          .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
         / .- Source state '*' = current synced, '+' = combined , '-' = not combined,
        | /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
        ||                                                 .- xxxx [ yyyy ] +/- zzzz
        ||      Reachability register (octal) -.           |  xxxx = adjusted offset,
        ||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
        ||                                \     |          |  zzzz = estimated error.
        ||                                 |    |           \
        MS Name/IP address         Stratum Poll Reach LastRx Last sample               
        ===============================================================================
        ^* 169.254.169.123               3   6    17    43    -30us[ -226us] +/-  287us
        ^- ec2-12-34-231-12.eu-west>     2   6    17    43   -388us[ -388us] +/-   11ms
        ^- tshirt.heanet.ie              1   6    17    44   +178us[  +25us] +/- 1959us
        ^? tbag.heanet.ie                0   6     0     -     +0ns[   +0ns] +/-    0ns
        ^? bray.walcz.net                0   6     0     -     +0ns[   +0ns] +/-    0ns
        ^? 2a05:d018:c43:e312:ce77:>     0   6     0     -     +0ns[   +0ns] +/-    0ns
        ^? 2a05:d018:dab:2701:b70:b>     0   6     0     -     +0ns[   +0ns] +/-    0ns

Na saída retornada, ^* indica a fonte de hora preferida.

  1. Verifique as métricas de sincronização da hora informadas pelo chrony.
chronyc tracking

Saída esperada é semelhante a esta:

Reference ID    : A9FEA97B (169.254.169.123)
        Stratum         : 4
        Ref time (UTC)  : Wed Nov 22 13:18:34 2017
        System time     : 0.000000626 seconds slow of NTP time
        Last offset     : +0.002852759 seconds
        RMS offset      : 0.002852759 seconds
        Frequency       : 1.187 ppm fast
        Residual freq   : +0.020 ppm
        Skew            : 24.388 ppm
        Root delay      : 0.000504752 seconds
        Root dispersion : 0.001112565 seconds
        Update interval : 64.4 seconds
        Leap status     : Normal

Instalando o Chrony no Ubuntu

Para instalar o Chrony no Ubuntu, siga as seguintes etapas:

  1. Conecte-se ao seu servidor Ubuntu usando SSH ou qualquer outra ferramenta de acesso remoto.
  2. Certifique-se de ter privilégios de superusuário ou use o comando sudo nas etapas seguintes para executar as instruções com permissões elevadas.
  3. Atualize os pacotes do sistema executando o seguinte comando:
sudo apt update
  1. Agora você pode instalar o Chrony usando o gerenciador de pacotes APT:
sudo apt install chrony
  1. Após a conclusão da instalação, o serviço do Chrony será iniciado automaticamente. Você pode verificar o status do serviço com o seguinte comando:
sudo systemctl status chrony
  1. Após a instalação do Chrony, abra o arquivo de configuração /etc/chrony/chrony.conf com um editor de texto:
sudo nano /etc/chrony/chrony.conf
  1. Localize a seção de configuração server e adicione a seguinte linha antes de todas as outras instruções server ou pool já presentes no arquivo:
server 169.254.169.123 prefer iburst minpoll 4 maxpoll 4

Salve o arquivo e saia do editor de texto.

  1. Reinicie o serviço Chrony para aplicar as alterações:
sudo systemctl restart chrony
  1. Verifique se chrony está usando o endereço IP 169.254.169.123 para sincronizar a hora.
chronyc sources -v

Saída esperada:

210 Number of sources = 7
            
              .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
             / .- Source state '*' = current synced, '+' = combined , '-' = not combined,
            | /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
            ||                                                 .- xxxx [ yyyy ] +/- zzzz
            ||      Reachability register (octal) -.           |  xxxx = adjusted offset,
            ||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
            ||                                \     |          |  zzzz = estimated error.
            ||                                 |    |           \
            MS Name/IP address         Stratum Poll Reach LastRx Last sample
            ===============================================================================
            ^* 169.254.169.123               3   6    17    12    +15us[  +57us] +/-  320us
            ^- tbag.heanet.ie                1   6    17    13  -3488us[-3446us] +/- 1779us
            ^- ec2-12-34-231-12.eu-west-     2   6    17    13   +893us[ +935us] +/- 7710us
            ^? 2a05:d018:c43:e312:ce77:6     0   6     0   10y     +0ns[   +0ns] +/-    0ns
            ^? 2a05:d018:d34:9000:d8c6:5     0   6     0   10y     +0ns[   +0ns] +/-    0ns
            ^? tshirt.heanet.ie              0   6     0   10y     +0ns[   +0ns] +/-    0ns
            ^? bray.walcz.net                0   6     0   10y     +0ns[   +0ns] +/-    0ns

Na saída retornada, a linha que começa com ^* indica a fonte de horas preferida.

  1. Verifique as métricas de sincronização da hora informadas pelo chrony.
chronyc tracking

Saída será parecida com esta:

Reference ID    : 169.254.169.123 (169.254.169.123)
            Stratum         : 4
            Ref time (UTC)  : Wed Nov 29 07:41:57 2017
            System time     : 0.000000011 seconds slow of NTP time
            Last offset     : +0.000041659 seconds
            RMS offset      : 0.000041659 seconds
            Frequency       : 10.141 ppm slow
            Residual freq   : +7.557 ppm
            Skew            : 2.329 ppm
            Root delay      : 0.000544 seconds
            Root dispersion : 0.000631 seconds
            Update interval : 2.0 seconds
            Leap status     : Normal

O Chrony estará agora instalado e em execução no seu servidor Ubuntu.

Configurar NTP Linux

Observação

Lembre-se de que as instruções acima assumem que você está usando versões atualizadas do Amazon Linux e do Ubuntu. Se você estiver usando versões mais antigas, pode haver pequenas diferenças nos comandos e procedimentos de instalação.

Conteúdo extra

Confira também nosso post sobre alertas para horários divergentes no Linux usando Chrony e AWS CloudWatch:

Recursos adicionais

Aqui estão alguns recursos adicionais recomendados sobre o Chrony. Esses recursos são páginas relevantes e informativas sobre Linux em geral e podem ajudar nas configurações relacionadas a este serviço:

  1. DigitalOcean – “How To Install and Use Chrony on Ubuntu 18.04”
  2. Red Hat – “Configuring NTP Using the chrony Suite”
  3. ArchWiki – “Network Time Protocol daemon (NTPd)”
  4. Linuxize – “How to Install and Configure Chrony NTP Server on Ubuntu 20.04”
  5. Ubuntu Official Documentation – “Time Synchronization”
Fernando Müller Junior
Fernando Müller Junior

Eu sou o Fernando Müller, um Tech Lead SRE com 16 anos de experiência em TI, atualmente eu trabalho na Appmax, uma fintech localizada no Brasil. Apaixonado por trabalhar com arquiteturas e aplicações Cloud Native, ferramentas Open Source e tudo que existe no mundo SRE, sempre procurando se desenvolver e aprender constantemente(Lifelong learning), atuando em projetos inovadores!

Artigos: 28

Um comentário

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *