Ο **εικονικός διακομιστής Linux** (**Linux Virtual Server (LVS)**) είναι λογισμικό εξισορροπητή φορτίου, βασισμένο σε λειτουργικά συστήματα Linux.

Το LVS είναι ένα δωρεάν και ανοιχτού κώδικα έργο που ξεκίνησε από τον Wensong Zhang τον Μάιο του 1998, σύμφωνα με τις απαιτήσεις της GNU General Public License (GPL), έκδοση 2. Ο σκοπός του έργου αυτού είναι να δημιουργήσει έναν υψηλής απόδοσης και διαθεσιμότητας (High availability) server για Linux χρησιμοποιώντας τεχνολογία συμπλέγματος (clustering), ο οποίος παρέχει καλή επεκτασιμότητα, αξιοπιστία και λειτουργικότητα.

Επισκόπηση
----------

 LVS όπως χρησιμοποιείται από το Ίδρυμα Wikimedia το 2022.
Το κύριο έργο μιας LVS εργασίας είναι η ανάπτυξη ενός προηγμένου λογισμικού εξισορρόπησης φορτίων IP (IPVS), σε επίπεδο εφαρμογής (KTCPVS) και στοιχείων διαχείρισης συμπλέγματος.

* IPVS: ένα προηγμένο λογισμικό εξισορρόπησης φορτίων IP που εφαρμόζεται μέσα στον πυρήνα Linux. Ο κώδικας IP ενός εικονικού server συγχωνεύεται στις εκδόσεις 2.4.x και νεότερων εκδόσεων της κύριας γραμμής του πυρήνα Linux.
* KTCPVS: εφαρμόζει εξισορρόπηση φορτίου σε επίπεδο εφαρμογής εντός του πυρήνα Linux, από τον Φεβρουάριο του 2011 είναι ακόμα υπό ανάπτυξη.

Το LVS μπορεί να χρησιμοποιηθεί για τη δημιουργία επεκτάσιμων και γρήγορων (highly available) υπηρεσιών δικτύου, όπως υπηρεσίες ιστού, email, πολυμέσων και VoIP υπηρεσίες και για την ενσωμάτωση κλιμακούμενων υπηρεσιών δικτύου σε αξιόπιστες εφαρμογές ηλεκτρονικού εμπορίου ή ηλεκτρονικής διακυβέρνησης μεγάλης κλίμακας. Οι λύσεις που βασίζονται σε LVS έχουν ήδη χρησιμοποιηθεί σε πολλές εφαρμογές σε όλο τον κόσμο, συμπεριλαμβανομένης και της Wikipedia .

Τα στοιχεία LVS εξαρτώνται από το πλαίσιο Linux Netfilter και ο πηγαίος κώδικας του είναι διαθέσιμος στον υποκατάλογο αρχείων `net/netfilter/ipvs` εντός του πυρήνα Linux. Το LVS είναι ικανό να χειριστεί πρωτόκολλα UDP, TCP layer-4 καθώς και την παθητική σύνδεση (passive connection) FTP ελέγχοντας πακέτα layer-7. Επίσης παρέχει μια ιεραρχία από μετρητές στον κατάλογο `/proc`

Το πρόγραμμα βοηθητικών προγραμμάτων userland που χρησιμοποιείται για τη διαμόρφωση του LVS ονομάζεται ipvsadm, το οποίο απαιτεί τα δικαιώματα ενός superuser για να εκτελεστεί.

### Προγραμματιστές

Το LVS εφαρμόζει διάφορους προγραμματιστές εξισορρόπησης, που αναφέρονται παρακάτω με τα σχετικά αρχεία προέλευσης: 

* Round-robin ( `ip_vs_rr.c` )
* Σταθμισμένο round-robin ( `ip_vs_wrr.c` )
* Least-connection (`ip_vs_lc.c`)
* Ελάχιστα σταθμισμένη σύνδεση ( `ip_vs_wlc.c` )
* Locality-based least-connection (`ip_vs_lblc.c`)
* Locality-based least-connection with replication (`ip_vs_lblcr.c`)
* Κατακερματισμός προορισμού (`ip_vs_dh.c`)
* Κατακερματισμός πηγής(`ip_vs_sh.c`)
* Μικρότερη αναμενόμενη καθυστέρηση ( `ip_vs_sed.c` )
* Never queue ( `ip_vs_nq.c` )
* Κατακερματισμός Maglev ( `ip_vs_mh.c` )

Γλωσσάριο
---------

Οι όροι που χρησιμοποιούνται συνήθως περιλαμβάνουν τα ακόλουθα: 

* *LVS director* : εξισορροπητής φόρτωσης που λαμβάνει όλες τις εισερχόμενες αιτήσεις πελατών για υπηρεσίες και τις κατευθύνει σε έναν συγκεκριμένο "κανονικό server" για τον χειρισμό του αιτήματος
* *Πραγματικοί servers*: κόμβοι που αποτελούν ένα σύμπλεγμα LVS που χρησιμοποιούνται για την παροχή υπηρεσιών εκ μέρους του συμπλέγματος
* *Υπολογιστές πελατών(Client computers)* : υπολογιστές που αιτούνται τις υπηρεσίες από έναν εικονικό server
* *VIP (Εικονική διεύθυνση IP)* : η διεύθυνση IP που χρησιμοποιεί ο director για την παροχή υπηρεσιών στους υπολογιστές των πελατών (client computers)
* *RIP (πραγματική διεύθυνση IP)* : η διεύθυνση IP που χρησιμοποιείται για τη σύνδεση στους κόμβους συμπλέγματος
* *DIP (Διεύθυνση IP διευθυντών)* : η διεύθυνση IP που χρησιμοποιείται από τον director για να συνδέσει το δίκτυο σε πραγματικές διευθύνσεις IP
* *CIP (Διεύθυνση IP πελάτη)* : η διεύθυνση IP που έχει εκχωρηθεί σε έναν c*lient computer*, που χρησιμοποιείται ως διεύθυνση IP προέλευσης για αιτήματα που αποστέλλονται στο σύμπλεγμα

Παραδείγματα
------------

Στήσιμο ενός εικονικού διακομιστή HTTP με δύο πραγματικούς(real) server:

```
ipvsadm -A -t 192.168.0.1:80 -s rr
ipvsadm -a -t 192.168.0.1:80 -r 172.16.0.1:80 -m
ipvsadm -a -t 192.168.0.1:80 -r 172.16.0.2:80 -m

```
Η πρώτη εντολή εκχωρεί τη θύρα TCP 80 στη διεύθυνση IP 192.168.0.1 στον εικονικό server. Ο αλγόριθμος προγραμματισμού που επιλέχθηκε για την εξισορρόπηση φορτίου είναι ο round-robin ( `-s rr` ). Η δεύτερη και η τρίτη εντολή προσθέτουν διευθύνσεις IP πραγματικών server στη ρύθμιση ενός LVS. Τα προωθημένα πακέτα δικτύου καλύπτονται(masked) ( `-m` ).

Η κατάστασης της παραπάνω ρύθμισης του LVS:

```
# ipvsadm -L -n
IP Virtual Server version 1.0.8 (size=65536)
Prot LocalAddress:Port Scheduler Flags
 -> RemoteAddress:Port      Forward Weight ActiveConn InActConn
TCP 192.168.0.1:80 rr
 -> 172.16.0.2:80        Masq  1   3     1
 -> 172.16.0.1:80        Masq  1   4     0

```

Παραπομπές
----------

1. ↑  «IPVS Software - Advanced Layer-4 Switching». linuxvirtualserver.org. 8 Φεβρουαρίου 2011. Ανακτήθηκε στις 12 Ιανουαρίου 2014.
2. ↑  Wensong Zhang (8 Φεβρουαρίου 2011). «KTCPVS Software - Application-Level Load Balancing». Linuxvirtualserver.org. Ανακτήθηκε στις 25 Μαρτίου 2014.
3. ↑  «Job Scheduling Algorithms in Linux Virtual Server». linuxvirtualserver.org. 8 Φεβρουαρίου 2011. Ανακτήθηκε στις 24 Νοεμβρίου 2013.
4. ↑  «Linux Virtual Server: Load Balance Your Networked Services». bobcares.com. 2008. Ανακτήθηκε στις 24 Νοεμβρίου 2013.