Πώς να εκτελέσετε εντολές σε πολλούς κεντρικούς υπολογιστές Linux χρησιμοποιώντας PSSH

Είμαι σίγουρος ότι έχετε ακούσει ότι όλα αυτά τα ωραία παιδιά παίζουν με αυτοματοποίηση ενορχήστρωσης αυτές τις μέρες. Αλλά ξέρεις γιατί; Κατ 'αρχάς, οι πόροι που καταναλώνονται από τους φόρτους εργασίας των σύγχρονων μικροϋπηρεσιών γίνονται πολύ πιο περίπλοκοι και χρησιμοποιούνται σε πολύ περισσότερες περιπτώσεις από ποτέ. Και δεύτερον, όλο και περισσότεροι από αυτούς τους πόρους είναι εικονικοί παρά φυσικοί - έτσι πολλοί από αυτούς θα υπάρχουν μόνο για λεπτά ή ακόμα και δευτερόλεπτα.

Όλα αυτά σημαίνουν ότι ακόμα κι αν θέλετε να περιηγηθείτε σε έναν από τους πολλούς διακομιστές σας, δεν θα είχε νόημα. Στην πραγματικότητα, στις περισσότερες περιπτώσεις, δεν θα ήταν καν δυνατό. Αντ 'αυτού, θα εκτελείτε πολλά έξυπνα σενάρια. Και τα εργαλεία που χρησιμοποιείτε για την εκτέλεση αυτών των ειδών σεναρίων ονομάζονται γενικά ενορχηστρωτές.

Είμαι βέβαιος ότι έχετε συναντήσει τουλάχιστον ένα ή δύο μέλη του συλλόγου ενορχήστρωσης. Εκτός από το Ansible, υπάρχουν Terraform, Chef, Puppet και άλλα. Υπάρχουν όμως και εργαλεία χαμηλότερου επιπέδου που λειτουργούν ως πρόσθετα σε βασικά εργαλεία Linux όπως το SSH. Παρόλο που, βλέποντας πώς θα τρέχει εγγενώς στα Windows και, φυσικά, σε macOS, δεν είμαι σίγουρος ότι είναι απολύτως σωστό να ονομάζω SSH ένα εργαλείο "Linux".

Ένα από αυτά τα πρόσθετα SSH είναι ένα σύνολο εργαλείων που ονομάζεται pssh - που σημαίνει Parallel SSH. Αυτό θα μάθουμε σε αυτό το άρθρο - το οποίο αποσπάται από το νέο μάθημα Pluralsight, τη Βελτιστοποίηση συστήματος Linux.

Προς το παρόν, ωστόσο, θα σας πω λίγα πράγματα για το εργαστήριο που χρησιμοποιώ, ώστε να μπορείτε να το αναπαραγάγετε πιο εύκολα και να το ακολουθήσετε στο σπίτι. Τρέχω τρία κοντέινερ Ubuntu LXD. Η βάση για όλες τις λειτουργίες μας θα είναι αυτή με διεύθυνση IP της 10.0.3.140, ενώ οι δύο κόμβοι κεντρικού υπολογιστή που θα παρέχουμε από απόσταση θα χρησιμοποιούν 10.0.3.93 και 10.0.3.43.

Όλα όσα θα κάνουμε υποθέτουν ότι έχουμε πρόσβαση SSH χωρίς κωδικό πρόσβασης από το βασικό μου κοντέινερ σε καθένα από τους δύο κόμβους. Εάν δεν είστε βέβαιοι πώς να το κάνετε αυτό, μπορείτε να δείτε τη μονάδα SSH του πρωτοκόλλου μου Deep Deep Dive: SSH και Telnet στο Pluralsight. Εάν βιάζεστε, αυτό το σεμινάριο Red Hat θα σας οδηγήσει στο ίδιο μέρος.

Εγκατάσταση pssh στο Ubuntu είναι απλή και γρήγορη: sudo apt install pssh. Δεν γίνεται δυσκολότερο στο CentOS.

Δημιούργησα ένα απλό αρχείο αποθέματος κεντρικού υπολογιστή που ονομάζεται sshhosts.txt και δεν περιέχει τίποτα περισσότερο από τις διευθύνσεις IP των δύο κόμβων μου:

$ less sshhosts.txt 10.0.3.93 10.0.3.43 

Τώρα θα εκτελέσω την εντολή pssh parallel-ssh για να εκτελέσω μία μόνο εντολή στους κεντρικούς υπολογιστές μου.

$ parallel-ssh -i -h sshhosts.txt df -ht ext4 

- Λέω στο πρόγραμμα να λειτουργεί ως διαδραστικό - αλλιώς δεν θα εμφανιστεί έξοδος εντολών. -h δείχνει το αρχείο hosts που ονόμασα sshhosts.txt. Και η ίδια η εντολή θα είναι το παλιό βοηθητικό πρόγραμμα Unix df. Αυτό θα επιστρέψει μια λίστα με μονάδες δίσκου που είναι συνδεδεμένες στο σύστημα μαζί με τα σημεία προσάρτησής τους και τις πληροφορίες χρήσης. Το -h εδώ θα εμφανίσει χώρο στο δίσκο σε αναγνώσιμες από τον άνθρωπο μονάδες και το t θα περιορίσει την πρόσβαση μόνο σε μονάδες δίσκου με μορφή ext4.

Γιατί με ενδιαφέρει αυτή η επιχείρηση ext4; Επειδή το Ubuntu χρησιμοποιεί το πρόγραμμα διαχείρισης πακέτων snap και κάθε snap δημιουργεί τη δική του εικονική συσκευή. Και λοιπόν? Λοιπόν, δεν θέλω να χρειαστεί να χτενίσω μια δωδεκάδα εικονικών συσκευών που αναφέρουν 0 ελεύθερο χώρο μόνο για να φτάσω στους πραγματικούς δίσκους που αναφέρουν πραγματική χρήση.

$ parallel-ssh -i -h sshhosts.txt df -ht ext4 [1] 22:02:00 [SUCCESS] 10.0.3.43 Filesystem Size Used Avail Use% Mounted on /dev/sda2 457G 131G 304G 30% / [2] 22:02:00 [SUCCESS] 10.0.3.93 Filesystem Size Used Avail Use% Mounted on /dev/sda2 457G 131G 304G 30% / 

Και εκεί πας! Πληροφορίες πλήρους χώρου στο δίσκο και για τους δύο κόμβους μου. Είμαι βέβαιος ότι παρατηρήσατε ότι οι πληροφορίες είναι ίδιες. Αυτό συμβαίνει επειδή αυτά τα δύο δοχεία λειτουργούν στο σταθμό εργασίας μου, από όσο γνωρίζουν, και οι δύο έχουν πλήρη πρόσβαση στη δική μου μονάδα δίσκου.

Για το επόμενο κόλπο μου, θα συλλέξω τα αρχεία / etc / group από καθένα από τους κόμβους μου. Αυτό είναι το είδος της λειτουργίας που θα μπορούσε να είναι χρήσιμο για την γρήγορη παρακολούθηση της κατάστασης ασφαλείας των κόμβων σας. Θα μπορούσατε να προσθέσετε ένα σενάριο που αναλύει τα εισερχόμενα δεδομένα και να σας ειδοποιεί εάν υπάρχουν ανωμαλίες.

Πριν ξεκινήσω, θα δημιουργήσω έναν κατάλογο που ονομάζεται τοπικά αρχεία κεντρικού υπολογιστή. Τότε θα χρησιμοποιήσω την parallel-slurpεντολή - του οποίου το όνομα περιγράφει υπέροχα τη λειτουργία της. Και πάλι, -h δείχνει το αρχείο host. Τα -Lσετ ο κατάλογος υποδοχής, αρχεία ως θέση-στόχο για την εγγραφή των δεδομένων που πρόκειται να δημιουργήσει, /etc/groupείναι το απομακρυσμένο αρχείο που θέλουμε να slurp επάνω, και groupείναι το όνομα που θέλετε να αντιστοιχίσετε τα δεδομένα σε τοπικό επίπεδο.

mkdir host-files parallel-slurp -h sshhosts.txt -L host-files/ /etc/group group 

Όταν ολοκληρωθεί, ο κατάλογος κεντρικών αρχείων θα περιέχει υποκαταλόγους που θα ονομάζονται από τη διεύθυνση IP κάθε κόμβου σας. Όπως μπορείτε να δείτε, υπάρχει ένα αρχείο που ονομάζεται "ομάδα" που περιέχει τα δεδομένα / etc / group από κάθε κόμβο.

$ tree host-files/ host-files/ ├── 10.0.3.43 │   └── group └── 10.0.3.93 └── group 

Το pssh έρχεται με άλλες λιχουδιές; Ναι. Και το τρέξιμο aproposσας δίνει ολόκληρη τη λίστα.

$ apropos parallel parallel-nuke (1) - parallel process kill program parallel-rsync (1) - parallel process kill program parallel-scp (1) - parallel process kill program parallel-slurp (1) - parallel process kill program parallel-ssh (1) - parallel ssh program 

Αυτό το άρθρο βασίζεται σε περιεχόμενο στο μάθημα Pluralsight, "Βελτιστοποίηση συστήματος Linux". Υπάρχει πολύ περισσότερη θετική διαχείριση με τη μορφή βιβλίων, μαθημάτων και άρθρων που διατίθενται στο bootstrap-it.com.