Configurar NTP en una VM


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

Además de mantener sincronizada la hora del servidor, NTP es útil en el raro caso de un segundo intercalar. Un segundo intercalar es un ajuste de un segundo realizado en la hora UTC para tener en cuenta los cambios en la rotación de la Tierra. Los segundos bisiestos no ocurren a intervalos rutinarios, porque la velocidad de rotación de la Tierra varía irregularmente en respuesta a eventos climáticos y geológicos. Los segundos intercalares anteriores han impactado notablemente una variedad de servicios y aplicaciones en la web. Los servidores NTP ayudan a garantizar que todos los servidores informen al mismo tiempo durante el caso de un segundo intercalar.

Este documento describe cómo configurar servidores NTP en sus máquinas virtuales (VM) para que se comporten correctamente en el caso de un segundo intercalar.

Servidores NTP de Google y manchas de salto

Los segundos intercalares para un sistema operativo Unix se implementan comúnmente repitiendo el último segundo del día. Esto puede causar problemas con el software que espera que las marcas de tiempo solo aumenten. Para solucionar este problema, los servidores de tiempo en Google Cloud" difuminar " el segundo adicional durante veinticuatro horas (doce antes y doce después del segundo intercalar) para que las computadoras no vean el segundo adicional de una sola vez como una marca de tiempo repetida. Esto reduce el riesgo en sistemas que dependen de una marca de tiempo consistente. Se recomienda que todas las instancias de máquinas virtuales (VM) de Compute Engine estén configuradas para utilizar los servicios NTP internos de Google.

Configura NTP para tus instancias

Google Cloud No puedo predecir cómo los servicios NTP externos, como pool.ntp.org , manejarán el segundo intercalar. Si es posible, se recomienda no utilizar fuentes NTP externas con máquinas virtuales de Compute Engine. Peor aún, el uso tanto del servicio NTP de Google como de un servicio externo puede provocar cambios impredecibles en la hora del sistema. Es preferible usar solo una única fuente NTP externa a usar una combinación, pero los servicios NTP externos, como pool.ntp.org , probablemente usarán pasos para manejar el segundo intercalar. Como resultado, es posible que sus máquinas virtuales vean una marca de tiempo repetida.

El método más seguro es configurar las máquinas virtuales de Compute Engine para que utilicen un único servidor NTP: el servidor NTP interno proporcionado por Google. No mezcle servidores NTP externos y servidores NTP de Google, ya que esto podría provocar un comportamiento inesperado. Para obtener más información sobre el servidor NTP interno proporcionado por Google, consulte las preguntas frecuentes sobre NTP público de Google .

Para asegurarse de que sus máquinas virtuales estén configuradas correctamente, siga estas instrucciones.

Linux (cronista)

De forma predeterminada, la mayoría de las nuevas versiones de Linux utilizan chrony para administrar su configuración NTP y la sincronización horaria. Para asegurarse de que chrony utilice solo el servicio NTP interno, verifique la configuración chrony y elimine los servidores NTP externos.

  1. Utilice ssh para conectarse a su instancia.

    Consola

    Para usar la consola para conectarse a la VM usando SSH, siga estos pasos:

    1. Vaya a la página de instancias de VM en la consola de Google Cloud.

      Ir a instancias de VM

    2. Haga clic en el botón SSH de la VM que desea configurar.

      Botón SSH.

    nube de gcloud

    Para usar la CLI de Google Cloud para conectarse a la VM mediante SSH, ejecute el siguiente comando:

    gcloud compute instances ssh VM_NAME
    

    Reemplace VM_NAME con el nombre de la VM a la que se está conectando.

  2. En su instancia, ejecute chronyc sources para verificar el estado actual de su 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 ve un único registro que apunta a metadata.google o metadata.google.internal , no necesita realizar ningún cambio. Si ve varias fuentes, mezcladas entre metadata.google y una fuente pública como pool.ntp.org , actualice sus fuentes para eliminar cualquier servidor NTP externo.

    En el resultado del ejemplo, hay dos registros, uno que apunta a metadata.google.internal y otro que apunta a una dirección externa. Debido a que existen múltiples fuentes, deberá actualizar sus servidores NTP para eliminar la dirección 38.229.53.9 , como se describe en el siguiente paso.

  3. Configure sus servidores NTP para eliminar servidores NTP externos.

    Para eliminar el servidor NTP adicional de la lista, edite el archivo /etc/chrony/chrony.conf usando su editor de texto favorito. Busque todas las líneas que comiencen con server external_source_ip_or_name y elimínelas.

    Después de editar su archivo /etc/chrony/chrony.conf , reinicie el servicio chrony . El comando para reiniciar 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. Verifique su configuración ejecutando el comando chronyc sources nuevamente:

    $ 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 utilizan ntpd para administrar su configuración NTP y la sincronización horaria. Para asegurarse de que ntpd utilice solo el servicio NTP interno, verifique la configuración ntpd y elimine los servidores NTP externos.

  1. Utilice ssh para conectarse a su instancia.

    Consola

    Para usar la consola para conectarse a la VM usando SSH, siga estos pasos:

    1. Vaya a la página de instancias de VM en la consola de Google Cloud.

      Ir a instancias de VM

    2. Haga clic en el botón SSH de la VM que desea configurar.

      Botón SSH.

    nube de gcloud

    Para usar la CLI de Google Cloud para conectarse a la VM mediante SSH, ejecute el siguiente comando:

    gcloud compute instances ssh VM_NAME
    

    Reemplace VM_NAME con el nombre de la VM a la que se está conectando.

  2. En su instancia, ejecute ntpq -p para verificar el estado actual de su 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 ve un único registro que apunta a metadata.google o metadata.google.internal , no necesita realizar ningún cambio. Si ve varias fuentes, mezcladas entre metadata.google y una fuente pública como pool.ntp.org , debe actualizar sus fuentes para eliminar cualquier servidor NTP externo.

    En el resultado del ejemplo, hay dos registros, uno que apunta a metadata.google y otro que apunta a una dirección externa. Debido a que existen múltiples fuentes, deberá actualizar sus servidores NTP para eliminar la dirección *217.162.232.173 , como se describe en el siguiente paso.

  3. Configure sus servidores NTP para eliminar fuentes externas.

    Para configurar sus servidores NTP, edite el archivo /etc/ntp.conf usando su editor de texto favorito. Busque la sección servers de la configuración y elimine 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 su archivo /etc/ntp.conf , reinicie el servicio NTP. El comando para reiniciar puede variar según la distribución de Linux:

    sudo service ntp reload
    
  4. Verifique su configuración ejecutando el comando ntpq -p nuevamente:

    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
    

ventanas

  1. Vaya a la página de instancias de VM en la consola de Google Cloud.

    Ir a instancias de VM

  2. Haga clic en el botón RDP junto a la instancia de Windows a la que desea conectarse.

    Botón SSH.

  3. Después de iniciar sesión, haga clic derecho en el icono de PowerShell y seleccione Ejecutar como administrador .

    El icono de PowerShell.

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

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

    Si ve un único registro que apunta a metadata.google o metadata.google.internal , no necesita realizar ningún cambio. Si ve varias fuentes, mezcladas entre metadata.google y una fuente pública, debe eliminar el servidor externo. Siga la guía de Windows para configurar su servidor NTP.

  5. Para garantizar la compatibilidad de software más amplia en máquinas virtuales Windows, Google recomienda utilizar el controlador gVNIC para garantizar una precisión NTP inferior a milisegundos con metadata.google .

    Si debe usar VirtIO con su máquina virtual Windows, para obtener una precisión inferior a milisegundos con servidores NTP, Google recomienda no usar el servicio de hora de Windows (detenga y cancele el registro w32tm ).

    1. Detenga el servicio de hora de Windows:

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

      w32tm /unregister
      
    3. Después de detener y eliminar el servicio de hora de Windows del registro, instale el cliente NTP de Meinberg .

      Siga las instrucciones de configuración proporcionadas en la documentación de Meinberg.

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

      Una vez que termine de configurar NTP, espere 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 el uso de w32tm, consulte la documentación de Problemas conocidos .

Utilizar el jump smearing con sistemas externos a Google Cloud

La función de eliminación de saltos de los servidores NTP de Google es una forma conveniente de gestionar el riesgo que implica la reproducción de un segundo en sistemas sensibles al tiempo. Otros servicios NTP pueden proporcionar una solución alternativa aceptable para la mayoría de los sistemas de software. Sin embargo, es importante que no mezcle los servicios NTP de Google con los servicios públicos de pasos NTP.

Para sincronizar dispositivos externos Google Cloud Para ahorrar tiempo, puede utilizar Google Public NTP para esos dispositivos. El NTP público de Google utiliza la misma difamación de segundos intercalares que se proporciona a las máquinas virtuales de Compute Engine.

¿Qué sigue?