Direct Server Return (DSR) am Target unter Linux konfigurieren

Aus Thomas-Krenn-Wiki
Zur Navigation springen Zur Suche springen
Hinweis: Bitte beachten Sie, dass dieser Artikel / diese Kategorie sich entweder auf ältere Software/Hardware Komponenten bezieht oder aus sonstigen Gründen nicht mehr gewartet wird.
Diese Seite wird nicht mehr aktualisiert und ist rein zu Referenzzwecken noch hier im Archiv abrufbar.

Um das Direct Server Return (DSR) zu nutzen, muss am Target-Server zum einen ein loopback-device mit der IP-Adresse des virtuellen Servers erstellt werden und unter Linux des weiteren dafür gesorgt werden, dass diese IP-Adresse nicht ins Netzwerk antwortet (Stichwort arp-flux-Problem). Hierfür müssen für alle physikalisch vorhandenen Interfaces sysctl-Parameter gesetzt werden. Um dies zu vereinfachen, kann man folgendes Init-Script benutzen

#! /bin/bash
### BEGIN INIT INFO
# Provides:          BalanceNG Agent
# Required-Start:    $local_fs $remote_fs
# Required-Stop:     $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# chkconfig: 2345 99 99
# Short-Description: Initscript for BalanceNG-agent
# Description:       This script starts/stops the BalanceNG-agent
### END INIT INFO

# Author: Peter Ackermann <packermann@thomas-krenn.com>


PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="balanceNG Loadbalancer-Agent"
NAME=bngagent
DAEMON=/sbin/$NAME
DAEMON_ARGS="--options args"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

# DSR-Specific options. If setting DSRENABLE to "Yes", arp-flux-problem will be solved and the proper loopback will be created
DSRENABLE=Yes
# Specifiy here the IP-Address of the virtual Server on the LoadBalancer (important for DSR)
VSERVER=127.0.0.1
# Start the bngagent?
DAEMONSTART=No

# Load the VERBOSE setting and other rcS variables on debian-based distro
if [ -e /etc/debian_version ]; then
. /lib/init/vars.sh
else
VERBOSE="yes"
fi

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

#
# Function that starts the daemon/service
#
do_start()
{	
	if [ $DSRENABLE == "Yes" ]; then
		echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
		echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
		find /proc/sys/net/ipv4/conf/eth*/arp_ignore | awk '{ system("echo 1 > "$1); }'
		find /proc/sys/net/ipv4/conf/eth*/arp_announce | awk '{ system("echo 2 > "$1); }'
		ifconfig lo:0 $VSERVER netmask 255.255.255.255 -arp up
	fi
	if [ $DAEMONSTART == "Yes" ]; then
		$DAEMON -0 439
	fi
	return 0
}

#
# Function that stops the daemon/service
#
do_stop()
{
	if [ $DAEMONSTART == "Yes" ]; then
                pkill $DAEMON
        fi
	return 0
}

#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
	do_stop
	do_start
	return 0
}

case "$1" in
  start)
	[ "$VERBOSE" != no ] && echo -n $"Starting $DESC" "$NAME"
	do_start
	case "$?" in
		0|1) [ "$VERBOSE" != no ] && exit 0 ;;
		2) [ "$VERBOSE" != no ] && exit 1 ;;
	esac
	;;
  stop)
	[ "$VERBOSE" != no ] && echo -n $"Stopping $DESC" "$NAME"
	do_stop
	case "$?" in
		0|1) [ "$VERBOSE" != no ] && exit 0 ;;
		2) [ "$VERBOSE" != no ] && exit 1 ;;
	esac
	;;
  restart|force-reload)
	#
	# If the "reload" option is implemented then remove the
	# 'force-reload' alias
	#
	echo -n $"Restarting $DESC" "$NAME"
	do_stop
	case "$?" in
	  0|1)
		do_start
		case "$?" in
			0) exit 0 ;;
			1) exit 1 ;; # Old process is still running
			*) exit 1 ;; # Failed to start
		esac
		;;
	  *)
	  	# Failed to stop
		exit 1
		;;
	esac
	;;
  *)
	#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
	echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
	exit 3
	;;
esac

:

Im oberen Bereich des Scriptes sind folgende Parameter zu setzen:

 DSRENABLE

Legt fest, ob die für DSR nötigen sysctl-Parameter aktiviert werden sollen und das loopback-device lo:0 konfiguriert werden soll

 VSERVER

Gibt die IP-Adresse an, die für das loopback-device konfiguriert werden soll. Diese muss mit der IP-Adresse identisch sein, die am LoadBalancer als Server-IP konfiguriert ist

 DAEMONSTART

Hiermit kann festgelegt werden, ob ggf. der bngagent mitgestartet werden soll. Dieser muss unter dem binary und Pfad zu finden sein, wie in den Variablen NAME und DAEMON festgelegt ist (Standard /sbin/bngagent)

Das Init-Script funktioniert sowohl an Debian-basierten-Systemen als auch an RedHat-basierten.

Das könnte Sie auch interessieren

Aktivierung des Loopback-Adapters unter Windows 2008
Kemp Loadbalancer Uebersicht
Kemp Virtual Loadmaster VLM Lizenz Aktivierung