Configura NTP en una VM


Muchos sistemas de software que dependen de una secuencia de eventos cuidadosa usan un reloj de sistema estable y coherente. Los registros del sistema que escriben la mayoría de los servicios incluyen una marca de tiempo, que ayuda a depurar problemas que ocurren entre varios componentes del sistema. A fin de ayudar a mantener sincronizados los relojes del sistema, las instancias de Compute Engine están preconfiguradas para usar el protocolo NTP.

Además de mantener sincronizada la hora del servidor, NTP es útil en el caso poco frecuente de un segundo bisiesto. Un segundo bisiesto es un ajuste de un segundo que se realiza al horario UTC para justificar los cambios en la rotación de la Tierra. Los segundos bisiestos no ocurren a intervalos de rutina, ya que la velocidad de rotación de la Tierra varía de manera irregular debido a eventos climáticos y geológicos. Los segundos bisiestos anteriores afectaron de forma notoria una variedad de servicios y aplicaciones en la Web. Los servidores NTP ayudan a garantizar que todos los servidores informen la misma hora durante un segundo bisiesto.

En este documento, se describe cómo configurar los servidores NTP de las máquinas virtuales (VM) para que se comporten de forma correcta en el caso de un segundo intercalar.

Servidores NTP de Google y extensión de bisiestos

Los segundos intercalares para un sistema operativo Unix se implementan, comúnmente, con la repetición del último segundo del día. Esto puede causar problemas con el software que solo espera que las marcas de tiempo aumenten. Para solucionar este problema, los servidores de tiempo en Google Cloud “extienden” el segundo adicional durante veinticuatro horas, doce antes y doce después del evento, para que las computadoras no vean el segundo adicional como una marca de tiempo repetida. Esto reduce el riesgo en sistemas que dependen de una marca de tiempo coherente. Se recomienda que todas las instancias de máquina virtual (VM) de Compute Engine estén configuradas para usar los servicios NTP internos de Google.

Configura el protocolo NTP en las instancias

Google Cloud no puede predecir cómo los servicios NTP externos, como pool.ntp.org, manejarán el segundo intercalar. Si es posible, se recomienda que no uses fuentes NTP externas con VMs de Compute Engine. Peor aún, el uso del servicio NTP de Google y un servicio externo puede generar cambios impredecibles en la hora del sistema. Es preferible usar una sola fuente externa de NTP que una mezcla, pero los servicios NTP externos, como pool.ntp.org, probablemente usarán pasos para manejar el segundo intercalar. Como resultado, las VMs podrían ver una marca de tiempo repetida.

El método más seguro es configurar las VMs de Compute Engine para que usen un único servidor NTP: el servidor NTP interno que proporciona Google. No mezcles servidores NTP externos y servidores NTP de Google, ya que esto podría provocar un comportamiento inesperado.

Para asegurarte de que las VMs estén configuradas de forma correcta, sigue estas instrucciones.

Linux (chrony)

De forma predeterminada, la mayoría de las versiones nuevas de Linux usan chrony para administrar la configuración de NTP y la sincronización de tiempo. Para asegurarte de que chrony use solo el servicio NTP interno, verifica la configuración de chrony y quita los servidores NTP externos.

  1. Usa ssh para conectarte a tu instancia.

    Console

    Para usar la consola a fin de conectarte a la VM mediante SSH, sigue estos pasos:

    1. Ve a la página Instancias de VM en la consola de Google Cloud.

      Ir a Instancias de VM

    2. Haz clic en el botón SSH de la VM que deseas configurar.

      Botón SSH.

    gcloud

    Si deseas usar Google Cloud CLI para conectarte a la VM mediante SSH, ejecuta el siguiente comando:

    gcloud compute instances ssh VM_NAME
    

    Reemplaza VM_NAME por el nombre de la VM a la que te conectaste.

  2. En tu instancia, ejecuta chronyc sources para verificar el estado actual de la configuración NTP:

    $ chronyc sources
    

    El resultado es similar al siguiente:

     210 Number of sources = 2
     MS Name/IP address         Stratum Poll Reach LastRx Last sample
     ===============================================================================
     ^* metadata.google.internal      2   6   377     4    -14us[  -28us] +/-  257us
     ^- 38.229.53.9                   2   6    37     4   -283us[ -297us] +/-   28ms
    

    Si ves un solo registro que apunta a metadata.google o metadata.google.internal, no es necesario que realices ningún cambio. Si ves varias fuentes mezcladas entre metadata.google y una fuente pública como pool.ntp.org, actualiza las fuentes para quitar cualquier servidor NTP externo.

    En el resultado de ejemplo, hay dos registros, uno que apunta a metadata.google.internal y otro que apunta a una dirección externa. Debido a que hay varias fuentes, debes actualizar los servidores NTP para quitar la dirección 38.229.53.9, como se describe en el siguiente paso.

  3. Configura los servidores NTP para quitar servidores NTP externos.

    Para quitar el servidor NTP adicional de la lista, edita el archivo /etc/chrony/chrony.conf con tu editor de texto favorito. Busca todas las líneas que comienzan con server external_source_ip_or_name y quítalas.

    Después de editar el archivo /etc/chrony/chrony.conf, reinicia el servicio chrony. El comando de reinicio puede variar según la distribución de Linux, como se muestra en los siguientes ejemplos:

    sudo service chrony restart
    
    sudo systemctl restart chrony
    
  4. Para verificar tu configuración, vuelve a ejecutar el comando chronyc sources:

    $ chronyc sources
    

    El resultado debería ser similar al siguiente:

     210 Number of sources = 1
     MS Name/IP address         Stratum Poll Reach LastRx Last sample
     ===============================================================================
     ^* metadata.google.internal      2   7   377    98  -1343ns[-1588ns] +/-  396us
    

Linux (ntpd)

La mayoría de las distribuciones de Linux más antiguas usan ntpd para administrar su configuración de NTP y sincronización de tiempo. Para asegurarte de que ntpd use solo el servicio NTP interno, verifica la configuración de ntpd y quita los servidores NTP externos:

  1. Usa ssh para conectarte a tu instancia.

    Console

    Para usar la consola a fin de conectarte a la VM mediante SSH, sigue estos pasos:

    1. Ve a la página Instancias de VM en la consola de Google Cloud.

      Ir a Instancias de VM

    2. Haz clic en el botón SSH de la VM que deseas configurar.

      Botón SSH.

    gcloud

    Si deseas usar Google Cloud CLI para conectarte a la VM mediante SSH, ejecuta el siguiente comando:

    gcloud compute instances ssh VM_NAME
    

    Reemplaza VM_NAME por el nombre de la VM a la que te conectaste.

  2. En tu instancia, ejecuta ntpq -p para verificar el estado actual de la configuración NTP:

    $ ntpq -p
    

    El resultado es similar al siguiente:

    remote           refid           st t when poll reach   delay   offset  jitter
    
    ==============================================================================
    *metadata.google 255.28.23.83     2 u   27   64    1    0.634   -2.537   2.285
    *217.162.232.173 130.149.17.8     2 u  191 1024  176   79.245    3.589  27.454
    

    Si ves un solo registro que apunta a metadata.google o metadata.google.internal, no es necesario que realices ningún cambio. Si ves varias fuentes mezcladas entre metadata.google y una fuente pública como pool.ntp.org, debes actualizar las fuentes para quitar cualquier servidor NTP externo.

    En el resultado de ejemplo, hay dos registros, uno que apunta a metadata.google y otro que apunta a una dirección externa. Debido a que hay varias fuentes, deberás actualizar los servidores NTP para quitar la dirección *217.162.232.173, como se describe en el siguiente paso.

  3. Configura los servidores NTP para quitar fuentes externas.

    Para configurar los servidores NTP, edita el archivo /etc/ntp.conf en tu editor de texto favorito. Busca la sección servers de la configuración y quita todas las fuentes NTP que no sean de Google, por ejemplo:

    vim /etc/ntp.conf
    
    # You do need to talk to an NTP server or two (or three).
    #server ntp.your-provider.example
    ...
    server metadata.google.internal iburst
    

    Después de editar el archivo /etc/ntp.conf, reinicia el servicio NTP. El comando de reinicio puede variar según la distribución de Linux:

    sudo service ntp reload
    
  4. Para verificar tu configuración, vuelve a ejecutar el comando ntpq -p:

    ntpq -p
    
    remote           refid           st t when poll reach   delay   offset  jitter
    ==============================================================================
    *metadata.google 255.28.23.83     2 u   27   64    1    0.634   -2.537   2.285
    

Windows

  1. Ve a la página Instancias de VM en la consola de Google Cloud.

    Ir a Instancias de VM

  2. Haz clic en el botón RDP junto a la instancia de Windows a la que deseas conectarte.

    Botón SSH.

  3. Después de acceder, haz clic derecho en el ícono de PowerShell y selecciona Ejecutar como administrador.

    El ícono de PowerShell.

  4. Cuando se cargue el símbolo del sistema, ejecuta el comando siguiente para ver la configuración actual de NTP:

    w32tm /query /configuration
    
    [Configuration]
    ...
    Type: NTP (Local)
    NtpServer: metadata.google.internal,
    ...
    

    Si ves un solo registro que apunta a metadata.google o metadata.google.internal, no es necesario que realices ningún cambio. Si ves varias fuentes mezcladas entre metadata.google y una fuente pública, debes quitar el servidor externo. Sigue la guía de Windows para configurar el servidor NTP.

  5. Para garantizar la compatibilidad de software más generalizada en las VMs de Windows, Google recomienda que uses el controlador de gVNIC a fin de garantizar la precisión de NTP inferior a un milisegundo con metadata.google.

    Si debes usar VirtIO con tu VM de Windows para obtener una precisión inferior a milisegundos con los servidores NTP, Google recomienda que no uses Windows Time Service (detén y cancela el registro de w32tm).

    1. Detén Windows Time Service:

      net stop w32time
      
    2. Quita Windows Time Service del registro:

      w32tm /unregister
      
    3. Después de detener Windows Time Service y quitarlo del registro, instala el cliente NTP de Meinberg.

      Sigue las instrucciones de configuración como se proporcionan en la documentación de Meinberg.

    4. Configura el servidor NTP para el cliente NTP de Meinberg como metadata.google.internal.

      Después de configurar NTP, espera entre 5 y 15 minutos para que el reloj del sistema en la VM se estabilice con el servidor NTP.

      Para obtener información sobre por qué no se recomienda usar w32tm, consulta la documentación de problemas conocidos.

Usa la extensión del tiempo con sistemas externos a Google Cloud

La función repartición de bisiesto de los servidores NTP de Google es un método conveniente para administrar el riesgo en la reproducción de un segundo en sistemas sensibles al tiempo. Otros servicios NTP pueden proporcionar una solución aceptable para la mayoría de los sistemas de software. Sin embargo, es importante que no mezcles los servicios NTP de extensión del tiempo de Google con los servicios NTP públicos de pasos.

Para sincronizar dispositivos fuera de Google Cloud con el tiempo extendido, puedes usar Google Public NTP para esos dispositivos. El NTP público de Google usa la misma extensión de segundos intercalares que se proporciona a las VMs de Compute Engine.

¿Qué sigue?