Linux sunucularını ne sıklıkla yeniden başlatmalıyım?


30

Büyük hesaplama ızgaralarına veri sağlayan web servislerini çalıştırmak için kullanılan birçok Linux sunucum (SUSE 9 ve 10) var. Son zamanlarda kesintileri açıklamakta zorlandık (ör. Donanım ve yazılım kayıtları herhangi bir belirgin hata göstermiyor) ve uzun çalışma süresinin (tipik olarak 200-300 gün) sorunun olup olmadığını merak etmeye başladık. Bu sunucuların yoğun olarak kullanıldığı göz önüne alındığında, düzenli bir yeniden başlatma döngüsü düşünmeli miyim?

Yanıtlar:


47

Bir çekirdek güncellemesinden sonra yeniden başlatmanız gerekir (KSplice kullanmıyorsanız), başka bir şey isteğe bağlıdır. Şahsen, sunucunun ve tüm hizmetlerin beklendiği gibi geri geldiğinden emin olmak için bir bakım penceresi sırasında aylık bir döngüyü yeniden başlatıyorum. Bu yolla, sistemin uygun şekilde geri geleceğinden program dışı bir yeniden başlatma (yani kritik çekirdek güncellemesi) yapmam gerektiğinden kesin olarak emin olabilirim. Sunucuların ve hizmetlerin otomatik olarak izlenmesi (yani Nagios) da bu sürece yardımcı olmak için çok uzun bir yol kat ediyor (yeniden başlatma, ışıkları kırmızı görün ve ardından hepsi yeşile dönüyor).

PS, düzenli olarak yeniden başlatırsanız, fsck çeklerinizi ayarladığınızdan emin olmak istersiniz (yani, uygun şekilde kontroller arasında maksimum montaj sayısı, aksi halde sunucu birkaç terabaytlık veriyi kesmeye başlarsa, 2 dakikalık hızlı bir yeniden başlatma işlemi 30 dakika sürebilir. Genelde mount sayımı 0'a (tune2fs -c 0) ve kontroller arasındaki süreyi 6 aya kadar ayarladım ve sonra arada bir fsck'i manuel olarak zorladım ve sayımı sıfırladım.


1
DRBCP'nizi düzenli olarak test etmek bir zorunluluktur ve bu kontrol türü bu yönde harika bir başlangıçtır.
Scott Pack

Çekirdek güncellemesinden sonra yeniden başlatmanıza gerek yok - ksplice.com
raspi

1
KSplice doğrudur, KSplice ile yama çalıştıran yazılımı (Çekirdek, Veritabanı vb.) Yaşayabilirsiniz. Ancak Oracle, KSplice'i satın aldığından beri, muhtemelen Oracle ürünlerini kullanmayan (son zamanlarda KSplice'i satın alan) kimse için bir çözüm değildir.
Kurt

11

Aslında, büyük yapılandırma değişiklikleri yapıldığında sunucularımı oldukça düzenli bir şekilde yeniden başlatıyorum. Acil bir durumda sunucu yazılımının bir sorunla karşılaşacağını bilmek önemlidir. İstediğiniz en son şey bir kesintiden kurtarmaya çalıştığınız bir konumda olmak ama sunucu yapılandırmanızla uğraşmak zorunda olduğunuzdur çünkü kurduğunuzda tamamen test etmediniz.


6

Çalışan çekirdek sürümünü kesinlikle değiştirmeniz gerekmedikçe Linux sunucularının hiçbir zaman yeniden başlatılması gerekmez. Bir yapılandırma dosyası değiştirilerek ve bir init betiği ile bir hizmet yeniden başlatılarak çoğu sorun çözülebilir.

Bir hizmetin yapılandırma dosyasındaki değişikliklerinizi yansıtmadan "anında" herhangi bir şeyi değiştirdiyseniz, yeniden başlatmalara dikkat etmeniz gerekir, bu değişiklikler yeniden başlatma sonrasında uygulanmayacaktır.

Ancak, genellikle planlanmış sistem güncellemelerinin ardından yeniden başlatıyorum. Genelde gerekli değildir, fakat ben ofiste kimse olmadığında onları yaparım, öyleyse neden olmasın? Zaten güncellemeyi yaparken, çoğu zaman çekirdek geliştirmeleri oluyor.


Elbette zaman zaman yeniden başlatılmaları gerekiyor. Yazılımı güncellediğinizde ve belirli bir yazılım şu anda çalışıyorsa, eski sürümün kopyası RAM’de etkin olduğundan yazılımın eski sürümünü kullanıyor olacaksınız. Güncellemenin geçerli olması için bu yazılımı yeniden başlatmanız (hizmet yeniden başlatması veya yeniden başlatılması) gerekir. Bazı uygulamaların yeniden başlatılması gerekiyor ve hizmet yeniden başlatıldığında güncellenemiyor
BlueWizard

1
@JonasDralle, hizmetler yükseltildiğinde otomatik olarak durmalı ve yeniden başlatılmalıdır. Aksi takdirde, bu hizmetin uygulanmasında bir hatadır!
Alexis Wilke,

4

Gerçekten gerekli değil, linux bellek kullanımı mükemmel. Ancak, bu kadar uzun süredir mola alıyorsanız, muhtemelen bilinen açıkları olan çekirdekleri kullanıyorsunuzdur - bunu izlemek isteyebilirsiniz.


3
Linux hafızasını kaldırabilir, ancak bireysel uygulamalar olmayabilir - uzun süre çalışırlarsa yığınları parçalanabilir. Elbette prefork Apache (işlemlerini geri dönüştüren) gibi şeyler genellikle bundan muzdarip değildir. Tek bir çok uzun ömürlü işlem kullanan başka şeyler (örneğin, mysql) olabilir. Uygulamanıza bağlı.
MarkR

4

Yakın zamanda bir çekirdek güncellemesi VEYA bir libc güncellemesi varsa, yeniden başlatmanız gerektiğini düşünüyorum. Pek çok şey libc ile bağlantılıdır ve bu kütüphaneyi bellekten tamamen kaldırmak ve yeniden başlatmadığınız sürece yeni sürümle değiştirmek gerçekten mümkün değildir.

Örneğin, / bin / ls gibi temel ve hatta / bin içindeki diğer şeyler libc kullanır. Sadece bir konsol kullanıyorsanız ve bash kullanıyorsanız libc kullanıyorsunuz.

$ ldd /bin/bash
        linux-gate.so.1 =>  (0xffffe000)
        libtermcap.so.2 => /lib/libtermcap.so.2 (0xb8029000)
        libdl.so.2 => /lib/libdl.so.2 (0xb8025000)
        libc.so.6 => /lib/libc.so.6 (0xb7ed9000)
        /lib/ld-linux.so.2 (0xb804b000)

$ ldd /bin/ls
        linux-gate.so.1 =>  (0xffffe000)
        librt.so.1 => /lib/librt.so.1 (0xb7f3a000)
        libacl.so.1 => /lib/libacl.so.1 (0xb7f33000)
        libc.so.6 => /lib/libc.so.6 (0xb7de7000)
        libpthread.so.0 => /lib/libpthread.so.0 (0xb7dd0000)
        /lib/ld-linux.so.2 (0xb7f61000)
        libattr.so.1 => /lib/libattr.so.1 (0xb7dcc000)

Ve evet, eğer /etc/init.d dosyasını başlangıçta bir şekilde etkileyen dosyaları değiştirirseniz, yeniden başlatmanızı tavsiye ederim. Bir şeyleri hızlı bir şekilde tekrar başlatıp çalıştırmanız gerektiğinde başlangıç ​​dosyasında küçük bir hata yaptığınızı öğrenmek istemezsiniz.

Bir sunucu yeniden başlatılmadan günlerce geçtiyse, aslında tekrar düzgün şekilde açılacağından emin olmanın bir yolu olmadığı anlamına gelir. Bir kez daha bu, üzerinde çok sayıda yapılandırma dosyasının değişmiş olabileceğinden ve bunun olduğundan emin olmak için kimsenin uzun süredir yeniden başlatılmamasıdır. Ayrıca, sunucuda çok fazla güncelleme varsa ve uzun süredir yeniden başlatılmadıysa , güncellemeleri uygulamadan önce yeniden başlatın, aksi halde bir sorun varsa, bunun bir yapılandırma hatasından kaynaklandığından emin olamazsınız. uzun zaman önce ya da uyguladığınız yeni güncellemeler.

Son olarak, çok uzun bir süre sonra kritik bir sunucuyu yeniden başlatırsanız, fsck, geri gelmesi için şimdi çok uzun bir süre beklemeniz gerektiği anlamına gelebilir. Bunu önlemek için tune2fs kullanabilirsiniz, ancak sanırım düzenli olarak kontrol etmek iyi bir fikirdir. Bu nedenle, sadece 1 sunucuya bağlı olduğunuz bir konumda olmamalısınız ve bu durumda, web sitenizin tamamı kayboldu. Beklemede başka bir tane olmalıdır.


3
"Reboot before" için +1
kubanczyk

2

Bu beklenmeyen aksama süresinde aranacak başka bir şey de, bellek ve işlemcinin tam olarak nasıl kullanıldığına ve hangi programların kullanıldığına bakmaktır. tophangi süreçlerin kaynak kaybının suçlu olduğunu belirleyebilmeli ve sonra onları doğrudan yönetebilmelidir. Başka bir fikir, belirli bir programda işlemlerinizi kapatmak ve yeniden başlatmak için bir cronjob başlatmak olacaktır.


+1 - Tüm kesintilere bir çekirdek problemi neden olmaz.
pcapademic

2

Bu kadar uzun zaman olsaydı, yeniden başlatmak için kötü bir fikir değil, böylece kök bölümünde bir disk kontrolü (fsck) çalıştırabilirsiniz. Sizin argümanınız bunun veri bütünlüğünü sağladığına yardımcı olabilir.


1

Düzgün çalışan bir Linux sunucusunun yalnızca çekirdek güncellemeleri için yeniden başlatılması gerekir. Aynısı her zaman bazı yazılımlar için söylenemez - örneğin, bazen apache2 veya postacıyı yeniden başlatmam gerekebilir.


0

Altyapımda iki veri sitesi var: alfa (işlemlerin günlük olarak gerçekleştiği yer) ve beta (işlerin alfada çok yanlış gitmesi durumunda yedek site). Şu anda durum böyle olmasa da, alfa sitesinde her 6 ayda bir planlanan aksama sürelerini ayarlıyorum, böylece tüm hizmetleri beta sürümünden çalıştırabiliriz.

Bu iki şeyi başaracak. İlk olarak, felaket kurtarma sitemizin tamamen uygun olduğunu ispatlayacaktır. İkincisi, alfadaki biriken kıtlığı gidermek için bana bir haftaya değecek.

Olduğu gibi, sunucularımı gerektiği kadar yeniden başlatmıyorum. Sunucularınızın ihtiyaç duyduğunuzda geri geleceğini bilmenin önemli olduğunu söyleyen diğer afişlerle aynı fikirdeyim. Yapacaklarını "düşünmek" istemezsin, sadece bir şeyi değiştirdiğini ve doğru şekilde yapmadığını veya belgelendirmediğini bulmak için.


0

Ayrıca, makinenizin şu anki durumunun, yeniden başlatma sonrası makinenin durumu olup olmadığını kontrol edecek (mümkün olduğunca) bazı komut dosyaları yazabilirsiniz.

Bununla demek istediğim ...

  • /etc/init.d/*
    • Şu anda çalışan tüm servislerin önyüklemeye başlamak için işaretlendiğini kontrol edin
    • Çalışmayan tüm servislerin önyüklemede başlatılmayacak şekilde işaretlendiğini kontrol edin
  • /etc/fstab
    • Tüm bağlı dosya sistemlerinin (örn. /etc/mtab) İlgili girişlere sahip olduğunu kontrol edin ./etc/fstab
    • /etc/fstabAynı zamanda önyüklemede monte edilmek üzere belirtilen tüm dosya sistemlerinin de şu anda monte edildiğini kontrol edin.

Bu elbette herhangi bir yolla tam bir kontrol değildir, ancak yeniden başlatma sonrası sorunların oluşma riskini azaltır.

Buna ek olarak, sunucu paketi güncellemeleri için bir politika belirlemelisiniz (mantıklı bir sırayla, haftada 1 grup ...

  • Kilitlenme ve Yanık Sunucuları
  • Geliştirme Sunucuları, Eğitim Sunucuları
  • Test Sunucuları
  • Üretim Öncesi Sunucular
  • Üretim sunucuları

Ayrıca, "Tüm sunucular 6 ayda bir tam bir işletim sistemi yükseltme işleminden geçecek" gibi genel bir plana sahip.


0

Sunucuda çalışan görevlere bağlıdır. Bazı sanal sunucular için sıklıkla apachectl restart yerine yeniden başlatmayı kullanırız ve bu işlem sadece 5-10 saniye sürer. Ancak bazı ağır yüklü makineler yılda birkaç kez yeniden başlatılıyor ve tüm yönetici ekip süreci izliyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.