IPVS Linux Load Balancing Server

Zuerts Kernel mit "IP_Virtual_Server" Unterstützung kompilieren.
Dazu am besten einen neuen Kernel (2.6.24.4) downloaden und via "make xconfig" alle Komponenten unter
"Networking" / "IP virtual server support (EXPERIMENTAL) (IP_VS)" auswählen.
Damit sind die Kernel basierten Bausteine nun abgeschlossen. Um aber den IP_Virtual_Server zu administrieren
benötigt man noch das ipvsadm Tool.

libnl:
	"wget http://www.infradead.org/~tgr/libnl/files/libnl-3.2.25.tar.gz"
	"tar -xzf libnl-3.2.25.tar.gz"
	"cd libnl-3.2.25"
	"./configure --bindir=/usr/bin --sbindir=/usr/sbin --libdir=/usr/lib64 --includedir=/usr/include"
	"make"
	"make install"
	"cp -frv /root/temp/loadbalancer/libnl-3.2.25/include/* /usr/include/"
	"cp -frv /root/temp/loadbalancer/libnl-1.1.4/lib/libnl.* /usr/lib64/"
popt:
	"wget http://rpm5.org/files/popt/popt-1.16.tar.gz"
	"tar -xzf popt-1.16.tar.gz"
	"cd popt-1.16"
	"./configure --bindir=/usr/bin --sbindir=/usr/sbin --libdir=/usr/lib64 --includedir=/usr/include"
	"make"
	"make install"
	
"wget http://www.linux-vs.org/software/kernel-2.6/ipvsadm-1.24.tar.gz" oder "wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz"
"tar -xvzf ipvsadm-1.24.tar.gz"
"cd ipvsadm-1.24"
Bei SuSE findet der Depp (das Programm) einen bestimmten Header nicht, deshalb manuel in`s Haupt "include" Verzeichnis kopieren.
"cp -frv /usr/src/linux-2.6.24.4/include/net/ip_vs.h /usr/include"
"make all"
"make install"

Nun sollte man das IP forwarding (Routing) aktivieren, am besten via yast/2. Oder:
"echo 1 > /proc/sys/net/ipv4/ip_forward"
Aber Achtung der Wert ist nur zur Laufzeit aktiv, sobald ein
reboot stattfindet ist das forwarding wieder inaktiv, deshalb entweder ein Shell Script schreiben oder
das ganze per Yast konfiguierern, oder:
"vi /etc/sysctl.conf -> net.ipv4.ip_forward = 1"
also kurz:
"echo 1 > /proc/sys/net/ipv4/ip_forward"
"sysctl -w net.ipv4.conf.all.accept_redirects=0"
"sysctl -w net.ipv4.conf.lo.arp_announce=2"
"sysctl -w net.ipv4.vs.conntrack=1"
"iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE"
	ggf. "iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 172.17.190.38"
	
Beispiel Konfiguration anhand von TCP Port 80 (HTTP bzw. Apache) via NAT. Siehe Bild nat.png .
"ipvsadm -A -t 172.16.190.2:80"
"ipvsadm -a -t 172.16.190.2:80 -r 172.17.190.18:80 -m"
"ipvsadm -a -t 172.16.190.2:80 -r 172.17.190.19:80 -m"
Alle Packet aus dem Internet an 172.16.190.2 (sietzt hinter Router/NAT) werden an 172.17.190.18 und 172.18.190.18 weiterverteilt.
Beispiel Konfiguration anhand von TCP Port 80 (HTTP bzw. Apache) via direct routing. Siehe Bild direct_routing.png .
ipvsadm -A -t 172.16.190.2:80
ipvsadm -a -t 172.16.190.2:80 -r 172.17.190.18:80 -g
ipvsadm -a -t 172.16.190.2:80 -r 172.17.190.19:80 -g
Alle Packet werden direkt weiter geroutet (im Prinzip fungiert 172.16.190.2 als normaler Router)

Alle realen Server sollten gleich sein (gespiegelt (NFS/Samba/OCFS2 bzw. Heartbeat Cluster), damit nicht unterschiedliche Inhalte
übermittelt werden.

Falls ein Node ausfällt ist "-s rr" die beste Wahl.

#Befehle##################################################################################
"ipvsadm" = Zeigt die aktuelle Konfiguration an
"ipvsadm -L -n --stats" = Statistik
"ipvsadm -L -n --rate" = Statistik
"ipvsadm -L -zero" = Setzt die Statistik auf null zurück
"ipvsadm --start-daemon master" = Run on the Master Linux Director (Heartbeat)
"ipvsadm --start-daemon backup" = Run on the Slave Linux Director (Heartbeat)
"ipvsadm -L -c -n" = Zeigt Konfiguration
"ipvsadm --clear" = Löscht alle Tabellen
"ipvsadm --help" = Zeigt noch mehr Kommandos
"cat /proc/net/ip_vs"
"cat /proc/net/ip_vs_app
"cat /proc/net/ip_vs_conn
"cat /proc/net/ip_vs_stats
"watch -n1 'ipvsadm -Lcn'"
"ipvsadm -d -t 172.17.190.39:3306 -r 172.17.190.37:3306" = Server löschen
"ipvsadm -e -t 172.17.190.39:3306 -r 172.17.190.37:3306 -m -w 0" = Gewichtung auf Null setzten. Service(real Server) wird nicht mehr angeprchen

##################################################################################
Options:

    A : add service
    a : add server
    t : tcp service
    r : real server
    m : masquerading (packet forwarding method)
    w : weight
    s (scheduler): rr(round robin), wrr (weighted round robin),
    lc (least connections), wlc (weighted least connections),
    lblc (locality based least connection), lblcr (lblc with replication),
    dh (destination hashing), sh (source hashing), sed (shortest expected
    delay), nq (never queue).

 Here's a typical LVS-NAT setup.

                        ________
                       |        |
                       | client | (local or on internet)
                       |________|
                           |
                        (router)
                       DIRECTOR_GW
                           |
--                         |
L                      Virtual IP
i                      ____|_____
n                     |          | (director can have 1 or 2 NICs)
u                     | director |
x                     |__________|
                          DIP
V                          |
i                          |
r         -----------------+----------------
t         |                |               |
u         |                |               |
a        RIP1             RIP2            RIP3
l   ____________     ____________     ____________
   |            |   |            |   |            |
S  | realserver |   | realserver |   | realserver |
e  |____________|   |____________|   |____________|
r
v
e
r

Here is a typical LVS-DR or LVS-Tun setup.


                        ________
                       |        |
                       | client | (local or on internet)
                       |________|
                           |
                        (router)-----------
                           |    SERVER_GW  |
--                         |               |
L                         VIP              |
i                      ____|_____          |
n                     |          | (director can have 1 or 2 NICs)
u                     | director |         |
x                     |__________|         |
                          DIP              |
V                          |               |
i                          |               |
r         -----------------+----------------
t         |                |               |
u         |                |               |
a      RIP1,VIP         RIP2,VIP        RIP3,VIP
l   ____________     ____________     ____________
   |            |   |            |   |            |
S  | realserver |   | realserver |   | realserver |
e  |____________|   |____________|   |____________|
r
v
e
r

##################################################################################
Ldirectord (ldirector (Linux Director Daemon)
	is a background process computer program
	used to monitor and administer real servers
	in the Linux Virtual Server (LVS) cluster.)
	
libnet:
	"wget http://www.packetfactory.net/libnet/dist/libnet.tar.gz" oder "http://skylink.dl.sourceforge.net/project/libnet-dev/libnet-1.2-rc3.tar.gz"
	"tar -xvzf libnet.tar.gz"
	"cd libnet"
	"./configure" oder bei SuSE "./configure --bindir=/usr/bin --sbindir=/usr/sbin --libdir=/usr/lib64 --includedir=/usr/include"
	"make"
	"make install"
	
ascii2doc (a2x) per Yast

Cluster Glue:
	"wget http://hg.linux-ha.org/glue/archive/glue-1.0.9.tar.bz2" oder " wget http://hg.linux-ha.org/glue/archive/d05229decc34.tar.gz"
	"tar -xf glue-1.0.9.tar.bz2"
	"cd Reusable-Cluster-Components-glue--glue-1.0.9"
	"./autogen.sh"
	"./configure --bindir=/usr/bin --sbindir=/usr/sbin --libdir=/usr/lib64 --includedir=/usr/include"
	Bei Debian "./configure --bindir=/usr/bin --sbindir=/usr/sbin --libdir=/usr/lib --includedir=/usr/include"
	Alle "Werror" aus "Makefile" und "configure" entfernen
	"make"
	"make install"
	
yast2 -> Perl IO-Socket
cpan IO::Socket::INET6
cpan Socket::GetAddrInfo
Mail::Send
 
hg clone http://hg.linux-ha.org/agents oder git://github.com/ClusterLabs/resource-agents.git
cd agents
./autogen.sh
./configure --bindir=/usr/bin/ --sbindir=/usr/sbin/ --libdir=/usr/lib64 --includedir=/usr/include/
Alle "Werror" aus "Makefiles" und "configures".
make
make install
"vi /usr/etc/ha.d/ldirectord.cf" (ping check ob Server noch eriechbar)->
	#Wenn "quiescent = yes" gewählt ist sollte man wrr verwenden
	# Global Directives
	checktimeout=15
	checkinterval=10
	#fallback=127.0.0.1:80
	#fallback6=[::1]:80
	autoreload=yes
	logfile="/var/log/ldirectord.log"
	#logfile="local0"
	#emailalert="admin@x.y.z"
	#emailalertfreq=3600
	#emailalertstatus=all
	#quiescent = yes
	quiescent = no

	virtual = 172.17.190.39:80
		real=172.17.190.40:80 masq 1
		#fallback=127.0.0.1:23
		service=none
		scheduler=rr
		persistent=30
		#netmask=255.255.255.255
		protocol=tcp
		#checktype=on
		checktype=ping
		
	virtual = 172.17.190.39:3306
		real=172.17.190.36:3306 masq 1
		real=172.17.190.37:3306 masq 1
		real=172.17.190.38:3306 masq 1
		#fallback=127.0.0.1:23
		service=none
		scheduler=rr
		persistent=30
		#netmask=255.255.255.255
		protocol=tcp
		#checktype=on
		checktype=ping

echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl -w net.ipv4.conf.all.accept_redirects=0
sysctl -w net.ipv4.conf.lo.arp_announce=2
sysctl -w net.ipv4.vs.conntrack=1
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/vs/expire_quiescent_template

/etc/init.d/ldirectord start
 
ipvsadm -L -n


Post Revisions: