Το προφίλ μας στο Google Plus
0

Γρήγορη ανάπτυξη Squid για caching πακέτων Linux

Κατά τη δημιουργία και διαχείριση εφήμερων εικονικών μηχανών ή ακόμη κι ολόκληρων εφήμερων clusters, συχνά παρατηρούνται μεγάλη σπατάλη bandwidth και περιττές καθυστερήσεις. Όταν, για παράδειγμα, έχουμε οκτώ Linux VMs με την ίδια διανομή και παρόμοιο configuration, γιατί όταν αναβαθμίζουμε να κατέβουν από το Internet τα ίδια πακέτα οκτώ φορές;

Η παρουσία ενός κατάλληλα ρυθμισμένου proxy “μπροστά” από τα VMs ή ακόμη και μπροστά από physical hosts, αποτελεί μια καλή λύση στο πρόβλημα που μόλις περιγράψαμε. Προσφάτως συντάξαμε ένα απλό Ansible playbook για την αυτόματη εγκατάσταση και ρύθμιση του Squid, ώστε σε κάθε τοπικό δίκτυο όπου χρειαζόμαστε proxy server για το caching πακέτων να τον έχουμε σε χρόνο μηδέν. Φτιάξαμε επίσης κι ένα Vagrant box με Debian και γράψαμε το αντίστοιχο Vagrantfile, για όλους όσους όσοι μπροστά από εφήμερα (ή όχι) clusters χρειάζονται σε ελάχιστο χρόνο ένα VM με το Squid προρυθμισμένο.

Για τη συνέχεια θα δουλέψετε από ένα μηχάνημα με Linux ή Mac OS X, με τα Git και Ansible εγκατεστημένα. Πέρα από τη ρύθμιση ενός προϋπάρχοντος (εικονικού ή φυσικού) host με Linux, πιθανώς να ενδιαφέρεστε και για την αυτόματη δημιουργία VM με Squid proxy ξεκινώντας από το μηδέν. Σ’ αυτή την περίπτωση, στον υπολογιστή σας θα πρέπει να έχετε εγκατεστημένα τα VirtualBox και Vagrant.

Ανοίξτε ένα τερματικό, μεταβείτε σε έναν βολικό κατάλογο και κλωνοποιήστε το Git repository που ετοιμάσαμε για τις ανάγκες του παρόντος άρθρου.

cd github
git clone https://github.com/colder-is-better/package-proxy.git
cd package-proxy

Αναλόγως αν θέλετε να τροποποιήσετε κάποιο (εικονικό ή φυσικό) σύστημα που ήδη έχετε ή να δημιουργήσετε ένα VM από το μηδέν, το μόνο που θα χρειαστεί να κάνετε είναι να θέσετε κατάλληλες τιμές σε συγκεκριμένες παραμέτρους που ορίζονται σε ένα-δύο αρχεία YAML και μετά να πληκτρολογήσετε μια απλή εντολή. Προφανώς, λοιπόν, συζητάμε για δύο περιπτώσεις.

Περίπτωση 1: Χρήση Ansible για ρύθμιση φυσικού host ή έτοιμου VM
Ο μόνος περιορισμός που έχουμε εδώ αφορά στο λειτουργικό σύστημα του μηχανήματος-στόχου, το οποίο πρέπει να είναι σχετικά σύγχρονο και συγκεκριμένα επιτρέπεται να είναι το Debian, το Ubuntu ή οποιαδήποτε άλλη Debian-based διανομή. Το Raspbian για το Raspberry Pi, π.χ., μας κάνει μια χαρά.

Τώρα, με τον text editor της προτίμησής σας ανοίξτε το αρχείο provision_vars.yml και τροποποιήστε καταλλήλως τις ακόλουθες παραμέτρους.

  • squid_conf_full_path: Αυτή είναι η πλήρης διαδρομή προς το αρχείο ρυθμίσεων του Squid, το squid.conf. Σε εγκαταστάσεις Debian και Ubuntu, η εν λόγω διαδρομή είναι η /etc/squid/squid.conf. Αν ετοιμαζόσαστε να ρυθμίσετε το Squid σε έναν host με κάποιο εκ των δύο προαναφερθέντων διανομών Linux, μην πειράξετε κάτι. Αν πάλι το μηχάνημα-στόχος είναι ένα Raspberry Pi με Raspbian, τότε η πλήρης διαδρομή που θέλετε είναι η /etc/squid3/squid.conf. Σημειώστε πως, σε κάθε περίπτωση, η έκδοση του Squid που πρόκειται να εγκατασταθεί είναι από τη σειρά 3.
  • local_network: Εδώ ορίζεται το τοπικό δίκτυο, σε μορφή CIDR, εντός του οποίου θα λειτουργεί το Squid. Τροποποιήστε την προκαθορισμένη τιμή ώστε να ταιριάζει (καλύτερα) με το τοπικό σας δίκτυο.
  • object_size_upper_limit: Καθορισμός άνω ορίου μεγέθους, σε megabytes, για τα αντικείμενα που το Squid θα αποθηκεύει στην cache, στον δίσκο. Η προκαθορισμένη τιμή είναι ό,τι πρέπει για τον σκοπό μας, που είναι το caching Linux packages.
  • cache_size_upper_limit: Άνω όριο, σε megabytes, του συνολικού χώρου που επιτρέπεται να χρησιμοποιεί το Squid για την αποθήκευση αντικειμένων. Η προκαθορισμένη τιμή είναι 16GB και κρίνεται κατάλληλη για την πλειονότητα των περιπτώσεων.
  • cache_dir_path: Η πλήρης διαδρομή προς τον κατάλογο κάτω από τον οποίο αποθηκεύει το Squid τα αρχεία που κατεβάζει από απομακρυσμένους servers. Στην περίπτωση του Raspberry Pi, ο εν λόγω κατάλογος προτείνεται να μην είναι στην SD card. Αν έχετε τη δυνατότητα, ορίστε μια διαδρομή προς έναν κατάλογο σε εξωτερικό USD stick ή ακόμη καλύτερα σε προσαρτημένο USB disk.
  • use_local_squid: Αν θέλετε ο ίδιος ο proxy host να χρησιμοποιεί το Squid για την αποθήκευση πακέτων που αφορούν σε δικές του εγκαταστάσεις κι αναβαθμίσεις, αφήστε την προκαθορισμένη τιμή (true). Διαφορετικά, αλλάξτε σε false. Η συγκεκριμένη παράμετρος έχει νόημα να ‘ναι true όταν υπάρχουν πελάτες του proxy με ακριβώς το ίδιο λειτουργικό –σε επίπεδα έκδοσης κι αρχιτεκτονικής– μ’ αυτόν.

Πριν ζητήσετε την αυτόματη εγκατάσταση και ρύθμιση του Squid στον host της επιλογής σας, ανοίξτε το αρχείο hosts κι αντικαταστήστε αυτό το 1.2.3.4 είτε με τη διεύθυνση IP είτε με το FQDN του μηχανήματος-στόχου. Επίσης, αλλάξτε το userson με το username του λογαριασμού χρήστη στον οποίο θα συνδεθεί το Ansible. Ο εν λόγω απομακρυσμένος χρήστης πρέπει να είναι ο root είτε κάποιος με δικαιώματα passwordless sudo.

Για το provisioning του proxy host, απλά πληκτρολογήστε:

ansible-playbook -b -i hosts provision.yml

Αργότερα, όταν θα θέλετε να υποδείξετε τον proxy σε έναν ή περισσότερους clients, έχετε υπόψη ότι το Squid ακούει για αιτήσεις πελατών στο port 3128/TCP. Έτσι, αν υποθέσουμε ότι το IP του proxy είναι το 192.168.10.254 και τώρα ετοιμαζόσαστε να ορίσετε proxy για τις συνδέσεις HTTP ενός πελάτη, το URL που θα του δώσετε θα είναι το http://192.168.10.254:3128.

Αυτοματοποιημένη εγκατάσταση και ρύθμιση του Squid σε απομακρυσμένο host, για το caching πακέτων Linux. Δουλεύουμε με το Ansible και στο μηχάνημα-στόχο έχουμε passwordless SSH access -- συγκεκριμένα στο λογαριασμό του χρήστη στον οποίο συνδέεται και το Ansible.

Αυτοματοποιημένη εγκατάσταση και ρύθμιση του Squid σε απομακρυσμένο host, για το caching πακέτων Linux. Δουλεύουμε με το Ansible και στο μηχάνημα-στόχο έχουμε passwordless SSH access — συγκεκριμένα στο λογαριασμό του χρήστη στον οποίο συνδέεται και το Ansible.

Περίπτωση 2: Χρήση Vagrant και Ansible για τοπικό VM με Squid

Η ιδέα τώρα είναι ότι θέλουμε τον proxy στο ίδιο φυσικό μηχάνημα όπου φτιάχνουμε, ξηλώνουμε και φτιάχνουμε ξανά μεμονωμένες εικονικές μηχανές ή και ολόκληρα clusters εικονικών μηχανών. Όπως και στην περίπτωση 1, έτσι και τώρα οφείλουμε να φροντίσουμε για τις παραμέτρους στο αρχείο provision_vars.yml. Επιπρόσθετα, ίσως χρειαστεί να πειράξουμε μία ή δύο παραμέτρους στο αρχείο machine_vars.yml. Τις παραθέτουμε εν συντομία.

  • ram_size: Το μέγεθος της μνήμης RAM, σε megabytes, της εικονικής μηχανής. Το προκαθορισμένο μέγεθος του ενός gigabyte (1024MB) κρίνεται επαρκές για το VM και μη-προβληματικό για τη μέση ποσότητας μνήμης ενός σύγχρονου τυπικού υπολογιστή. Βεβαίως, αν για τα πρότζεκτ σας χρειάζεται να είστε φειδωλοί με τη διαχείριση της μνήμης, δώστε στην εικονική μηχανή 512ΜΒ.
  • core_count: Το πληθος των εικονικών πυρήνων του VM. Δύο πυρήνες είναι μια χαρά, ένας πυρήνας επίσης.
  • fqdn: Το Fully Qualified Domain Name με το οποίο θα παρουσιάζεται στο (εικονικό) τοπικό δίκτυο το VM. Προφανώς, αναφορικά με τον καθορισμό του FQDN έχετε πλήρη ελευθερία.
  • ipaddr: Αυτή είναι η “εσωτερική” διεύθυνση IP που θα έχει το VM με το Squid. Από τη διεύθυνση αυτή θα είναι προσβάσιμο τόσο από τον φυσικό υπολογιστή, όσο και από τα VM-πελάτες.

Για την αυτόματη αρχικοποίηση μιας εικονικής μηχανής με Debian και το Squid προρυθμισμένο, απλά πληκτρολογήστε:

vagrant up

Για άλλη μια φορά, οι πελάτες του proxy χρησιμοποιούν διευθύνσεις της μορφής ipaddr:3128.

Πρώτο στάδιο της προετοιμασίας ενός εικονικού cluster, κατά το οποίο δημιουργούνται τέσσερις σχεδόν πανομοιότυπες μηχανές (node0, ..., node3), γίνονται κάποιες βασικές ρυθμίσεις καθώς κι ενημερώσεις πακέτων. Απουσία proxy, στο laptop των δοκιμών μας το στάδιο αυτό διήρκεσε περισσότερο από 45 λεπτά.

Πρώτο στάδιο της προετοιμασίας ενός εικονικού cluster, κατά το οποίο δημιουργούνται τέσσερις σχεδόν πανομοιότυπες μηχανές (node0, …, node3), γίνονται κάποιες βασικές ρυθμίσεις καθώς κι ενημερώσεις πακέτων. Απουσία proxy, στο laptop των δοκιμών μας το στάδιο αυτό διήρκεσε περισσότερο από 45 λεπτά.

Το ίδιο στάδιο προετοιμασίας, με μόνη διαφορά ότι τώρα χρησιμοποιήθηκε Squid proxy. Αυτή τη φορά η όλη διαδικασία ολοκληρώθηκε τέσσερις και πλέον φορές γρηγορότερα.

Το ίδιο στάδιο προετοιμασίας, με μόνη διαφορά ότι τώρα χρησιμοποιήθηκε Squid proxy. Αυτή τη φορά η όλη διαδικασία ολοκληρώθηκε τέσσερις και πλέον φορές γρηγορότερα.

Θέλετε να μάθετε περισσότερα για τα Vagrant και Ansible; Γράψτε μας σχετικά σε email στο talk2us AT deltahacker DOT gr κι αναλόγως του ενδιαφέροντος θα ετοιμάσουμε σχετικές σειρές άρθρων.

Leave a Reply

You must be logged in to post a comment.

Σύνδεση

Αρχείο δημοσιεύσεων