Linux Virtual Server

Load-balancing software

LVS official logo

Original author(s)| Wensong Zhang
Developer(s)| et al.
Initial release| May 1998; 27 years ago (1998-05)
Written in| C
Operating system| Linux
Type| load balancing
License| GNU General Public License
Website| www.linuxvirtualserver.org

Linux Virtual Server (LVS) is load balancing software for Linux kernel–based operating systems.

LVS is a free and open-source project started by Wensong Zhang in May 1998, subject to the requirements of the GNU General Public License (GPL), version 2. The mission of the project is to build a high-performance and highly available server for Linux using clustering technology, which provides good scalability, reliability and serviceability.

## Overview

[edit]

LVS as used by Wikimedia Foundation in 2022.

The major work of the LVS project is now to develop advanced IP load balancing software (IPVS), application-level load balancing software (KTCPVS), and cluster management components.

* IPVS: an advanced IP load balancing software implemented inside the Linux kernel. The IP Virtual Server code is merged into versions 2.4.x and newer of the Linux kernel mainline.[1]
* KTCPVS: implements application-level load balancing inside the Linux kernel, as of February 2011[update] still under development.[2]

LVS can be used for building highly scalable and highly available network services, such as web, email, media and VoIP services, and integrating scalable network services into large-scale reliable e-commerce or e-government applications. LVS-based solutions already have been deployed in many real applications throughout the world, including Wikipedia.

The LVS components depend upon the Linux Netfilter framework, and its source code is available in the `net/netfilter/ipvs` subdirectory within the Linux kernel source. LVS is able to handle UDP, TCP layer-4 protocols as well as FTP passive connection by inspecting layer-7 packets. It provides a hierarchy of counters in the `/proc` directory.

The userland utility program used to configure LVS is called ipvsadm, which requires superuser privileges to run.

### Schedulers

[edit]

LVS implements several balancing schedulers, listed below with the relevant source files:[3]

* Round-robin (`ip_vs_rr.c`)
* Weighted round-robin (`ip_vs_wrr.c`)
* Least-connection (`ip_vs_lc.c`)
* Weighted least-connection (`ip_vs_wlc.c`)
* Locality-based least-connection (`ip_vs_lblc.c`)
* Locality-based least-connection with replication (`ip_vs_lblcr.c`)
* Destination hashing (`ip_vs_dh.c`)
* Source hashing (`ip_vs_sh.c`)
* Shortest expected delay (`ip_vs_sed.c`)
* Never queue (`ip_vs_nq.c`)
* Maglev hashing (`ip_vs_mh.c`)

## Glossary

[edit]

Commonly used terms include the following:[4]

* LVS director: load balancer that receives all incoming client requests for services and directs them to a specific "real server" to handle the request
* Real servers: nodes that make up an LVS cluster which are used to provide services on the behalf of the cluster
* Client computers: computers requesting services from the virtual server
* VIP (Virtual IP address): the IP address used by the director to provide services to client computers
* RIP (Real IP address): the IP address used to connect to the cluster nodes
* DIP (Directors IP address): the IP address used by the director to connect to network of real IP addresses
* CIP (Client IP address): the IP address assigned to a client computer, that it uses as the source IP address for requests being sent to the cluster

## Examples

[edit]

Setting up a virtual HTTP server with two real servers:

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

The first command assigns TCP port 80 on IP address 192.168.0.1 to the virtual server. The chosen scheduling algorithm for load balancing is round-robin (`-s rr`). The second and third commands are adding IP addresses of real servers to the LVS setup. The forwarded network packets shall be masked (`-m`).[5]

Querying the status of the above configured LVS setup:

# 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

## See also

[edit]

* Linux portal
* Free and open-source software portal

* IP Virtual Server
* Netfilter and nftables
* Network scheduler

## References

[edit]

1. ^ "IPVS Software - Advanced Layer-4 Switching". linuxvirtualserver.org. 2011-02-08. Retrieved 2014-01-12.
2. ^ Wensong Zhang (2011-02-08). "KTCPVS Software - Application-Level Load Balancing". Linuxvirtualserver.org. Retrieved 2014-03-25.
3. ^ "Job Scheduling Algorithms in Linux Virtual Server". linuxvirtualserver.org. 2011-02-08. Retrieved 2013-11-24.
4. ^ "Linux Virtual Server: Load Balance Your Networked Services". bobcares.com. 2008. Retrieved 2013-11-24.
5. ^ Peter, Jeff. "Understanding Virtual Server". Retrieved 18 June 2023.

## External links

[edit]

* Official website
* Linux Virtual Server Configuration Wiki
* IBM eServer BladeCenter, Linux, and Open Source: Blueprint for e-business on demand Archived 2022-08-11 at the Wayback Machine (includes LVS as a component)

* v
* t
* e

Linux kernel

Organization|

| Kernel|

* Linux Foundation
* Linux Mark Institute
* Linus's law
* Tanenbaum–Torvalds debate
* Tux
* SCO disputes
* Linaro
* GNU GPL v2
* menuconfig
* Supported computer architectures
* Version history
* Criticism

|

Support|

* Developers
* The Linux Programming Interface
* kernel.org
* LKML
* Linux conferences
* Users
* Linux User Group (LUG)

People|

* Werner Almesberger
* H. Peter Anvin
* Jens Axboe
* Moshe Bar
* Suparna Bhattacharya
* Andries Brouwer
* Rémy Card
* Alan Cox
* Matthew Garrett
* Avi Kivity
* Con Kolivas
* Greg Kroah-Hartman
* Benson Leung
* Robert Love
* David S. Miller
* Ingo Molnár
* Andrew Morton
* Hans Reiser
* Rusty Russell
* Shuah Khan
* Linus Torvalds
* Theodore Ts'o
* Stephen Tweedie
* Harald Welte
* Chris Wright

Technical|

| Debugging|

* CRIU
* ftrace
* kdump
* Linux kernel oops
* SystemTap
* BPF

|

Startup|

* vmlinux
* System.map
* dracut
* initrd
* initramfs

ABIs|

* Linux Standard Base
* x32 ABI

APIs|

| Kernel|

| System Call
Interface|

* POSIX
* ioctl
* select
* open
* read
* close
* sync
* …
* Linux-only
* futex
* epoll
* splice
* dnotify
* inotify
* readahead
* …

|

In-kernel|

* ALSA
* Crypto API
* io uring
* DRM
* kernfs
* Memory barrier
* New API
* RCU
* Video4Linux
* IIO

Userspace|

| Daemons,
File systems|

* bpffs
* configfs
* devfs
* devpts
* debugfs
* FUSE
* hugetlbfs
* pipefs
* procfs
* securityfs
* sockfs
* sysfs
* tmpfs
* systemd
* udev
* Kmscon
* binfmt_misc

|

Wrapper
libraries|

* C standard library
* glibc
* uClibc
* Bionic
* libhybris
* dietlibc
* EGLIBC
* klibc
* musl
* Newlib
* libcgroup
* libdrm
* libalsa
* libevdev
* libusb
* liburing

Components|

* Kernel modules
* BlueZ
* cgroups
* Console
* bcache
* Device mapper
* dm-cache
* dm-crypt
* DRM
* EDAC
* evdev
* Kernel same-page merging (KSM)
* LIO
* Framebuffer
* LVM
* KMS driver
* Netfilter
* Netlink
* nftables
* Network scheduler
* perf
* SLUB
* zram
* zswap

* Process and I/O schedulers:
* Brain Fuck Scheduler
* Completely Fair Scheduler (CFS)
* Earliest eligible virtual deadline first (EEVDF)
* Noop scheduler
* O(n) scheduler
* O(1) scheduler
* SCHED_DEADLINE
* SCHED_FIFO
* SCHED_RR

* Security Modules: AppArmor
* Exec Shield
* seccomp
* SELinux
* Smack
* Tomoyo Linux
* Linux PAM

* Device drivers
* 802.11
* graphics
* Raw device

* initramfs
* KernelCare
* kexec
* kGraft
* kpatch
* Ksplice

Variants|

* Mainline
* Linux kernel
* Linux-libre
* High-performance computing
* INK
* Compute Node Linux
* SLURM
* Real-time computing
* RTLinux
* RTAI
* Xenomai
* PREEMPT_RT
* MMU-less
* μClinux
* PSXLinux

| Virtualization|

* Hypervisor
* KVM
* Xen
* OS-level virtualization
* Linux-VServer
* Lguest
* LXC
* OpenVZ
* Other
* L4Linux
* User-mode Linux
* MkLinux
* coLinux

|

Adoption|

| Range
of use|

* Desktop
* Embedded
* Gaming
* Thin client:
* LTSP
* Server:
* LAMP
* LYME-LYCE
* Devices

|

Adopters|

* List of Linux adopters

* Linux portal
* Free and open-source software portal
* Category

*[v]: View this template
*[t]: Discuss this template
*[e]: Edit this template