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.
Usa
ssh
para conectarte a tu instancia.Consola
Para usar la consola y conectarte a la VM mediante SSH, sigue estos pasos:
Ve a la página Instancias de VM de la Google Cloud consola.
Haz clic en el botón SSH de la máquina virtual que quieras configurar.
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.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
ometadata.google.internal
, no tienes que hacer ningún cambio. Si ves varias fuentes, entre las que se incluyenmetadata.google
y una fuente pública, comopool.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ón38.229.53.9
, tal como se describe en el siguiente paso.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 porserver external_source_ip_or_name
y quítalas.Después de editar el archivo
/etc/chrony/chrony.conf
, reinicia el serviciochrony
. 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
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.
Usa
ssh
para conectarte a tu instancia.Consola
Para usar la consola y conectarte a la VM mediante SSH, sigue estos pasos:
Ve a la página Instancias de VM de la Google Cloud consola.
Haz clic en el botón SSH de la máquina virtual que quieras configurar.
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.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
ometadata.google.internal
, no tienes que hacer ningún cambio. Si ves varias fuentes, entre las que se incluyenmetadata.google
y una fuente pública, comopool.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.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ónservers
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
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
Ve a la página Instancias de VM de la Google Cloud consola.
Haz clic en el botón RDP situado junto a la instancia de Windows a la que quieras conectarte.
Una vez que hayas iniciado sesión, haz clic con el botón derecho en el icono de PowerShell y selecciona Ejecutar como administrador.
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
ometadata.google.internal
, no tienes que hacer ningún cambio. Si ves varias fuentes, entre las que se incluyenmetadata.google
y una fuente pública, debes eliminar el servidor externo. Sigue la guía de Windows para configurar tu servidor NTP.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
).Detén el servicio de hora de Windows:
net stop w32time
Elimina el servicio de hora de Windows del registro:
w32tm /unregister
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.
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
- Más información sobre el cumplimiento del estándar de seguridad de datos PCI
- Consulta las preguntas frecuentes sobre el NTP público de Google.