Tuesday, November 27, 2012

Reloj de sistema en VPS con WHM/cPanel no está sincronizado

Este post va relacionado con:


  • NTP (Network Time Protocol) y su demonio NTPD
  • WHM y cPanel Time
  • Dovecot error "time just moved backwards"
  • Tiempo del servidor fuera de sincronización
  • Servidor VPS Linux (CentOS, WHM) con error de tiempo
  • Problema Time Drift, Time Skew, Clock Drift o Clock Skew


Hace unos días que me conseguí un VPS corriendo CentOS con WHM. Desde el principio noté que el IMAP (Dovecot) se reiniciaba con el mensaje de error "Time just moved backwards". Esto pasaba siempre después de realizar una sincronización de tiempo o cambiar la zona horaria.

Resulta que hay un efecto llamado "Time Skew" o "Time Drift" que ocurre en algunos sistemas (sobretodo VPS) que hace que el tiempo vaya más rápido de lo normal. Día tras día encontraba que el reloj del servidor VPS estaba adelantado unos 25 minutos. Esto es un problema crítico.

Después de bastante búsqueda, encontré dos posibles soluciones:

1) Instalar NTP
NTP (Network Time Protocol) es un servicio que nos permite sincronizar el reloj del sistema con internet. Al instalarlo, se instala también el demonio NTPD que ajusta  el reloj automaticamente y lo acelera o desacelera según sea necesario.

Para instalarlo basta con entrar como root vía SSH al VPS y ejecutar

yum install ntp

seguido de

/sbin/chkconfig ntpd on

(este último para que se inicie automaticamente el demonio al reiniciar el servidor).

Después tenemos que modificar el archivo /etc/ntp.conf con un editor como nano o vi. Lo que vamos a hacer es añadir la siguiente línea:

restrict default kod nomodify notrap

y comentar las siguientes (poniendo un gato # al inicio de cada una):

server 127.127.1.0
fudge 127.127.1.0 stratum 10

Guardamos el archivo de configuración. Reiniciamos NTPD y lo configuramos para que se inicie al rebootear el sistema:

service ntpd restart
/scripts/chkconfig ntpd on

Adicionalmente, si tenemos firewall hay que abrir el puerto 123 en UDP. Si tienes WHM con CSF+LDF, ingresa a WHM y ve a la opción "ConfigServer Security & Firewall", da click en el botón "Firewall configuration" y en la opción "UDP_OUT" añade el puerto 123.


2) Modificar el booteo (arranque)
Esta solución es la mejor (combinada con NTP) para un servidor VPS Linux que corre en Hyper-V sobre Windows Server 2008. Para esto, hay que entrar como root vía SSH al servidor VPS, y modificar el archivo /boot/grub/grub.conf.

En ese archivo encontraremos varios Kernels. En el Kernel predeterminado (generalmente el primero) hay que modificar la línea que inicia con "kernel /vmlinuz", agregandole al final "divider=10 clocksource=acpi_pm" (para 32 bits) o "notsc divider=10" (para 64 bits). Nuestro archivo debe quedar algo así:

#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
#          initrd /initrd-version.img
#boot=/dev/hda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-164.6.1.el5)
 root (hd0,0)
 kernel /vmlinuz-2.6.18-164.6.1.el5 ro root=/dev/VolGroup00/LogVol00 hda=noprobe db=noprobe notsc divider=10
 initrd /initrd-2.6.18-164.6.1.el5.img
title CentOS (2.6.18-164.el5)
 root (hd0,0)
 kernel /vmlinuz-2.6.18-164.el5 ro root=/dev/VolGroup00/LogVol00
 initrd /initrd-2.6.18-164.el5.img

Después de modificar y guardar grub.conf, debemos ejecutar una sincronización manual del reloj y reiniciar el servidor usando los siguientes comandos:

service stop ntpd
ntpdate 0.pool.ntp.org
hwclock --systohc
reboot

3) Configurar el WallClock
Si NTP y la modificación de arranque no te funcionan, hay que desvincular el reloj del VPS de su nodo. Generalmente la vinculación del nodo VPS causa el Time Skew. Para hacerlo, hay que ingresar como root via SSH al VPS y ejecutar lo siguiente:

echo 1 > /proc/sys/xen/independent_wallclock

Si queremos que la configuración sea persistente después de un reinicio, debemos modificar el archivo "/etc/sysctl.conf" con un editor como nano o vi, y añadir la siguiente linea:

xen.independent_wallclock = 1

Con esto queda configurado nuestro servidor y ya no debemos de tener problemas con el tiempo. Si los problemas con la sincronización siguen, tal vez se deba a un problema de Kernel y debemos solicitar a nuestro proveedor del VPS que haga una actualización de Kernel.


No comments:

Post a Comment