Eksekusi perintah bersamaan PDSH pada beberapa server Linux

Pada artikel ini saya akan memberi tahu Anda cara mengelola armada besar server Linux dari konsol satu server, mengeksekusi perintah dari jauh di server lain dan mendapatkan hasilnya, memeriksa status server dan melakukan pekerjaan serupa secara paralel menggunakan utilitas pdsh. Kami akan mengerti bagaimana cara menginstalnya, mengkonfigurasinya dan menjalankan perintah pada beberapa server secara paralel.

PDSH (shell terdistribusi paralel) - utilitas kinerja tinggi untuk menjalankan perintah secara paralel pada sejumlah besar server Linux melalui ssh. Secara default, pdsh memungkinkan Anda untuk mendukung 32 koneksi bersamaan ke server yang dikelola. Ada beberapa modul ekstensi yang berguna untuk pdsh, yang juga akan kita bahas dalam artikel ini..

Dengan pdsh Anda dapat:

  • Perbarui perangkat lunak di server;
  • Instal modul atau utilitas yang diperlukan;
  • Jalankan beberapa skrip bash;
  • Periksa pembaruan dan lainnya.

Konten:

  • Instal PDSH dan modul tambahan
  • Mengkonfigurasi server manajemen pdsh dan server Linux yang dikelola.
  • Contoh menggunakan pdsh untuk menjalankan perintah di beberapa server

Instal PDSH dan modul tambahan

Pertama, Anda perlu menginstal utilitas pdsh dan modul yang diperlukan. Pada CentOS, instalasi dilakukan melalui pengelola paket yum:

yum instal epel-release -y - hubungkan repositori Epel

yum instal pdsh pdsh-mod-gender -y - pasang pdsh dan modul jenis kelamin untuk itu.

Secara umum, tidak ada lagi yang diperlukan untuk mengkonfigurasi pdsh. Kami memasang pdsh sendiri, dan juga memasang modul tambahan pdsh-mod-gender, yang akan saya bicarakan nanti, ketika kita beralih ke menjalankan perintah di server jauh.

Mengkonfigurasi server manajemen pdsh dan server Linux yang dikelola.

Agar tidak memasukkan kata sandi untuk terhubung ke server jarak jauh setiap kali, kami akan membuat kunci ssh pada server manajemen dengan pdsh diinstal dan menambahkannya ke server yang dikelola.

ssh-keygen -q

Masukkan file untuk menyimpan kunci (/root/.ssh/id_rsa): Masukkan frasa sandi (kosong tanpa frasa sandi): Masukkan frasa sandi yang sama lagi: 

Menjalankan perintah ssh-keygen -q untuk semua pertanyaan cukup tekan Enter. Kuncinya sudah siap, sekarang tinggal menyalinnya ke server Linux yang dikelola. Sebagai contoh, saya mengambil 2 server dengan Linux CentOS.

Pada server yang dikelola, buat direktori untuk kunci ssh (jika tidak ada):

mkdir /root/.ssh/

Salin kunci ke direktori ini, saya melakukannya melalui gema:

echo -e "kunci Anda dari file /root/.ssh/id_rsa.pub" >> /root/.ssh/authorized_keys

Kuncinya telah ditambahkan, Anda perlu memeriksa apakah koneksi dari server pdsh lewat:

ssh server1

Tidak apa-apa.

Contoh menggunakan pdsh untuk menjalankan perintah di beberapa server

Karena sejumlah server mungkin berbeda dalam hostname, saya membuat sendiri skema konfigurasi PDSH. Dalam file host di server manajemen dengan pdsh, saya menambahkan setiap server yang dikelola dan memberikannya nama yang sesuai untuk saya, misalnya:

cat / etc / hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 :: 1 localhost localhost.localdomain localhost6 localhost6.localdomain6 *. *. *. * Server1 *. *. *. *. * Server2 

Di mana alih-alih tanda bintang Anda perlu menentukan server tujuan IP.

Sehingga pdsh dapat terhubung ke nama server yang diberikan, dalam file / root / ssh / known_hosts ke kunci dari setiap server yang dikelola, dipisahkan oleh koma, tambahkan nama server yang diinginkan, yang kami tentukan di / etc / hosts. Sebagai contoh:

Setelah itu, Anda akan dapat terhubung menggunakan nama host yang Anda pilih untuk kenyamanan, akan berguna bagi kami jika kami memiliki 100500 server, yang diberi nama berbeda.

Untuk menjalankan perintah pada server jauh melalui pdsh, konstruksi berikut digunakan:

pdsh -w server1 'perintah' - Saya selalu menyarankan Anda untuk mengutip perintah yang sedang berjalan, karena jika Anda menggunakan karakter khusus, bash di server dengan pdsh akan menjalankan perintah setelah karakter khusus secara lokal.

Misalnya, untuk mengetahui waktu pada server jauh, Anda dapat menjalankan perintah untuk masing-masing server.

pdsh -w server1 'date'

server1: Sabtu 14 September 12:27:16 +06 2019

pdsh -w server2 'date'

server2: Sabtu 14 September 12:27:21 +06 2019

Atau segera jalankan satu perintah untuk daftar server:

pdsh -w server1, server2 'date'

server1: Sabtu 14 September 12:36:20 +06 2019 server2: Sabtu 14 September 12:36:20 +06 2019

Jika Anda perlu mengeksekusi perintah pada 10 server, Anda mendapatkan perintah yang agak panjang yang mencantumkan semua server, yang tidak nyaman. Karena kami menetapkan nama host kami sendiri untuk server, dan pdsh memahami hal ini, saat memanggil pdsh, Anda dapat menentukan server tertentu atau serangkaian server dalam tanda kurung:

pdsh -w server [1-2] 'date' - kisaran server dalam kasus saya adalah 2 server. Bisa dari 1 hingga 20, akan terlihat seperti ini: pdsh -w server [1-20] 'date'

pdsh -w server [1,2] 'date' - server spesifik 1 dan 2, Anda dapat memilih misalnya 3-4 server dan perintahnya akan terlihat seperti ini: pdsh -w server [1,2,7,9] 'date'

Untuk pemformatan yang lebih nyaman, output hasil perintah dari server jauh dapat digunakan dengan konstruksi:

pdsh -w server [1-20] 'uptime' | semacam -n

Pertimbangkan modul yang dipasang sebelumnya pdsh-mod-gendors. Untuk menggunakannya, buat file itu sendiri:

sentuh / etc / gender

Mengapa itu dibutuhkan? Jenis kelamin adalah file sintaksis asli untuk menjelaskan peran pdsh. Bagaimana itu bisa diterapkan dalam pekerjaan? Sebagai contoh:

  1. Anda memiliki 10 server dengan Ubuntu. Kami akan menggabungkan mereka menjadi satu grup Ubuntu, biarkan nama host mereka menjadi ubuntu1-10.
    Dalam file / etc / gender kita menulis baris berikut:

    ubuntu [1-10] ubuntu
  2. Anda memiliki 10 server dengan Centos dan nama host serupa - centos1-10:
    centos [1-10] centos
  3. Ada juga sekelompok server untuk pengembang - web1-10:
    web [1-10] web
  4. Jika ada sekelompok server dengan nama yang berbeda, misalnya sys [1-5] dan adm [4-8]:
    sys [1-5] adm kami [4-8] our 

Yaitu pada file / etc / genders, Anda dapat membuat berbagai kelompok server Linux. Agar pdsh membaca data dari file gender saat startup, Anda harus menentukan alih-alih switch -g.

Dalam kasus saya, masih ada dua server, tetapi itu tidak mengubah apa pun:

[root @ server dll] # pdsh -g centos 'date'

server1: Sab 14 Sep 12:49:59 +06 2019 server2: Sab 14 Sep 12:50:00 +06 2019 

Ini jauh lebih nyaman dan perintah dijalankan di semua server dalam grup.
Secara default, pdsh memungkinkan Anda menjalankan hingga 32 sesi bersamaan di berbagai server. Jumlah perintah yang berjalan secara bersamaan ditunjukkan menggunakan tombol -f. Misalnya kapan -f 1 sampai perintah dieksekusi di server pertama, itu tidak akan pergi ke yang kedua.

Menggunakan tim kami sebagai contoh, terlihat seperti ini:

pdsh -g ubuntu 'date' -f 1

Anda juga dapat menerapkan kunci -t dan -kamu:

  • -t - atur batas waktu koneksi dalam detik;
  • -kamu - mengatur batas waktu untuk eksekusi perintah jarak jauh.

Dan sebagai kesimpulan, saya ingin memberikan beberapa contoh bagaimana Anda dapat menggunakan pdsh ketika mengelola grup server Linux.

Perintah berikut pada semua server yang ditentukan akan pergi ke direktori yang ditentukan oleh kami dan mengunduh gambar iso Centos 7 ke dalamnya:

pdsh -w server [1,2] 'cd / root && wget http://mirror.yandex.ru/centos/7.7.1908/isos/x86_64/CentOS-7-x86_64-Minimal-1908.iso'

Ingin dengan cepat memeriksa repositori mana yang diinstal pada server yang dikelola?

pdsh -w server [1,2] 'yum repolist'

server2: Loaded plugins: tercepatmirror server2: Memuat kecepatan cermin dari server2 cache yang di-cache: * basis: repo.centos.ru server2: * ekstra: repo.centos.ru server2: * pembaruan: repo.centos.ru server2: repo id nama repo server status server2: base / 7 / x86_64 CentOS-7 - Base 10.019 server2: ekstra / 7 / x86_64 CentOS-7 - Ekstra 435 server2: pembaruan / 7 / x86_64 CentOS-7 - Pembaruan 2.500 server2: repolist: 12.954 server1: plugin yang dimuat: tercepatmirror server1: Memuat kecepatan cermin dari cache hostfile server1: * base: repo.centos.ru server1: * ekstra: repo.centos.ru server1: * pembaruan: repo.centos.ru server1: repo id repo name status server1: base / 7 / x86_64 CentOS-7 - Base 10.019 server1: ekstra / 7 / x86_64 CentOS-7 - Ekstra 435 server1: pembaruan / 7 / x86_64 CentOS-7 - Pembaruan 2.500 server1: repolist: 12.954

pdsh -w server [1,2] 'yum instal httpd -y' - menginstal apache di kedua server

Dan periksa apakah sudah benar-benar diinstal:

Artinya, Anda dapat menjalankan perintah apa pun sekaligus di beberapa server jarak jauh. Jika Anda ingin menjalankan beberapa jenis skrip bash, saya akan menyarankan Anda untuk menambahkannya ke beberapa file dan menyalinnya ke server yang diperlukan, dan kemudian meluncurkannya.

Itu saja, mungkin, saya harap informasi ini akan berguna bagi Anda dan akan memudahkan tugas rutin mengelola beberapa server Linux.