2011 Timezone felaketi ve Çözüm Önerileri

Data Center

alt

Bu yazı ne kadar gerekli bilemem belki komple boş bir uğraş olabilir. Çünkü insanlar hatalarından ders alabilirse bir kez  daha timezone ayarlarında değişikliğe gitmek istemeyebilirler.  Olursa diye ilerisi için kaynak olabilir.

Sorun : Normalde 27 Mart gece 3 te saatlerin 1 saat ileriye alınması bekleniyor. Sunucular da bu değişiklik otomatik olacak şekilde yapılandırılmış.Zaman değişikliğinin 28i gecesi saat 3 te olacak şekilde konfigurasyonların değiştirilmesi gerekiyor

Çözüm:   Eğer ortamda bir NTP server varsa akla NTP serverin timezone ayarını güncelleriz. Zamanı buradan alacak sunucular kendini günceller diye düşünülebilir. Ama durum aslında böyle değil. Sunucular NTP serverdan sadece UTC zamanı alıyorlar. Gerçek zamanı ise lokal olarak bulundukları zaman dilimine göre hesaplıyorlar.  Yani normal işleyişte sunucuların sorunsuz timezone değiştirmelerinin nedeni kendilerinin bu değişikliği yapmaları.

Peki NTP serverda saati güncellesek ne olur ?

Bu durumda ise sunucular birden NTP server ile arasında 1 saat fark olduğunu tespit ettikleri anda zamanı güncelleyemezler ve NTP client lar abort olur. Manuel bir işlem yapılsa bile crondan bunu planlamak travian oyununda saldıran askerler köye varmadan 1 sn önce koyden cıkarıp tekrar geri çağrılmasına benziyor. Benzetimi anlamadıysanız sorun değil :) 

Yasal prosedürlere geçelim. Farklı işletim sistemi türlerinde farklı aksiyonların alınması gerekiyor.

HP-UX:

/usr/lib/tztab timezone ayarlarının olduğu dosya. Bu dosyada Türkiye için aşağıdaki satırlar bulunuyor.


EET-2EETDST
0 4 25-31 3  1981-2038 0   EETDST-3
0 3 24-30 9  1981-1995 0   EET-2
0 3 25-31 10 1996-2038 0   EET-2

Biz 2011 yılı için değişikliği yapacak şekilde bu satırları aşağıdaki gibi güncellememiz lazım.

0 4 25-31 3 2011-2011 1 EETDST-3
0 4 25-31 3 2012-2038 0 EETDST-3

Derseniz benim bir sürü sunucum var. Bu değişikliği yapan bir script yok mu ? o da aşağıda..

cp /usr/lib/tztab /usr/lib/tztab.old
awk '{if($0 ~ / EETDST-3/) {print "0 4 25-31 3  2011-2011 1   EETDST-3";print "0 4 25-31 3  2012-2038 0   EETDST-3"} else {print $0}}' /usr/lib/tztab > /tmp/tztab.new;
cp /tmp/tztab.new /usr/lib/tztab

Ne yazıkki hayat bu kadar kolay değil.  Çünkü bu değişiklik yapılsa bile sunucu üzerinde çalışan sistem prosesleri algılamıyor bu değişikliği(cron gibi) oracle farklı değerler gösterebiliyor. En iyi çözüm sunucuyu reboot etmek.


Sun Solaris :


Oracle bu iş için bir patch hazırlamış durumda. Bu patchi destekten alabilirsiniz. uyguladıktan sonra değişikliği kontrol etmek için,

# zdump -v Turkey | grep 2011
Turkey  Mon Mar 14 09:33:32 2011 UTC = Mon Mar 14 11:33:32 2011 EET isdst=0
Turkey  Mon Mar 28 00:59:59 2011 UTC = Mon Mar 28 02:59:59 2011 EET isdst=0
Turkey  Mon Mar 28 01:00:00 2011 UTC = Mon Mar 28 04:00:00 2011 EEST isdst=1

Turkey  Sun Oct 30 00:59:59 2011 UTC = Sun Oct 30 03:59:59 2011 EEST isdst=1
Turkey  Sun Oct 30 01:00:00 2011 UTC = Sun Oct 30 03:00:00 2011 EET isdst=0

Atıldıktan sonra ise /usr/sbin/tzreload komutu ile değişikliği aktif etmek gerekiyor. Bazı sunucularda bu komut için patch gerekebiliyor. Bu patch de reboot isteyebiliyor. istemese de aktif olduktan sonra reboot edilmesi tavsiye ediliyor.


IBM AIX:


AIX 5.3 için /etc/environment dosyası edit edilip reboot edilmesi gerekiyor.

# vi /etc/environment

TZ=MEST-2MEDT,M3.5.1/03:00:00,M10.5.0/04:00:00

# shutdown -ry 0


Linux:


Gerekli zone source dosyası ftp://elsie.nci.nih.gov/pub/tzdata2011d.tar.gz  adresinden indirdikten sonra, içinden europe dosyası çıkarılır. Europe dosyası sunucuya kopyalanır,

# scp europe user@sunucu:/tmp

sunucuda root yetkileri ile aşağıdaki  komut çalıştırılır.

# zic -l Europe/Istanbul  /tmp/europe

Ve değişiklik kontrol edilir.


# zdump -v /etc/localtime | grep 2011
/etc/localtime  Mon Mar 28 00:59:59 2011 UTC = Mon Mar 28 02:59:59 2011 EET isdst=0 gmtoff=7200
/etc/localtime  Mon Mar 28 01:00:00 2011 UTC = Mon Mar 28 04:00:00 2011 EEST isdst=1 gmtoff=10800
/etc/localtime  Sun Oct 30 00:59:59 2011 UTC = Sun Oct 30 03:59:59 2011 EEST isdst=1 gmtoff=10800
/etc/localtime  Sun Oct 30 01:00:00 2011 UTC = Sun Oct 30 03:00:00 2011 EET isdst=0 gmtoff=7200

Sunucu üzerinde çalışan uygulamaların ve proseslerin nasıl davranacağı tam kestirilmediğinden ve long time çalışan prosesler yüzünden reboot edilmesi öneriliyor.

Yine de bu değişiklikleri kendi sunucularınızda denemenizi öneririm.

Bütün bu prosedürleri yerine getirmek yerine hiç değişiklilik yapmamak da bir çözüm.





 

 

Yorumlar  

 
#1 2011-03-22 18:11
Kenan abi yazı çok güzel eline sağlık. Yalnız Travian örneğini anlamadım. Çok düşündüm ama olmuyor. Açıklayabilir misin? :))
 

Yorum ekle

Güvenlik kodu
Yenile