Configurar NTP en una VM


Muchos sistemas de software que dependen de una secuenciación cuidadosa de los eventos se basan en un reloj del sistema estable y coherente. Los registros del sistema escritos por la mayoría de los servicios incluyen una marca de tiempo, que ayuda a depurar los problemas que se producen entre los distintos componentes del sistema. Para ayudar a que los relojes del sistema estén sincronizados, las instancias de Compute Engine están preconfiguradas para usar el protocolo de tiempo de red (NTP).

Además de mantener sincronizada la hora del servidor, el protocolo NTP es útil en el caso excepcional de un segundo intercalar. Un segundo intercalar es un ajuste de un segundo que se hace a la hora UTC para tener en cuenta los cambios en la rotación de la Tierra. Los segundos intercalares no se producen a intervalos regulares, ya que la velocidad de rotación de la Tierra varía de forma irregular en respuesta a eventos climáticos y geológicos. Los segundos bisiestos anteriores han afectado notablemente a diversos servicios y aplicaciones en la Web. Los servidores NTP ayudan a que todos los servidores indiquen la misma hora durante el evento de un segundo bisiesto.

En este documento se describe cómo configurar servidores NTP en tus máquinas virtuales para que se comporten correctamente en caso de que haya un segundo bisiesto.

Servidores NTP de Google y desfase de segundos intercalares

Los segundos bisiestos de un sistema operativo Unix se suelen implementar repitiendo el último segundo del día. Esto puede causar problemas con el software que espera que las marcas de tiempo solo aumenten. Para evitar este problema, los servidores de tiempo Google Cloud "reparten" el segundo adicional a lo largo de 24 horas (12 antes y 12 después del evento del segundo bisiesto) para que los ordenadores no vean el segundo adicional de una vez como una marca de tiempo repetida. De este modo, se reduce el riesgo en los sistemas que dependen de una marca de tiempo coherente. Se recomienda que todas las instancias de máquina virtual (VM) de Compute Engine se configuren para usar los servicios NTP internos de Google.

Configurar NTP para las instancias

Google Cloud no puede predecir cómo gestionarán el segundo bisiesto los servicios NTP externos, como pool.ntp.org. Si es posible, te recomendamos que no uses fuentes NTP externas con las VMs de Compute Engine. Lo que es peor, usar tanto el servicio NTP de Google como un servicio externo puede provocar cambios impredecibles en la hora del sistema. Es preferible usar una sola fuente NTP externa que usar una combinación, pero los servicios NTP externos, como pool.ntp.org, probablemente usen el ajuste gradual para gestionar el segundo adicional. Como resultado, es posible que tus VMs vean una marca de tiempo repetida.

La opción más segura es configurar tus VMs de Compute Engine para que usen un único servidor NTP: el servidor NTP interno proporcionado por Google. No mezcles servidores NTP externos con servidores NTP de Google, ya que esto podría provocar un comportamiento inesperado. Para obtener más información sobre el servidor NTP interno que proporciona Google, consulta las preguntas frecuentes sobre el NTP público de Google.

Para asegurarte de que tus máquinas virtuales están configuradas correctamente, sigue estas instrucciones.

Linux (chrony)

De forma predeterminada, la mayoría de las nuevas versiones de Linux usan chrony para gestionar sus ajustes de NTP y la sincronización de la hora. Para asegurarte de que chrony solo usa el servicio NTP interno, consulta la configuración de chrony y elimina los servidores NTP externos.

  1. Usa ssh para conectarte a tu instancia.

    Consola

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

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

      Ir a instancias de VM

    2. Haz clic en el botón SSH de la máquina virtual que quieras configurar.

      Botón SSH.

    gcloud

    Para usar la CLI de Google Cloud y conectarte a la VM mediante SSH, ejecuta el siguiente comando:

    gcloud compute instances ssh VM_NAME
    

    Sustituye VM_NAME por el nombre de la VM a la que te vas a conectar.

  2. En tu instancia, ejecuta chronyc sources para comprobar el estado actual de tu configuración de 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 único registro que apunta a metadata.google o metadata.google.internal, no tienes que hacer ningún cambio. Si ves varias fuentes, entre las que se incluyen metadata.google y una fuente pública, como pool.ntp.org, actualiza tus fuentes para eliminar los servidores NTP externos.

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

  3. Configura tus servidores NTP para eliminar los 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 empiecen por 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 para reiniciar puede variar en función de la distribución de Linux, como se muestra en los siguientes ejemplos:

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

    $ chronyc sources
    

    La salida debería ser similar a la 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 gestionar su configuración de NTP y la sincronización de la hora. Para asegurarte de que ntpd solo usa el servicio NTP interno, comprueba la configuración de ntpd y elimina los servidores NTP externos.

  1. Usa ssh para conectarte a tu instancia.

    Consola

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

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

      Ir a instancias de VM

    2. Haz clic en el botón SSH de la máquina virtual que quieras configurar.

      Botón SSH.

    gcloud

    Para usar la CLI de Google Cloud y conectarte a la VM mediante SSH, ejecuta el siguiente comando:

    gcloud compute instances ssh VM_NAME
    

    Sustituye VM_NAME por el nombre de la VM a la que te vas a conectar.

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

    $ ntpq -p
    

    La salida tiene un aspecto 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 único registro que apunta a metadata.google o metadata.google.internal, no tienes que hacer ningún cambio. Si ves varias fuentes, entre las que se incluyen metadata.google y una fuente pública, como pool.ntp.org, debes actualizar tus fuentes para quitar los servidores NTP externos.

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

  3. Configura tus servidores NTP para eliminar las fuentes externas.

    Para configurar los servidores NTP, edita el archivo /etc/ntp.conf con tu editor de texto favorito. Busca la sección servers de la configuración y elimina 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 para reiniciar puede variar en función de la distribución de Linux:

    sudo service ntp reload
    
  4. Para verificar la 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 de la Google Cloud consola.

    Ir a instancias de VM

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

    Botón SSH.

  3. Una vez que hayas iniciado sesión, haz clic con el botón derecho en el icono de PowerShell y selecciona Ejecutar como administrador.

    El icono de PowerShell.

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

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

    Si ves un único registro que apunta a metadata.google o metadata.google.internal, no tienes que hacer ningún cambio. Si ves varias fuentes, entre las que se incluyen metadata.google y una fuente pública, debes eliminar el servidor externo. Sigue la guía de Windows para configurar tu servidor NTP.

  5. Para garantizar la compatibilidad de software más amplia en las VMs de Windows, Google recomienda usar el controlador gVNIC para asegurar una precisión NTP inferior a un milisegundo con metadata.google.

    Si debes usar VirtIO con tu VM de Windows para obtener una precisión inferior a un milisegundo con los servidores NTP, Google te recomienda que no uses el servicio de hora de Windows (detén y anula el registro de w32tm).

    1. Detén el servicio de hora de Windows:

      net stop w32time
      
    2. Elimina el servicio de hora de Windows del registro:

      w32tm /unregister
      
    3. Una vez que el servicio de hora de Windows se haya detenido y eliminado del registro, instala el cliente NTP de Meinberg.

      Sigue las instrucciones de configuración que se indican en la documentación de Meinberg.

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

      Cuando hayas terminado de configurar NTP, espera entre 5 y 15 minutos para que el reloj del sistema de 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.

Usar el desfase de segundos con sistemas externos a Google Cloud

La función de desfase de salto de los servidores NTP de Google es una forma cómoda de gestionar el riesgo que conlleva repetir un segundo en sistemas sensibles al tiempo. Otros servicios NTP pueden ofrecer una solución aceptable para la mayoría de los sistemas de software. Sin embargo, es importante que no mezcles los servicios NTP de Google con los servicios públicos de ajuste de NTP.

Para sincronizar dispositivos fuera del tiempo desfasado, puedes usar NTP público de Google en esos dispositivos. Google Cloud El NTP público de Google usa el mismo desfase de segundos bisiestos que se proporciona a las VMs de Compute Engine.

Siguientes pasos