Tengo un servidor Linux con DB Oracle 10g en el cual la fecha y hora son extremadamente criticas. Debido a algunas inconsistencias ( entre el soft de virtualización, la bios virtual y el server virtual) he decidido conectarlo a un NTP server de internet. Otro factor que afecta, es el cambio horario de forma no uniforme en distintas regiones de Argentina.
La pregunta es:
¿ Existe un método para cambiar el time zone del sistema operativo mediante NTP ?
¿ Como afecta el cambio de time zone del sistema operativo a Oracle ?
Después de investigar un rato encuentro este FAQ el cual explica que el protocolo NTP es independiente de la zona horaria (time zone); brinda siempre la hora en UTC/GTM +00:00. Por lo que la hora del equipo depende no solamente del servicio NTP sino tambien del time zone que le setemos al equipo. Decido a comprobar esto armo mi propio servidor NTP.
#>apt-get install ntpd ntpdate
El archivo de configuracion del servicio esta en /etc/ntp.conf y queda asi
#> vi /etc/ntp.conf
# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help
driftfile /var/lib/ntp/ntp.drift
# Enable this if you want statistics to be logged.
statsdir /var/log/ntpstats/
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable
# You do need to talk to an NTP server or two (or three).
#server ntp.ubuntu.com
server time.sinectis.com.ar iburst
server tock.nap.com.ar iburst
server 0.ar.pool.ntp.org iburst
server 1.south-america.pool.ntp.org iburst
server 0.south-america.pool.ntp.org iburst
Un articulo muy lindo de como configurar esto, esta en este link, aqui obvie las configuraciones de seguridad. Los pools en mi caso Argentina los saque de aqui y de aquí, esto es por que la selección del servidor a utilizar por NTP viene dada por varios factores entre ellos la distancia. Reiniciamos el daemon para actualizar las configuraciones:
#>/etc/init.d/ntp restart
Luego chequeamos si nuestro servidor esta sincronizando con los que les detallamos en su configuración:
#> ntpq -np
remote refid st t when poll reach delay offset jitter
========== ===============================
+216.244.192.3 62.117.76.142 2 u 167 512 377 26.525 33.572 2.619
-200.10.140.1 192.5.41.41 2 u 122 512 377 26.534 44.511 45.921
-200.63.112.9 192.43.244.18 2 u 655 512 376 44.753 48.853 55.039
*187.49.33.13 200.20.186.75 2 u 162 512 377 326.558 35.854 4.766
+190.202.98.221 150.214.94.5 2 u 145 512 377 241.681 33.767 11.175
192.168.65.255 .BCST. 16 u - 64 0 0.000 0.000 0.002
Aqui solamente destaco, que el asterisco (*) indica el servidor al cual estamos sincronizando y con signo más (+) los servidores candidatos a sincronizar en caso del que el preferido falle.
Otras opciones interesantes para debugear en ntpq son:
ntpq> as
ind assID status conf reach auth condition last_event cnt
====================================
1 57640 9144 yes yes none falsetick reachable 4
2 57641 9444 yes yes none candidat reachable 4
3 57642 9444 yes yes none candidat reachable 4
4 57643 8053 yes yes none reject lost reach 5
5 57644 9644 yes yes none sys.peer reachable 4
6 57645 9344 yes yes none outlyer reachable 4
7 57646 8000 yes yes none reject
ntpq> rv
assID=0 status=06f4 leap_none, sync_ntp, 15 events, event_peer/strat_chg,
version="ntpd 4.2.4p4@1.1520-o Wed May 13 21:05:42 UTC 2009 (1)",
processor="i686", system="Linux/2.6.28-16-generic", leap=00, stratum=3,
precision=-19, rootdelay=351.872, rootdispersion=56.283, peer=57644,
refid=187.49.33.13,
reftime=ceb188e9.25b15a51 Sat, Nov 21 2009 2:00:17.147, poll=10,
clock=ceb18b4f.39f3287e Sat, Nov 21 2009 2:10:31.226, state=4,
offset=-4.565, frequency=9.125, jitter=4.385, noise=16.777,
stability=0.047, tai=0
ntpq> pe
remote refid st t when poll reach delay offset jitter
========================================
xtime.windows.co 0.0.0.0 2 u 593 1024 377 0.530 32852.8 0.073
+ns2.sinectis.co 62.117.76.142 2 u 105 1024 277 26.006 -4.959 4.634
+200.10.140.1.ad 192.5.41.41 2 u 576 1024 377 26.477 0.399 6.288
willie.norfe.ne 192.43.244.18 2 u 104m 512 0 44.753 48.853 0.000
*srv6.spbrasil.c 200.20.186.75 2 u 615 1024 377 329.167 -3.810 3.481
-190.202.98.221 150.214.94.5 2 u 599 1024 377 246.638 -18.083 25.978
192.168.65.255 .BCST. 16 u - 64 0 0.000 0.000 0.002
Bueno mi servidor NTP ya esta sincronizado y es stratum=3. Para demostrar que NTP solo provee UTC/GTM 00:00 sincronizo un cliente windows 2003 a este y cambio el time zone de mi server de -03:00 a -04:30. Y efectivamente mi server marca la 1am mientras que el cliente Windows dependiente de mi server NTP se mantiene en la misma hora, mas alla de haberse sincronizado manualmente y automáticamente. Lo que concluye que NTP brinda siempre la hora en UTC 00:00, independiente de donde estemos geográficamente, por lo que no es posible setear el time zone del sistema operativo mediante opciones o comandos del protocolo NTP. En este punto me doy cuenta que tendre que configurar en los cambios de horario invierno-verano la posición geográfica ( UTC/GTM) de cada uno de los servidores. Aunque lei que existe la opcion DTS para manejar las zonas horarias, la cual no me da mucha confianza ya que puede implicar cambios automaticos de time zone, pero la siguere analizando.