2011 Timezone felaketi ve Çözüm Önerileri
| Data Center |

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.
Data Center
Yorumlar
RSS beslemesi, bu iletideki yorumlar için.