Çalışırken sistem saatini değiştirirseniz, veritabanı ve posta sunucularına kötü şeyler söylentileri duydum. Ancak, gerçek riskler hakkında somut bilgi bulmakta zorlanıyorum.
Debian Wheezy ana bilgisayarında çalışan bir Postgres 9.3 sunucusu var ve saat 367 saniyedir. Sadece koşabilir miyim
ntpdate veya Postgres çalışırken openntp'i başlatın veya bir soruna neden olabilir mi? Eğer öyleyse, zamanı düzeltmek için daha güvenli bir yöntem nedir?
Sistem zamanındaki bir değişikliğe daha duyarlı diğer hizmetler var mı? Belki posta sunucuları (exim, sendmail, vb) veya mesaj sıraları (activemq, rabbitmq, zeromq, vb)?
Veritabanları zaman içinde geriye dönük adımları sevmez, bu nedenle zaman atlamada varsayılan davranışı ile başlamak istemezsiniz. Ekleme
-x komut satırına seçeneği, ofset 600 saniyeden daha azsa (10 dakika) süreyi kısaltır. Azami hızda, saati ayarlamak için bir buçuk gün sürecek. Bu, zamanı ayarlamak için yavaş ama güvenli bir yoldur.
Çalıştırmadan önce
ntp zamanı ayarlamak için başlamak isteyebilirsiniz
ntp gibi bir seçenek ile
-g 2 saptamanın ne kadar büyük olduğunu doğrulamak için Bu, panik dengelemeyi nispeten güvenli olması gereken 2 saniyeye ayarlayacaktır.
Bu seçenek kullanmadan önce kullanmış olduğum alternatif bir seçenek, her dakika saniyenin geri saatini sıfırlayan bir döngü yazmaktı. Sıfırlamanın, ikinciyi değiştirmeyeceğinden emin olmak için kontrol ederseniz, bu muhtemelen güvenlidir. Zaman damgalarını yoğun kullanırsanız, dizi kayıtlarınızdan çıkmış olabilirsiniz.
Yaygın bir seçenek, sunucuyu, saatin geriye doğru hareket etmeyecek kadar uzun süre kapatmasıdır.
ntp veya
ntpdate Başlatma sırasında saati doğru zamanda atlamak için yapılandırılabilir. Bu veritabanı başlatılmadan önce yapılmalıdır.
Veritabanları, çok aktif ve dahili kayıtlarda zaman damgası varsa, sistem zaman değişikliklerine karşı özellikle savunmasız olabilir. Genel olarak, eğer zamanınız geride kalıyorsa, ileriye doğru atlamaktan çok ileriye doğru atlamaktan ve geriye doğru aniden atlamaktan daha az sorun yaşayacaksınız.
Joffrey'in belirttiği gibi, daha çok, aniden zaman atlamalarıyla ilgili sorunların veritabanının kendisinden daha fazla olduğu uygulama. Süreyi düzeltmenin en güvenli yolu, uygulamayı N + 1 dakika (burada N, sistem saatinizin geçtiği dakika sayısıdır) ve ardından eşitleme zamanı, NTP'yi başlatıp uygulamayı yeniden başlatmaktır. Uygulamada bu kadar fazla kesinti yapamazsanız, sadece zaman senkronizasyonu yapmadan önce veritabanının bir yedeğini almanızı, ardından bilgisayar bilgisinin goda'sına ölü bir sincap önermenizi ve sadece tetiği çekmenizi tavsiye ederim. Tamam, biraz cıvıl cıvıl, ama bir uygulama kesintisi almaktan başka bir "güvenli" yolu düşünemiyorum.
Anında bir zaman sıçraması olduğunda hataya açık olan veritabanı sunucusu genellikle değildir: bu zamanı kullanan uygulamalar.
Genellikle zaman izlemenin iki yolu vardır: kendi zaman izleme veya sistem saatini karşılaştırma. Her ikisinin de bazı olumlu ve olumsuz çekimleri var.
Kendi zaman izleme
Bunu, tam zamanlamanın bu kadar kritik olmadığı bazı gömülü programlama ve sistemlerde kullandığını görüyorum. Bir ana uygulama döngüsünde, bir 'kene' izlemenin bir yolu ele alınır. Bu, çekirdek tarafından verilen bir alarm olabilir, uyku veya geçilen süre miktarını gösteren bir seçim olabilir. Hangi zamanın geçtiğini bildiğinizde, bu kez bir sayaca ekleyebileceğiniz veya çıkarabileceğinizi biliyorsunuz. Bu sayaç, zamanlama uygulamanızı gerçekleştiren şeydir. Örneğin, sayaç 10 saniyeden fazlaysa, bir şeyi atabilir veya bir şeyler yapmanız gerekir.
Uygulama zaman takip etmezse, sayaç değişmeyecektir. Bu, uygulamanızın tasarımına bağlı olarak istenebilir. Örneğin, uzun süre çalışan bir işlemin ne kadar sürdüğünü izlemek, sayaç ile başlangıç / bitiş zaman damgalarının listesinden daha kolaydır.
Pro:
- Sistem saatine bağlı değil
- Büyük bir zaman çarpmayacak
- Pahalı sistem çağrısı yok
- Küçük sayaçlar, tam zaman damgasından daha az belleğe mal olur
con:
- Zaman çok doğru değil
- Sistem zamanındaki değişim, daha da hatalı olabilir
- Zamanlama, uygulamayı çalıştırmaya göre değişir, kalıcı olmaz
Sistem zamanının karşılaştırılması
Bu, daha sık kullanılan sistemdir: bir zaman damgasını depolar ve sistem zaman aramasını kullanarak zaman damgasıyla karşılaştırır. Sistem zamanındaki büyük çarpıklıklar, uygulamanızın bütünlüğünü tehlikeye atabilir, birkaç saniyenin görevi, saat yönüne bağlı olarak hemen saatlerce sürebilir veya sona erebilir.
Pro:
- Doğru zaman karşılaştırma
- Yeniden başlatmalar ve uzun kesintiler devam ediyor
con:
- Diğer zaman damgalarıyla karşılaştırmak için yeni bir zaman damgası almak için sistem çağrısı alır
- Uygulama çarpıklıkların farkında olmalı veya kırılabilir
Etkilenen sistemler
Uygulamaların çoğu zamanlama görevlerini zamanlama görevleriyle karşılaştırır. Önbelleği temizleyen veritabanı sistemleri için.
Bir veritabanı ve çağrı süresi işlevlerini kullanan tüm uygulamalar sorgu dilinde algılanır ve uygulama buna göre algılamaz ve işlenmezse, çarpıklıklardan etkilenir. Uygulamalar hiçbir zaman çalışmayı durduramaz veya amacına bağlı olarak belirsiz giriş sürelerine izin veremez.
Posta sistemleri, eski veya teslim edilmemiş postaları yönetmek için zaman damgalarını ve / veya zaman aşımlarını kullanacaktır. Bir saat çarpıklığı bunu etkileyebilir, ancak çok daha az etki ile. Sunuculara yeniden bağlanmayla ilgili geri çekilme zamanlayıcıları, bağlantı sunucusunda cezalarla sonuçlanacak şekilde gözden kaçırılabilir.
Sistem zamanını değiştirirken, çekirdek alarmlarının kapanacağını (araştırmamış) düşünmüyorum. Bunları kullanan sistemler güvenli olabilir.
Çözümler
Yavaşça zaman geçirin. Bu, favori zaman çözümünüzün belgelerinde bulunabilir.