Bonding
WARNING!!!
This page is old and should not be used for current versions of SUSE Linux. Please see the following pages for more up-to-date information:
http://support.novell.com/techcenter/sdb/en/2004/09/tami_sles9_bonding_setup.html http://www.novell.com/coolsolutions/feature/17605.html
Load balance and failover with two network adapters
- First you have to configure the same ip address on both network interfaces:
yast lan
- You have to announce the new bond device to the kernel:
echo "alias bond0 bonding" >> /etc/modprobe.conf.local
- Then you should reboot your system:
reboot
- Create a new startup script calling /etc/init.d/bond:
cd /etc/init.d touch bond chmod 755 bond vi bond
- Paste the following into this bond file:
#! /bin/sh # Copyright (c) 2002-2006 bpm consult ag, CH-Birsfelden. All rights reserved. # <support@bpm.ch> # ### BEGIN INIT INFO # Provides: bond # Required-Start: $network # Required-Stop: # Default-Start: 3 5 # Default-Stop: # Short-Description: bonding # Description: load balancing between two or more ethernet interfaces # Version: 1.0.2 08.02.2006 ### END INIT INFO # # init.d/bond logfile="/var/log/bond.log" ifs="" ifcounter=0 for if in `ifconfig | cut -c1-5 | grep "^eth"` do ifs="$ifs $if" ifcounter=`expr $ifcounter + 1` done if [ $ifcounter -le 1 ] then echo "not enough interfaces for bonding" exit 1 fi . /etc/rc.status rc_reset case "$1" in start) # start bonding: echo -n "create bond interface " date > $logfile ip=`ifconfig eth0 | grep "inet addr" | cut -d":" -f2 | cut -d" " -f1` bc=`ifconfig eth0 | grep "inet addr" | cut -d":" -f3 | cut -d" " -f1` nm=`ifconfig eth0 | grep "inet addr" | cut -d":" -f4 | cut -d" " -f1` gw=`netstat -rn | grep ^0 | cut -c17-32` ifconfig bond0 $ip netmask $nm broadcast $bc >> $logfile 2>> $logfile rc_status -v echo -n "start bonding " ifenslave bond0 $ifs >> $logfile 2>> $logfile route add -net default gw $gw bond0 rc_status -v ;; stop) # stop bonding: echo -n "remove bond interface " date > $logfile ifconfig bond0 down >> $logfile 2>> $logfile rc_status -v echo -n "reactivate ethernet interfaces " for if in $ifs do ifconfig $if up >> $logfile 2>> $logfile done rc_status -v ;; status) # check bonding: if [ `ifconfig | grep "^bond0" | wc -l` -eq 1 ] then echo "bond interface is loaded" mac=`ifconfig | grep "^bond0" | cut -c39-` for if in $ifs do if [ `ifconfig | grep "^$if" | cut -c39-` == $mac ] then echo "$if used in bond0" fi done else echo "bonding is disabled" fi ;; *) # invalid option: echo "error: invalid argument" echo "usage: $0 {start|stop|status}" exit 1 ;; esac rc_exit
- This will bind all interfaces on the machine to bond0. To bind specific interfaces remove the following:
for if in `ifconfig | cut -c1-5 | grep "^eth"` do ifs="$ifs $if" ifcounter=`expr $ifcounter + 1` done
and change:
ifs=""
to
ifs="{the interfaces you wish to bond}"
and
ifcounter=0
to
ifcounter={the number of interfaces to be bound}
If your interfaces to be bound to bond0 do not include eth0 then these lines need to be edited also:
ip=`ifconfig eth0 | grep "inet addr" | cut -d":" -f2 | cut -d" " -f1` bc=`ifconfig eth0 | grep "inet addr" | cut -d":" -f3 | cut -d" " -f1` nm=`ifconfig eth0 | grep "inet addr" | cut -d":" -f4 | cut -d" " -f1`
Just change eth0 to the first interface to be bound in your list of $ifs.
- Finally you can start the network bonding:
./bond start create bond interface done start bonding done ./bond status bond interface is loaded eth0 used in bond0 eth1 used in bond0
- To start it automatically at system start, use the following command:
insserv -d bond