Linux Massal / Administrasi Jarak Jauh

10

Selain infrastruktur TI internal kami, kami memiliki sekitar 500 mesin Linux yang menjadi tuan rumah layanan kami untuk dunia online. Mereka dikelompokkan dalam sekelompok cluster seperti Database An, Product An, NFS, Backoffice dan sebagainya. Selain itu, mereka dikelola oleh penyedia eksternal, sesuai dengan spesifikasi dan persyaratan kami.

Namun, kami menghadapi banyak masalah selama (web-) pengembangan perangkat lunak, peluncuran dan penyebaran - terutama karena lingkungan dev dan staging hampir tidak memiliki kesamaan dengan sistem live (saya menyisihkan detail yang tidak menyenangkan ..) .

Jadi, saya sudah mencoba membuat mesin virtual, menyalin berbagai sistem-hidup setepat mungkin dan menyiapkan mereka untuk terhubung ke misalnya pengembangan-database bukan yang "nyata" secara transparan untuk pengembang (bukan root). Ini bekerja cukup baik, tetapi ...

Saya bertanya-tanya bagaimana seseorang bisa mengelola sistem-sistem itu dari jarak jauh dan secara massal ? Apakah ada beberapa keluarga perangkat lunak yang tidak saya sadari? Atau, paling tidak, beberapa teknik atau prinsip yang harus dipahami seseorang?

Kami akan menyediakan setiap pengembang dengan banyak gambar untuk dijalankan secara lokal (VirtualBox). Departemen QA. akan mendapatkan kluster virtual (XEN atau Hyper-V). Jika saya perlu menyediakan modul server tambahan, rutekan ulang koneksi basis data baru atau hanya ingin memperbarui semua yang disediakan oleh manajer paket ... bagaimana mungkin saya bisa melakukannya tanpa dipaksa untuk masuk ke setiap sistem dan / atau minta rekan saya untuk mengunduh dan menjalankan beberapa skrip fixture?

Saya percaya ada banyak solusi. Yah, entah kenapa aku terlalu bodoh untuk memasukkan kata kunci yang benar ke dalam mesin pencari ... Atau bukankah masalah ini sepele kedengarannya?

Untuk catatan:

  • Hampir semua sistem menjalankan Debian GNU / Linux 6.x "squeeze"
  • Tidak ada pengembang yang dipaksa untuk menggunakan OS tertentu di workstation-nya
  • Anggaran terbatas, tentu saja, tetapi tidak terlalu kecil untuk membeli perangkat lunak berpemilik
  • Solusi yang akan melibatkan penyedia kami tersebut lebih disukai
mjhennig
sumber

Jawaban:

15

Itu tergantung apa yang sebenarnya Anda butuhkan dan apa yang Anda cari. Tetapi secara umum ada beberapa solusi untuk " manajemen konfigurasi seperti:

  1. wayang
  2. koki
  3. cfengine
  4. mungkin
  5. garam

dll. Saya pribadi akan merekomendasikan boneka karena memiliki komunitas besar dan banyak resep eksternal yang disediakan. Ini memungkinkan Anda untuk mengkonfigurasi dan mengelola sistem secara otomatis. Jika Anda menggabungkan ini dengan repositori sendiri dan pembaruan otomatis melalui mis. unattended-upgradesAnda dapat memperbarui sistem secara otomatis.

Solusi lain adalah dengan menyediakan paket Anda sendiri seperti company-basedll. Yang secara otomatis tergantung pada perangkat lunak yang diperlukan dan dapat mengkonfigurasi sistem Anda secara otomatis.

Anda juga harus melihat penyebaran otomatis (barebone dan tervirtualisasi). Jika Anda menggabungkan ini dengan manajemen konfigurasi atau repositori Anda sendiri, Anda dapat dengan mudah mengotomatisasi dan menginstal ulang sistem Anda. Jika Anda ingin memulai dengan instalasi otomatis, lihat theforman yang mendukung libvirt serta instalasi tanpa tulang dan memiliki dukungan boneka terintegrasi. Jika Anda ingin melakukannya sendiri, Anda dapat melihat kickstart (redhat et. Al.) Atau "preseeding" untuk secara otomatis mengkonfigurasi sistem Anda. Untuk Debian Anda juga dapat menggunakan sesuatu seperti debootstrap atau pembungkus bernama grml-debootstrap yang mendukung gambar tervirtualisasi.

Untuk membantu menyediakan gambar-gambar VirtualBox untuk pengembang Anda melihat gelandangan itu memungkinkan Anda untuk mengotomatisasi pembuatan sistem tervirtualisasi dengan skrip koki, boneka dan shell yang mendukung VirtualBox untuk menyesuaikan lingkungan virtual Anda.

Jika Anda ingin menggunakan solusi oleh penyedia Anda yang ada, Anda harus bertanya kepada mereka bagaimana mereka mengelola sistem Anda, tetapi itu mungkin akan menjadi semacam manajemen konfigurasi. Dimungkinkan untuk menjalankan agen mereka di sistem Anda jika Anda dapat mengakses server konfigurasi.

Untuk google kata kunci melihat ke dalam devops, configuration management, it automationdan server orchestration.

Singkatnya mengotomatiskan sebanyak mungkin dan bahkan tidak berpikir untuk melakukan hal-hal manual.

Ulrich Dangel
sumber
1
Terima kasih! Itu banyak hal untuk dibaca, tetapi terlihat cukup menjanjikan.
mjhennig
@ mjhennig saya baru saja menambahkan beberapa informasi lagi juga. penyebaran. Ada banyak sumber daya yang tersedia tetapi yang paling penting Anda tidak harus benar-benar melakukan sendiri melalui ssh / shell yang didistribusikan tetapi memiliki beberapa jenis sistem untuk itu.
Ulrich Dangel
2
Tidak ada yang salah dengan melakukan hal-hal sendiri, terutama jika alat yang tersedia tidak sesuai dengan tujuannya. Sistem seperti Wayang sebagian besar merupakan alat administrasi sistem, bukan manajemen konfigurasi, per se. Sebagian besar sistem yang saya gunakan bahkan tidak dapat diakses dari server pusat, tetapi dari laptop pengguna di atas (dari semua hal) vpn - telah mencoba mengubahnya selama tiga tahun. Departemen TI kami dibagi berdasarkan wilayah karena setiap wilayah tidak dapat mengakses yang lain dengan benar. Naskah buatan sendiri diperlukan dalam beberapa situasi. Di situlah inovasi dimulai.
Arcege
3
@Arcege saya baru saja memutakhirkan komentar Anda, skrip diperlukan dan Anda tidak perlu mengubah seluruh infrastruktur Anda sekaligus. Bagian terpenting adalah mengotomatisasi hal-hal dan membuatnya dapat diulang. Tetapi sifat deskriptif dari boneka dan koki memiliki beberapa aspek unik, misalnya Anda dapat menguji & memverifikasi kelas boneka dengan cucumber-puppet. Tentu saja Anda dapat mengembangkan / menumbuhkan kerangka kerja Anda sendiri menggunakan kembali komponen yang ada tetapi terdengar OP tidak ada di tempat saat ini dan jika Anda mulai dari awal saya pikir yang terbaik adalah menggunakan kerangka kerja yang ada.
Ulrich Dangel
Ya, saya setuju dengan operasi otomatis / berulang. Saya memiliki sejumlah script rumah-otomatis atau tombol push untuk antarmuka antara sistem yang ada seperti Jenkins / Oc4j dan integrasi Subversion / Bugzilla. Saya hanya tidak setuju (sangat) dengan komentar Anda "Anda seharusnya tidak benar-benar melakukan hal-hal sendiri". Kadang-kadang kerangka kerja yang ada tidak berlaku, seperti dalam situasi saya saya jelaskan.
Arcege
3

Ulrich sudah memberikan jawaban terkait penyebaran perangkat lunak dan pengaturan server otomatis.

Prinsip di balik ini adalah

  • Tentukan seperti apa tampilan server Anda - ini termasuk perangkat lunak umum yang diinstal secara default, skema partisi dan tata letak sistem file
  • Server produksi, pementasan, pengujian, dan pengembangan tidak boleh berbeda mengenai standar dasar ini (jika tidak, Anda akan mengalami masalah di kemudian hari - seperti yang Anda lakukan)
  • Gunakan manajemen perubahan yang tepat untuk mendokumentasikan SEMUA perubahan yang Anda lakukan (termasuk perubahan satu baris kecil dalam konfigurasi apa pun)
  • Anda selalu berubah pertama-tama dalam pengujian, kemudian dalam pengembangan, lalu dalam pementasan dan terakhir dalam produksi

Anda meminta alat praktis untuk mengelola massa server - favorit pribadi saya adalah cluster-ssh ( cssh). Ketik sekali dan lakukan perubahan pada banyak server secara bersamaan.

Jika Anda menemukan masalah dan memiliki perbaikan untuk itu yang menghilangkan masalah:

  1. Terapkan perbaikan untuk Test / Dev / Staging / Prod (lihat di atas) jika itu benar-benar berfungsi
  2. Terapkan perbaikan ke template virtual Anda sehingga klon-VM masa depan tidak akan memiliki bug itu
  3. Terapkan perbaikan untuk proses instalasi fisik Anda (kickstart / autoyast / apa pun)
  4. Terapkan perbaikan ke SEMUA server

Jika Anda menghadapi banyak server untuk memperbaikinya, ini adalah proses yang harus didokumentasikan dengan baik dan pada akhirnya tim yang berbeda harus memeriksa apakah perbaikan telah diterapkan sepenuhnya.

Kami menggunakan Mantis (open source, PHP) untuk tujuan itu.

Nils
sumber
2

Saya mengelola sekitar 30 produk dan beberapa ratus server di berbagai negara. Saya manajer konfigurasi perangkat lunak, jadi saya tidak memiliki akses root (berdasarkan desain), jangan menyentuh database atau server mereka (sekali lagi, berdasarkan desain) dan harus melompat banyak rintangan karena keamanan perusahaan. Tetapi saya mengelola konfigurasi dalam pengujian, pementasan dan produksi, termasuk tautan dan perubahan basis data. Saya memiliki sejumlah skrip yang keluar ke server menggunakan kombinasi ssh, pythondan skrip shell.

Hal-hal utama untuk dipikirkan adalah:

  1. Jenis interaksi apa yang akan Anda miliki dengan server Anda? Cukup unggah file? Menjalankan program command-line? Menjalankan klien X jarak jauh?
  2. Tingkat keamanan apa yang diperlukan untuk mengakses server ini? Firewall, jaringan aman, vpn? Apakah sshcukup dan dari lokasi aman terpusat?
  3. Berapa banyak yang dapat diotomatisasi pada setiap server? Bisakah Anda menginstal program di setiap server dan menjalankannya, atau Anda perlu melakukan streaming program melalui sesuatu seperti sshmenjalankannya dari jarak jauh? Bisakah Anda skrip dengan expectatau hanya doa baris perintah?

VirtualBox memberikan banyak alat baris perintah yang dapat Anda kelola melalui adil sshatau sistem seperti yang puppetdisebutkan Ulrich.

Arcege
sumber
2
Hanya sebuah saran kecil. virtualbox, lihat di vagrantup.com itu dapat menyederhanakan dan mengotomatisasi pembuatan gambar virtual.
Ulrich Dangel
Sayangnya, bahkan mendapatkan akses jaringan sederhana antara lingkungan uji jarak jauh hampir mustahil. Menyiapkan lahan virtualbox akan lebih sulit. Saya mengalami masalah hanya meminta IT untuk memperbarui perangkat lunak standar dengan apa yang sudah ketinggalan zaman selama lebih dari setahun karena itu bukan bagian dari repositori 'standar RedHat'.
Arcege
Apa yang membantu dalam pengalaman saya tentang perangkat lunak usang adalah menunjukkan bahwa perangkat lunak itu EOL atau ada masalah keamanan. Pengaturan jaringan / koneksi seringkali jauh lebih sulit untuk dicapai, mungkin mencoba untuk menekankan bagaimana menghubungkan berbagai lingkungan pengujian membantu menghemat uang, menyederhanakan proses, menghemat waktu QA atau membuat lingkungan pengujian lebih realistis. Ini juga bisa membantu jika Anda membawa orang-orang dari cabang yang berbeda.
Ulrich Dangel