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 obtener más información sobre el servidor NTP interno que proporciona Google, consulta las Preguntas frecuentes sobre NTP públicos de Google.
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.
Usa
ssh
para conectarte a tu instancia.Console
Para usar la consola a fin de conectarte a la VM mediante SSH, sigue estos pasos:
Ve a la página Instancias de VM en la consola de Google Cloud.
Haz clic en el botón SSH de la VM que deseas configurar.
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.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
ometadata.google.internal
, no es necesario que realices ningún cambio. Si ves varias fuentes mezcladas entremetadata.google
y una fuente pública comopool.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ón38.229.53.9
, como se describe en el siguiente paso.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 conserver external_source_ip_or_name
y quítalas.Después de editar el archivo
/etc/chrony/chrony.conf
, reinicia el serviciochrony
. 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
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:
Usa
ssh
para conectarte a tu instancia.Console
Para usar la consola a fin de conectarte a la VM mediante SSH, sigue estos pasos:
Ve a la página Instancias de VM en la consola de Google Cloud.
Haz clic en el botón SSH de la VM que deseas configurar.
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.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
ometadata.google.internal
, no es necesario que realices ningún cambio. Si ves varias fuentes mezcladas entremetadata.google
y una fuente pública comopool.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.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ónservers
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
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
Ve a la página Instancias de VM en la consola de Google Cloud.
Haz clic en el botón RDP junto a la instancia de Windows a la que deseas conectarte.
Después de acceder, haz clic derecho en el ícono de PowerShell y selecciona Ejecutar como administrador.
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
ometadata.google.internal
, no es necesario que realices ningún cambio. Si ves varias fuentes mezcladas entremetadata.google
y una fuente pública, debes quitar el servidor externo. Sigue la guía de Windows para configurar el servidor NTP.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
).Detén Windows Time Service:
net stop w32time
Quita Windows Time Service del registro:
w32tm /unregister
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.
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?
- Obtén más información sobre el cumplimiento de los estándares de seguridad de los datos de PCI.
- Revisa las Preguntas frecuentes sobre NTP públicos de Google.