Pembaruan sistem untuk banyak server

11

Kami memiliki banyak server dan masih ingin memperbarui semuanya. Cara sebenarnya adalah bahwa salah satu sysadmin pergi dari server ke server dan membuat aptitude update && aptitude upgrade- itu masih tidak keren.

Saya sedang mencari solusi yang masih lebih baik dan sangat cerdas. Bisakah boneka melakukan pekerjaan ini? Bagaimana Anda melakukannya?

Dennis Wisnia
sumber
ya, boneka bisa melakukan ini. cssh juga akan memperbaiki masalah Anda dalam jangka pendek.
Sirex

Jawaban:

10

Anda dapat menggunakan execjenis seperti:

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

Sejujurnya, saya tidak mencobanya sendiri, tetapi saya pikir Anda hanya perlu membuat modul baru yang menyertakan definisi exec.

The apt-get upgradeperintah interaktif. Untuk membuatnya berjalan dengan tenang, Anda dapat menambahkan opsi -q=2seperti yang ditunjukkan di atas.

Khaled
sumber
terlihat sangat bagus! Saya pikir saya membuat Pupec Usecase dengan beberapa mesin uji untuk mencoba ini. Terimakasih banyak!
Dennis Wisnia
3
+1 untuk merekomendasikan Wayang! Ubah hidup Anda sebagai sysadmin :)
Antoine Benkemoun
3
Pikiran bahwa eksekutif ini akan berjalan pada setiap proses wayang (setiap 30 menit) yang mungkin memalu proxy Anda dan / atau mirror Anda cukup keras jika Anda memiliki "banyak server". Secara pribadi, saya akan merekomendasikan menerapkan jadwal untuk jenis exec di atas, memastikan hanya berjalan pada malam hari, misalnya. Menurut pendapat saya, Wayang dimaksudkan untuk menegakkan status sistem, dan menjalankan perintah upgrade_packages seperti tanpa pengawasan manusia melaluinya, keduanya sedikit menakutkan dan sedikit penyalahgunaan Wayang. Alat mColective yang datang dengan Puppet Enterprise (atau setara dengan sumber terbuka) mungkin merupakan opsi yang lebih baik.
wzzrd
7
Instalasi boneka kami memiliki exec serupa yang memeriksa cap waktu pada file dan hanya menjalankan upgrade jika itu lebih baru daripada versi pada klien. Ketika kita ingin memutakhirkan semuanya, kita touchfile pada master boneka.
Ladadadada
@wzzrd: Poin bagus, tetapi bisa dibuat lebih baik dengan memeriksa beberapa kondisi eksternal seperti yang dikatakan Ladadadada.
Khaled
7

jika semua host Anda adalah debian, Anda dapat mencoba paket upgrade tanpa pengawasan.

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

Di sini kami telah menggunakan boneka untuk mengelola mesin virtual debian kami, dengan boneka kami dapat mengaktifkan dan mengelola konfigurasi upgrade yang tidak diinginkan di semua server.

Baru-baru ini tim kami sedang menguji alat mcollective untuk menjalankan perintah di semua server, tetapi untuk menggunakan keterampilan ruby ​​mcollective diperlukan.

[s] Guto

gutocarvalho
sumber
5

Saya akan merekomendasikan pergi untuk Wayang, facter dan mCollective.

mCollective adalah kerangka kerja yang sangat bagus di mana Anda dapat menjalankan perintah pada serangkaian host (dalam paralel) menggunakan facter sebagai filter.

Tambahkan ke bahwa proxy / cache lokal dan Anda akan diatur dengan baik untuk manajemen server.

CloudWeavers
sumber
Saya setuju, Wayang sebenarnya bukan alat terbaik untuk mengelola tindakan administratif seperti pembaruan paket massal / yang diatur.
robbyt
3

Gunakan alat yang dibuat untuk menjalankan perintah tunggal di beberapa server. Dan maksud saya bukan berarti memiliki terminal trilyun terbuka dengan Terminator atau ClusterSSH, tetapi sebaliknya memiliki terminal tunggal ke server manajemen yang menjalankan alat yang cocok untuk pekerjaan itu.

Saya akan merekomendasikan func, Salt atau mCollective dalam konteks ini. Jika Anda sudah memiliki Wayang, pilih mCollective (terintegrasi dengan baik di Wayang). Jika tidak, dan Anda memiliki Python lama di komputer, Anda dapat menikmati func. Jika Anda menggunakan Python baru, coba Salt. Semua alat ini menjalankan perintah yang ditentukan pada baris perintah secara serempak, yang jauh lebih menyenangkan daripada loop ssh berurutan atau bahkan melakukan perintah aptitude yang sama di beberapa jendela Terminator ke beberapa server.

Anda pasti akan menyukai Garam .

wzzrd
sumber
2

Jadi saya kira ada banyak hal yang berkontribusi pada solusi yang baik:

  • Bandwidth
  • Kemudahan administrasi
  • Detail logging jika ada sesuatu yang kacau.

Bandwidth : Pada dasarnya dua alternatif untuk menghemat bandwidth muncul di pikiran saya:

  • Menyiapkan mirror Debian dan mengonfigurasi semua klien Anda untuk menggunakan mirror ini, lihat http://www.debian.org/mirror/ untuk detail lebih lanjut. (Saya akan merekomendasikan ini)
  • Menyiapkan proxy (apt-cacher, apt-proxy atau Squid) dan meningkatkan cache sehingga semua klien Anda dapat mengambil untung dari cache ini

Administrasi : Saya akan mengkonfigurasi shell paralel seperti PDSH , PSSH , GNU Parallel dan mengeluarkan perintah pada semua klien, jika saya menguji perintah sebelumnya pada mesin contoh. Maka sangat tidak mungkin bahwa itu mungkin gagal pada semua yang lain. Atau Anda dapat mempertimbangkan pekerjaan cron pada semua klien, tetapi kemudian mungkin gagal secara otomatis, jadi saya lebih suka solusi pertama.

Jika Anda khawatir tentang simultan peningkatan, Anda dapat menjadwalkan perintah Anda at

Logging : Seperti halnya shell paralel, Anda memiliki kemungkinan untuk mengarahkan ulang output. Saya akan menggabungkan stderr dan stdout dan menulisnya ke logfile.

matematika
sumber
Bandwidth: ada proxy caching khusus untuk repositori deb, cari apt-cacher atau apt-proxy.
S19N
Hebat saya akan mengintegrasikan ini dalam jawabannya.
matematika
dan perangkat lunak seperti mCollective akan memungkinkan eksekusi perintah paralel DAN melaporkan output / hasil.
CloudWeavers
1

Pembungkus ssh paralel saya sendiri: classh adalah alternatif dari berbagai alat Paralel dan ssh cluster di luar sana.

Anda mungkin menyukainya lebih baik atau Anda mungkin membencinya. Hanya ada tiga alasan saya menyebutkannya di sini:

  • Ini sangat sederhana untuk menginstal dan menggunakan: file .py tunggal tanpa dependensi eksternal di luar pustaka standar Python 2.5.
  • Ini sangat dapat diandalkan dalam batas-batasnya. Saya menggunakannya setiap hari kerja, seringkali hampir 100 kali per hari dan biasanya pada koleksi ratusan hingga beberapa ribu target per perintah. (Saya sudah mengujinya pada daftar target lebih dari 25 ribu server sekaligus). Tidak pernah gagal untuk menjalankan, gagal untuk menyelesaikan atau memberi saya perilaku tak tentu. (Satu-satunya batasan yang terkait dengan subprocess.communicate()metode Python --- jadi Anda hanya dapat menangkap sekitar 64K stdout dan, secara terpisah hingga 64K stderr, misalnya; juga setiap proses jarak jauh yang mencoba membaca dari stdin-nya hanya akan menunda sampai subproses ssh lokal terbunuh, secara otomatis oleh penanganan timeout classh )
  • Sangat mudah untuk menulis skrip khusus, dengan Python, untuk menggunakan classh.py sebagai modul. Jadi sangat mudah untuk menulis sesuatu seperti:

    
        !#/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>

Hanya itu yang ada untuk itu. Misalnya dalam loop selesai yang bersarang Anda dapat mengumpulkan daftar semua yang mengembalikan status keluar tertentu atau untuk memindai pesan kesalahan tertentu, dan mengatur pekerjaan tindak lanjut untuk menangani itu. (Pekerjaan akan berjalan secara bersamaan, default 100 pekerjaan setiap saat, sampai masing-masing selesai; jadi perintah sederhana pada beberapa ratus host biasanya selesai dalam beberapa detik dan skrip shell yang sangat kompleks dalam satu string perintah panjang ..) (katakanlah sekitar 50 baris atau lebih ... dapat menyelesaikan lebih dari beberapa ribu host dalam waktu sekitar 10 menit ... sekitar 10 ribu host per jam di lingkungan saya, dengan banyak dari mereka yang terletak secara interkontinen).

Jadi ini mungkin sesuatu yang dapat Anda gunakan sebagai ukuran ad hoc sampai konfigurasi boneka Anda diimplementasikan dan diuji dengan baik ... dan itu juga cukup membantu untuk melakukan survei ad hoc kecil dari host Anda untuk melihat mana yang menyimpang dari standar Anda di berbagai cara kecil.

Jim Dennis
sumber
Kebetulan di halaman web kelas, di bitbucket.org ada juga daftar dari berbagai pembungkus ssh yang saya survei sebelum saya memutuskan untuk menulis sendiri. Salah satu dari mereka mungkin bekerja untuk Anda. Selain itu Anda mungkin mencari Python Fabric yang merupakan proyek yang lebih baru dengan fitur yang serupa, meskipun agak lebih luas dan sedikit lebih kompleks.
Jim Dennis
1

Jawaban menggunakan exec cukup membantu.

Namun menurut manual apt-get itu bukan ide yang baik untuk menggunakan -q = 2 dengan cara ini (meskipun saya telah menggunakannya selama bertahun-tahun tanpa masalah)

-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.

Saya telah menggunakan skrip sendiri selama bertahun-tahun, menjalankan apt-get dengan cara berikut:

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

Hal-hal seperti boneka dan alat-alat lain yang disebutkan orang pasti dapat bekerja, tetapi sepertinya itu berlebihan untuk apa yang pada dasarnya hanya meniru beberapa perintah yang diketik oleh manusia. Saya percaya dalam menggunakan alat paling sederhana untuk pekerjaan tertentu, dalam hal ini skrip bash adalah sesederhana yang didapat tanpa kehilangan fungsionalitas.

aseq
sumber
Ya, saya pikir ini cara yang baik untuk beberapa Server. Tetapi jika saya harus mendapatkan beberapa opsi lagi (meluncurkan beberapa konfigurasi pada setiap server, dll.) Maka bonekanya adalah cara yang lebih baik. Saya bekerja saat ini tentang boneka dan keindahannya ..
Dennis Wisnia
Saya tidak setuju. Tetapi untuk tujuan apa yang diminta poster itu mungkin berlebihan.
aseq
1

Selama bertahun-tahun saya dengan senang hati meningkatkan dan menginstal paket menggunakan apt-dater . Ini adalah alat yang ringan dan efektif untuk manajemen paket jarak jauh. Ini menggunakan screen, sudodan ssh.
Untuk manajemen paket apt-dater mungkin solusi yang lebih mudah daripada alat manajemen konfigurasi.
apt-dater berguna untuk manajemen paket terpusat pada berbagai rasa GNU / Linux seperti Debian dan CentOS.

Onlyjob
sumber
1

Anda bisa menggunakan Fabric . Fabric adalah pustaka Python (2.5-2.7) dan alat baris perintah untuk merampingkan penggunaan SSH untuk penerapan aplikasi atau tugas administrasi sistem.

warga kehormatan
sumber
0

gunakan webmin ,,, dan gunakan fitur cluster webmin, di mana Anda dapat menambahkan semua sistem ke satu konsol webmin dan mengeluarkannya perintah apa pun atau mengontrol semuanya dari satu tempat.

Atau

Gunakan Cluster ssh

Atau

PSSH

Farhan
sumber
Ya, saya benar-benar dapat membuka banyak jendela dan dapat bekerja secara paralel. Cluster SSH cukup keren tapi saya pikir itu tidak cukup pintar.
Dennis Wisnia
0

Solusi lain jika semua host Anda menjalankan Debian (atau turunannya) adalah dengan menggunakan paket cron-apt . Tetapi, seperti yang disarankan per dokumentasi, sedikit perhatian harus diambil.

Saat ini saya menggunakan cron-apt pada selusin server untuk melakukan semua pembaruan keamanan secara otomatis dan tanpa pengawasan. Untuk menghindari upgrade yang tidak diinginkan, saya hanya menggunakan cron-apt pada server yang menjalankan distribusi stabil Debian dan saya pastikan untuk mengkonfigurasi sumber apt saya jadi gunakan nama distribusi, wheezy , dan bukan aliasnya (stabil).

Konfigurasi cron-apt tertentu yang saya gunakan diringkas dalam satu file tindakan: /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"

Pemutakhiran lainnya, dilakukan secara manual, menggunakan layar atau apa pun yang paling sesuai, karena mungkin memerlukan intervensi manual selama pemutakhiran.

Tonin
sumber