Birçok sunucu için sistem güncellemeleri


11

Birçok sunucumuz var ve hepsini güncellemek istiyoruz. Asıl yol, sistem yöneticilerinin sunucudan sunucuya gitmesi ve bir şey yapmasıdır aptitude update && aptitude upgrade- hala havalı değildir.

Şimdi hala daha iyi ve çok akıllı bir çözüm arıyorum. Kukla bu işi yapabilir mi? Bunu nasıl yapıyorsun?


evet, kukla bunu yapabilir. cssh da sorununuzu kısa vadede çözecektir.
Sirex

Yanıtlar:


10

Aşağıdaki execgibi türü kullanabilirsiniz :

exec { "upgrade_packages":
    command => "apt-get upgrade -q=2",
    path    => "/usr/local/bin/:/bin/:/usr/bin/",
    # path  => [ "/usr/local/bin/", "/bin/" ],  # alternative syntax
}

Dürüst olmak gerekirse, bunu kendim denemedim, ama bence böyle bir exec tanımı içeren yeni bir modül oluşturmanız gerekiyor.

apt-get upgradeKomut interaktif. Sessiz çalışmasını sağlamak için seçeneği -q=2yukarıda gösterildiği gibi ekleyebilirsiniz .


çok iyi görünüyor! Bunu denemek için bazı test makineleri ile bir kukla usecase oluşturmak düşünüyorum. Çok teşekkürler!
Dennis Wisnia

3
Kukla tavsiye etmek için +1! Hayatınızı bir sysadmin olarak değiştirir :)
Antoine Benkemoun

3
Bu sunucunun, "çok fazla sunucunuz" varsa proxy'nizi ve / veya aynanızı zorlayabilecek her Kukla çalıştırmasında (30 dakikada bir) çalışacağını unutmayın. Şahsen, örneğin sadece geceleri çalıştığından emin olarak yukarıdaki exec tipi için bir zamanlama uygulanmasını öneriyorum. Benim düşünceme göre, Kukla, sistem durumunu zorlamak amaçlıdır ve insan gözetimi olmadan yükseltme_paketleri benzeri bir komut çalıştırmak, hem biraz korkutucu hem de biraz Kukla kötüye kullanımıdır. Puppet Enterprise ile birlikte gelen mColective aracı (veya açık kaynak eşdeğeri) daha iyi bir seçenek olabilir.
wzzrd

7
Kukla kurulumumuz, bir dosyadaki zaman damgasını kontrol eden ve yalnızca istemcideki sürümden daha yeni ise yükseltme işlemini çalıştıran benzer bir yürütmeye sahiptir. Her şeyi yükseltmek istediğimizde toucho dosyayı kukla ustası üzerinde yapıyoruz .
Ladadadada

@wzzrd: İyi bir nokta, ama Ladadadada'nın dediği gibi bazı dış koşulları kontrol ederek daha iyi hale getirilebilir.
Khaled

7

tüm ana makineleriniz debian ise katılımsız yükseltme paketini deneyebilirsiniz.

http://packages.debian.org/sid/unattended-upgrades

Burada, debian sanal makinelerimizi yönetmek için kukla kullanıyoruz, kukla ile tüm sunuculardaki doğal olmayan yükseltme yapılandırmalarını etkinleştirebiliyor ve yönetebiliyoruz.

Son zamanlarda ekibimiz tüm sunucularda komut çalıştırmak için mcollective aracını test ediyor, ancak mcollective ruby ​​becerilerini kullanmak gerekiyor.

[s] Guto


5

Kukla, facter ve mCollective için gidiş tavsiye ederim.

mCollective, facter'ı filtre olarak kullanarak bir dizi ana bilgisayarda (paralel olarak) komutları çalıştırabileceğiniz çok güzel bir çerçevedir.

Buna yerel bir proxy / önbellek eklediğinizde, sunucu yönetimi için iyi ayarlanmış olursunuz.


Katılıyorum, Kukla, toplu / orkestre paket güncellemeleri gibi idari işlemleri yönetmek için gerçekten en iyi araç değil.
robbyt

3

Birden çok sunucuda tek bir komut çalıştırmak için yapılmış bir araç kullanın. Ve bununla, Terminator veya ClusterSSH ile bir kazillion terminaline sahip olmak değil, bunun yerine işe uygun bir araç çalıştıran bir yönetim sunucusuna tek bir terminalin olması demek istemiyorum.

Bu bağlamda func, Salt veya mCollective öneririm. Zaten Kuklanız varsa, mCollective için gidin (Kukla'ya iyi entegre olur). Yapmazsanız ve makinelerinizde eski bir Python varsa, func'un tadını çıkarabilirsiniz. Python'u yeniyseniz, Salt'ı deneyin. Tüm bu araçlar, komut satırında belirtilen komutu eşzamansız olarak çalıştırır, bu da sıralı bir ssh döngüsünden çok daha eğlencelidir veya hatta on üç Terminatör penceresindeki umpteen sunuculara aynı yetenek komutlarını uygular.

Kesinlikle edeceğiz aşk Tuz .


2

Bu yüzden iyi bir çözüme katkıda bulunan birçok şey var:

  • Bant genişliği
  • Uygulama kolaylığı
  • Bir şeyin vidalanması durumunda ayrıntılı kayıt.

Bant genişliği : Bant genişliğinden tasarruf etmek için temel olarak iki alternatif aklıma geliyor:

  • Bir Debian aynası oluşturma ve tüm istemcilerinizi bu aynayı kullanacak şekilde yapılandırma, daha fazla bilgi için http://www.debian.org/mirror/ adresine bakın. (Bunu tavsiye ederim)
  • Proxy (apt-cacher, apt-proxy veya Squid) oluşturma ve önbelleği artırma, böylece tüm müşterileriniz bu önbellekten yararlanma

Yönetim : PDSH , PSSH , GNU Parallel gibi paralel bir kabuk yapılandıracak ve komutu daha önce örnek bir makinede test etmişsem tüm istemcilerde komutu verirdim . O zaman diğerlerinde başarısız olabileceği pek olası değil. Alternatif olarak, tüm istemcilerde bir cron işi düşünebilirsiniz, ancak daha sonra otomatik olarak başarısız olabilir, bu yüzden ilk çözümü tercih ederim.

Yükseltmelerin eşzamanlılığıyla ilgili endişeleriniz varsa, komutlarınızı at

Günlüğe kaydetme : Paralel kabuklarda olduğu gibi, çıktıyı yeniden yönlendirme olanağına sahipsiniz, stderr ve stdout'u birleştirip bir günlük dosyasına yazarım.


Bant genişliği: Deb depolarına özgü önbellek vekilleri vardır, apt-cacher veya apt-proxy arayın.
S19N

Harika, cevabı buna entegre edeceğim.
matematik

ve mCollective gibi yazılımlar paralel komutların yürütülmesine izin verir VE çıktı / sonucu raporlar.
CloudWeavers

1

Kendi paralel ssh sargıcım : classh , orada çeşitli Paralel ve küme ssh araçlarına bir alternatiftir.

Daha iyi olabilir ya da nefret edebilirsiniz. Burada bahsetmemin sadece üç nedeni var:

  • Kurulumu ve kullanımı son derece basittir: Python 2.5 standart kitaplıklarının ötesinde harici bağımlılıkları olmayan tek bir .py dosyası.
  • Sınırları dahilinde son derece güvenilirdir. Her iş gününde, genellikle günde yaklaşık 100 kez ve genellikle komut başına yüzlerce ila birkaç bin hedef koleksiyonunda kullanıyorum. (Bir seferde 25 binden fazla sunucunun hedef listelerinde test ettim). Hiçbir zaman çalıştırılamadı, tamamlanamadı veya bana belirsiz davranışlar verdi. (Python subprocess.communicate()yöntemiyle ilgili tek sınırlamalar --- böylece yalnızca 64K stdout ve 64K'ya kadar stderr'a kadar yakalama elde edebilirsiniz; ayrıca stdininden okumaya çalışan herhangi bir uzak işlem basitçe durur yerel ssh alt raporu öldürülünceye kadar, otomatik olarak classh'ın zaman aşımı yönetimi ile)
  • Classh.py'yi modül olarak kullanmak için Python'da özel bir komut dosyası yazmak son derece basittir . Yani şöyle bir şey yazmak çok kolay:

    
        !#/bin/env python
        import classh
        job = classh.SSHJobMan(cmd, targets)
        job.start()
        while not job.done():
            completed = job.poll()
            for i in completed:
                # do something with the classh.JobRecord object referenced by i
        # done

    # You can optionally do post-processing on the dictionary of JobRecords here # keyed off the target strings (hostnames) </code></pre>

Hepsi bu kadar. Örneğin, iç içe tamamlanmış döngüde, belirli bir çıkış durumu döndüren veya belirli hata mesajlarını taramak için bunların bir listesini toplayabilir ve bunları işlemek için takip işleri ayarlayabilirsiniz. (İşler, her biri tamamlanana kadar, aynı anda, varsayılan olarak 100 iş olacak şekilde çalışır; bu nedenle, birkaç yüz ana bilgisayarda basit bir komut genellikle birkaç saniye içinde tamamlanır ve tek bir uzun komut dizesinde çok karmaşık bir kabuk komut dosyasıdır. elli satır ya da öylesine ... birkaç bin ev sahibini yaklaşık 10 dakika içinde tamamlayabilirim ... çevremde saatte yaklaşık 10 bin ev sahibi, bunların çoğu kıtalararası olarak yer alıyor).

Yani bu, kukla yapılandırmanız uygulanana ve iyi test edilene kadar geçici bir önlem olarak kullanabileceğiniz bir şey olabilir ... çeşitli küçük yollar.


Bu arada, sınıf web sayfalarında, bitbucket.org'da, kendime yazmaya karar vermeden önce anket yaptığım diğer çeşitli ssh paketleyicilerinin bir listesi de var. Bunlardan herhangi biri sizin için çalışabilir. Ayrıca, biraz daha kapsamlı ve biraz daha karmaşık özelliklere sahip yeni bir proje olan Python Fabric'e bakabilirsiniz.
Jim Dennis

1

Exec kullanarak cevap oldukça yararlıdır.

Ancak apt-get kılavuzuna göre -q = 2'yi bu şekilde kullanmak iyi bir fikir değil (yine de yıllarca sorunsuz kullanıyorum)

-q, --quiet
       Quiet; produces output suitable for logging, omitting progress indicators. More q's will produce more quiet up to a maximum of 2. You can also use -q=# to set the
       quiet level, overriding the configuration file. Note that quiet level 2 implies -y, you should never use -qq without a no-action modifier such as -d, --print-uris or
       -s as APT may decided to do something you did not expect. Configuration Item: quiet.

Ben yıllardır kendim için bir senaryo kullandım, apt-get aşağıdaki şekilde çalışan:

ssh example.org "apt-get update && apt-get -y upgrade && apt-get -y dist-upgrade && apt-get clean"

İnsanların bahsettikleri kukla ve diğer araçlar gibi şeyler işe yarayabilir, ancak temelde bir insan tarafından yazılan birkaç komutu taklit eden şey için aşırıya kaçmış gibi görünüyor. Belirli bir iş için en basit aracı kullanmaya inanıyorum, bu durumda bir bash betiği işlevselliği kaybetmeden aldığı kadar basit.


Evet, bazı Sunucular için iyi bir yol olduğunu düşünüyorum. Ama daha fazla seçenek almalıyım (her sunucuda bazı yapılandırmalar vb.) Daha sonra onun kuklası gerçekten daha iyi bir yol. Şu anda kukla ve güzel üzerinde çalışıyorum ..
Dennis Wisnia

Ben katılmıyorum. Ancak posterin ne istediğini anlamak için aşırıya kaçabilir.
aseq

1

Yıllardır apt-dater kullanarak paketleri mutlu bir şekilde yükseltiyorum ve yüklüyorum . Uzaktan paket yönetimi için hafif ve etkili bir araçtır. Bu kullanır screen, sudove ssh.
Paket yönetimi için apt-dater , konfigürasyon yönetim araçlarından daha kolay bir çözüm olabilir.
apt-dater , Debian ve CentOS gibi farklı GNU / Linux lezzetlerinde merkezi paket yönetimi için kullanışlıdır.


1

Kumaş kullanabilirsiniz . Fabric, uygulama dağıtımı veya sistem yönetimi görevleri için SSH kullanımını kolaylaştırmak için bir Python (2.5-2.7) kitaplığı ve komut satırı aracıdır.


0

webmin ,, kullanın ve tüm sistemleri tek bir webmin konsoluna ekleyebileceğiniz ve onlara herhangi bir komut verebileceğiniz veya hepsini tek bir yerden kontrol edebileceğiniz webmin küme özelliğini kullanın.

Veya

Küme ssh kullanın

Veya

PSSH


Evet, gerçekten çok fazla pencere açabilirim ve içinde paralel çalışabilirim. Küme SSH oldukça havalı ama bence yeterince akıllı değil.
Dennis Wisnia

0

Tüm ana bilgisayarlarınız Debian (veya türevleri) çalıştırıyorsa başka bir çözüm cron-apt paketini kullanmaktır . Ancak, belgelere göre önerildiği gibi, biraz dikkat edilmelidir.

Şu anda tüm güvenlik güncelleştirmelerini otomatik olarak ve katılımsız gerçekleştirmek için bir düzine sunucuda cron-apt kullanıyorum. İstenmeyen yükseltmelerden kaçınmak için, yalnızca Debian kararlı dağıtımını çalıştıran sunucularda cron-apt kullanıyorum ve apt kaynaklarımı yapılandırdığımdan emin olun, bu yüzden onun takma adını ( wheezy ) ve takma adını (kararlı) kullanmayın.

Kullandığım belirli cron-apt yapılandırması bir eylem dosyasında özetlenir: /etc/cron-apt/action.d/5-install

dist-upgrade -y -o APT::Get::Show-Upgraded=true -o Dir::Etc::SourceList=/etc/apt/sources.list.d/security.list -o Dir::Etc::SourceParts="/dev/null"

Yükseltme sırasında manuel müdahale gerektirebileceğinden, başka herhangi bir yükseltme manuel olarak, ekran veya en uygun olanı kullanılarak yapılır.

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.