$theTitle=wp_title(" - ", false); if($theTitle != "") { ?> } else { ?> } ?>
by Andrew Johnstone
In: Linux
2 Apr 2010We have re-written parts of the default configuration for ucarp & haproxy to run several VIPs on the same interface. This works on debian, however some minor modifications maybe needed for other distributions.
/etc/network/if-up.d/ucarp
#!/bin/sh
UCARP=/usr/sbin/ucarp
EXTRA_PARAMS=""
if [ ! -x $UCARP ]; then
exit 0
fi
if [ -z "$IF_UCARP_UPSCRIPT" ]; then
IF_UCARP_UPSCRIPT=/usr/share/ucarp/vip-up
fi
if [ -z "$IF_UCARP_DOWNSCRIPT" ]; then
IF_UCARP_DOWNSCRIPT=/usr/share/ucarp/vip-down
fi
if [ -n "$IF_UCARP_MASTER" ]; then
if ! expr "$IF_UCARP_MASTER" : "no|off|false|0" > /dev/null; then
EXTRA_PARAMS="-P"
fi
fi
if [ -n "$IF_UCARP_ADVSKEW" ]; then
EXTRA_PARAMS="$EXTRA_PARAMS -k $IF_UCARP_ADVSKEW"
fi
if [ -n "$IF_UCARP_ADVBASE" ]; then
EXTRA_PARAMS="$EXTRA_PARAMS -b $IF_UCARP_ADVBASE"
fi
# Allow logging to custom facility
if [ -n "$IF_UCARP_FACILITY" ] ; then
EXTRA_PARAMS="$EXTRA_PARAMS -f $IF_UCARP_FACILITY"
fi
# Modified to use start / stop /daemon
if [ -n "$IF_UCARP_VID" -a -n "$IF_UCARP_VIP" -a
-n "$IF_UCARP_PASSWORD" ]; then
start-stop-daemon -b -m -S -p "/var/run/ucarp.$IF_UCARP_VIP.pid" -x $UCARP -- -i $IFACE -s $IF_ADDRESS -z
-v $IF_UCARP_VID -p $IF_UCARP_PASSWORD -a $IF_UCARP_VIP
-u $IF_UCARP_UPSCRIPT -d $IF_UCARP_DOWNSCRIPT
$EXTRA_PARAMS
fi
/etc/network/if-down.d/ucarp
#!/bin/sh
UCARP=/usr/sbin/ucarp
EXTRA_PARAMS=""
if [ ! -x $UCARP ]; then
exit 0
fi
if [ -z "$IF_UCARP_UPSCRIPT" ]; then
IF_UCARP_UPSCRIPT=/usr/share/ucarp/vip-up
fi
if [ -z "$IF_UCARP_DOWNSCRIPT" ]; then
IF_UCARP_DOWNSCRIPT=/usr/share/ucarp/vip-down
fi
if [ -n "$IF_UCARP_MASTER" ]; then
if ! expr "$IF_UCARP_MASTER" : "no|off|false|0" > /dev/null; then
EXTRA_PARAMS="-P"
fi
fi
if [ -n "$IF_UCARP_ADVSKEW" ]; then
EXTRA_PARAMS="$EXTRA_PARAMS -k $IF_UCARP_ADVSKEW"
fi
if [ -n "$IF_UCARP_ADVBASE" ]; then
EXTRA_PARAMS="$EXTRA_PARAMS -b $IF_UCARP_ADVBASE"
fi
# Allow logging to custom facility
if [ -n "$IF_UCARP_FACILITY" ] ; then
EXTRA_PARAMS="$EXTRA_PARAMS -f $IF_UCARP_FACILITY"
fi
# Modified to use start / stop /daemon
if [ -n "$IF_UCARP_VID" -a -n "$IF_UCARP_VIP" -a
-n "$IF_UCARP_PASSWORD" ]; then
start-stop-daemon -K -p "/var/run/ucarp.$IF_UCARP_VIP.pid" -x $UCARP -- -i $IFACE -s $IF_ADDRESS -z
-v $IF_UCARP_VID -p $IF_UCARP_PASSWORD -a $IF_UCARP_VIP
-u $IF_UCARP_UPSCRIPT -d $IF_UCARP_DOWNSCRIPT
$EXTRA_PARAMS
fi
/etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
address 100.100.100.14
netmask 255.255.255.192
broadcast 100.100.100.63
gateway 100.100.100.1
up /bin/ip address add 100.100.100.32/32 dev eth0 scope host
up /sbin/arptables -I OUTPUT -s 100.100.100.32 -j DROP
down /bin/ip address del 100.100.100.32/32 dev eth0 scope host
down /sbin/arptables -F
up /sbin/ifup eth0:1
down /sbin/ifdown eth0:1
up /sbin/ifup eth0:2
down /sbin/ifdown eth0:2
up /sbin/ifup eth0:3
down /sbin/ifdown eth0:3
auto eth0:1
iface eth0:1 inet static
address 100.100.100.26
netmask 255.255.255.192
broadcast 100.100.100.63
ucarp-vid 6
ucarp-vip 100.100.100.34
ucarp-password password
ucarp-advskew 14
ucarp-advbase 1
ucarp-facility local1
ucarp-master no
ucarp-upscript /etc/network/local/vip-up-mywebsite1.com
ucarp-downscript /etc/network/local/vip-down-mywebsite1.com
iface eth0:1:ucarp inet static
address 100.100.100.34
netmask 255.255.255.192
auto eth0:2
iface eth0:2 inet static
address 100.100.100.40
netmask 255.255.255.192
broadcast 100.100.100.63
ucarp-vid 9
ucarp-vip 100.100.100.36
ucarp-password password
ucarp-advskew 14
ucarp-advbase 1
ucarp-facility local1
ucarp-master no
ucarp-upscript /etc/network/local/vip-up-mywebsite2.com
ucarp-downscript /etc/network/local/vip-down-mywebsite2.com
iface eth0:2:ucarp inet static
address 100.100.100.36
netmask 255.255.255.192
auto eth0:3
iface eth0:3 inet static
address 100.100.100.44
netmask 255.255.255.192
broadcast 100.100.100.63
ucarp-vid 12
ucarp-vip 100.100.100.31
ucarp-password password
ucarp-advskew 100
ucarp-advbase 1
ucarp-facility local1
ucarp-master no
ucarp-upscript /etc/network/local/vip-up-mywebsite3.com
ucarp-downscript /etc/network/local/vip-down-mywebsite3.com
iface eth0:3:ucarp inet static
address 100.100.100.31
netmask 255.255.255.192
This needs to be stored for each VIP in the listed interfaces above
/etc/network/local/vip-up-mywebsite1.com
#!/bin/sh /sbin/ifup $1:ucarp start-stop-daemon -S -p /var/run/haproxy.mywebsite1.com.pid -x /usr/sbin/haproxy -- -f /etc/haproxy/haproxy.mywebsite1.com.cfg -D -p /var/run/haproxy.mywebsite1.com.pid
/etc/network/local/vip-down-mywebsite1.com
#!/bin/bash start-stop-daemon -K -p /var/run/haproxy.mywebsite1.com.pid -x /usr/sbin/haproxy -- -f /etc/haproxy/haproxy.mywebsite1.com.cfg -D -p /var/run/haproxy.mywebsite1.com.pid /sbin/ifdown $1:ucarp
/etc/haproxy/haproxy.mywebsite1.com.cfg
# this config needs haproxy-1.1.28 or haproxy-1.2.1
global
log /dev/log local1
#log loghost local0 info
maxconn 4096
#chroot /usr/share/haproxy
user haproxy
group haproxy
daemon
#debug
#quiet
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
# option httpclose
maxconn 2000
contimeout 50000
clitimeout 50000
srvtimeout 120000
# option httpclose
option forwardfor
listen myweb1 100.100.100.31:80
mode http
balance roundrobin
stats enable
stats realm HaProxy Statistics
stats auth stats:password
stats scope .
stats uri /haproxy?stats
server web1 100.100.100.44:80 check inter 2000 fall 3
server web2 100.100.100.45:80 check inter 2000 fall 3
server web3 100.100.100.46:80 check inter 2000 fall 3
Disable the startup of haproxy and ifup the interfaces.
sed -i 's/ENABLED=1/ENABLED=0/g' /etc/init.d/haproxy stop
I have been a developer for roughly 10 years and have worked with an extensive range of technologies. Whilst working for relatively small companies, I have worked with all aspects of the development life cycle, which has given me a broad and in-depth experience.