Difference between revisions of "Bonding"
(fixed formatting big time) |
|||
Line 8: | Line 8: | ||
Additionally, link integrity monitoring may be performed. | Additionally, link integrity monitoring may be performed. | ||
− | == Setting up bounding | + | == Setting up bounding on a RHEL/CentOS 4 system == |
− | + | ||
+ | ===Create a bond0 configuration file=== | ||
Red Hat Linux stores network configuration in /etc/sysconfig/network-scripts/ directory. First, you need to create bond0 config file: | Red Hat Linux stores network configuration in /etc/sysconfig/network-scripts/ directory. First, you need to create bond0 config file: | ||
− | # vi /etc/sysconfig/network-scripts/ifcfg-bond0 | + | # vi /etc/sysconfig/network-scripts/ifcfg-bond0 |
Append following lines to it: | Append following lines to it: | ||
− | + | ||
+ | ====In case of static IP==== | ||
<pre> | <pre> | ||
DEVICE=bond0 | DEVICE=bond0 | ||
Line 33: | Line 35: | ||
Replace above IP data with your actual IP address. Save file and exit to shell prompt. | Replace above IP data with your actual IP address. Save file and exit to shell prompt. | ||
− | + | ====In case of DHCP==== | |
<pre> | <pre> | ||
DEVICE=bond0 | DEVICE=bond0 | ||
Line 40: | Line 42: | ||
</pre> | </pre> | ||
− | + | ===Modify eth0 and eth1 config files=== | |
Open both configuration using vi text editor and make sure file read as follows for eth0 interface | Open both configuration using vi text editor and make sure file read as follows for eth0 interface | ||
− | # vi /etc/sysconfig/network-scripts/ifcfg-eth0 | + | # vi /etc/sysconfig/network-scripts/ifcfg-eth0 |
<pre> | <pre> | ||
DEVICE=eth0 | DEVICE=eth0 | ||
Line 56: | Line 58: | ||
Open eth1 configuration file using vi text editor: | Open eth1 configuration file using vi text editor: | ||
− | + | vi /etc/sysconfig/network-scripts/ifcfg-eth1 | |
Make sure file read as follows for eth1 interface: | Make sure file read as follows for eth1 interface: | ||
Line 69: | Line 71: | ||
Save file and exit to shell prompt. | Save file and exit to shell prompt. | ||
− | + | === Load bond driver/module === | |
Make sure bonding module is loaded when the channel-bonding interface (bond0) is brought up. You need to modify kernel modules configuration file: | Make sure bonding module is loaded when the channel-bonding interface (bond0) is brought up. You need to modify kernel modules configuration file: | ||
− | # vi /etc/modprobe.conf | + | # vi /etc/modprobe.conf |
<pre> | <pre> | ||
alias bond0 bonding | alias bond0 bonding | ||
Line 79: | Line 81: | ||
You can learn more about all bounding options in kernel source documentation file "Documentation/networking/bonding.txt" | You can learn more about all bounding options in kernel source documentation file "Documentation/networking/bonding.txt" | ||
− | + | === Test the configuration === | |
First, load the bonding module: | First, load the bonding module: | ||
<pre> | <pre> | ||
Line 90: | Line 92: | ||
Check proc info: | Check proc info: | ||
− | # cat /proc/net/bonding/bond0 | + | # cat /proc/net/bonding/bond0 |
<pre> | <pre> | ||
Ethernet Channel Bonding Driver: v2.6.3 (June 8, 2005) | Ethernet Channel Bonding Driver: v2.6.3 (June 8, 2005) | ||
Line 136: | Line 138: | ||
default via 10.17.0.1 dev bond0 | default via 10.17.0.1 dev bond0 | ||
</pre> | </pre> | ||
+ | |||
== Traffic shaping == | == Traffic shaping == | ||
− | + | === Virtuozzo traffic shaping tools === | |
Just replace old netdev to new bonding device (bond0) | Just replace old netdev to new bonding device (bond0) | ||
Line 153: | Line 156: | ||
</pre> | </pre> | ||
− | + | === Traffic shaping with tc === | |
− | Where is no | + | Where is no specifics here, see [[Traffic shaping with tc]]. |
As a result in: | As a result in: |
Revision as of 10:54, 26 October 2006
Linux allows binding multiple network interfaces into a single channel/NIC.
Introduction
The Linux bonding driver provides a method for aggregating multiple network interfaces into a single logical "bonded" interface. The behavior of the bonded interfaces depends upon the mode; generally speaking, modes provide either hot standby or load balancing services. Additionally, link integrity monitoring may be performed.
Setting up bounding on a RHEL/CentOS 4 system
Create a bond0 configuration file
Red Hat Linux stores network configuration in /etc/sysconfig/network-scripts/ directory. First, you need to create bond0 config file:
# vi /etc/sysconfig/network-scripts/ifcfg-bond0
Append following lines to it:
In case of static IP
DEVICE=bond0 IPADDR=x.x.x.x NETWORK=y.y.y.y NETMASK=z.z.z.z BOOTPROTO=none ONBOOT=yes
x.x.x.x is an IP address of HW.
y.y.y.y is an Network address of HW.
z.z.z.z is an net mask address of HW (usually 255.255.255.0).
Replace above IP data with your actual IP address. Save file and exit to shell prompt.
In case of DHCP
DEVICE=bond0 BOOTPROTO=dhcp ONBOOT=yes
Modify eth0 and eth1 config files
Open both configuration using vi text editor and make sure file read as follows for eth0 interface
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 USERCTL=no ONBOOT=yes MASTER=bond0 SLAVE=yes BOOTPROTO=none
Open eth1 configuration file using vi text editor:
vi /etc/sysconfig/network-scripts/ifcfg-eth1
Make sure file read as follows for eth1 interface:
DEVICE=eth1 USERCTL=no ONBOOT=yes MASTER=bond0 SLAVE=yes BOOTPROTO=none
Save file and exit to shell prompt.
Load bond driver/module
Make sure bonding module is loaded when the channel-bonding interface (bond0) is brought up. You need to modify kernel modules configuration file:
# vi /etc/modprobe.conf
alias bond0 bonding options bond0 mode=balance-alb miimon=100
You can learn more about all bounding options in kernel source documentation file "Documentation/networking/bonding.txt"
Test the configuration
First, load the bonding module:
# modprobe bonding
Restart networking service in order to up bond0 interface:
# service network restart
Check proc info:
# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v2.6.3 (June 8, 2005) Bonding Mode: load balancing (round-robin) MII Status: up MII Polling Interval (ms): 0 Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: eth0 MII Status: up Link Failure Count: 0 Permanent HW addr: 00:0c:29:07:d4:c3 Slave Interface: eth1 MII Status: up Link Failure Count: 0 Permanent HW addr: 00:0c:29:07:d4:cd
List all interfaces:
#ip a 2: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 brd 127.255.255.255 scope host lo 4: bond0: <BROADCAST,MULTICAST,MASTER,UP> mtu 1500 qdisc noqueue link/ether 00:0c:29:73:26:19 brd ff:ff:ff:ff:ff:ff inet 10.17.3.25/16 brd 10.17.255.255 scope global bond0 6: eth0: <BROADCAST,MULTICAST,SLAVE,UP> mtu 1500 qdisc pfifo_fast master bond0 qlen 1000 link/ether 00:0c:29:73:26:19 brd ff:ff:ff:ff:ff:ff 8: eth1: <BROADCAST,MULTICAST,SLAVE,UP> mtu 1500 qdisc pfifo_fast master bond0 qlen 1000 link/ether 00:0c:29:73:26:19 brd ff:ff:ff:ff:ff:ff 1: venet0: <BROADCAST,POINTOPOINT,NOARP,UP> mtu 1500 qdisc noqueue link/void
Route:
# ip r 10.17.0.0/16 dev bond0 proto kernel scope link src 10.17.3.25 169.254.0.0/16 dev bond0 scope link default via 10.17.0.1 dev bond0
Traffic shaping
Virtuozzo traffic shaping tools
Just replace old netdev to new bonding device (bond0)
vi /etc/sysconfig/vz
## Network traffic parameters TRAFFIC_SHAPING=yes BANDWIDTH="bond0:102400" TOTALRATE="bond0:1:4096" RATE="bond0:1:8"
and do the rest as usuall
# vzctl set $veid --ratebound $bound --rate $rif:$class:$rate --save
Traffic shaping with tc
Where is no specifics here, see Traffic shaping with tc.
As a result in:
# ip a s bond0 4: bond0: <BROADCAST,MULTICAST,MASTER,UP> mtu 1500 qdisc cbq ##NOTE:Class Based Queueing tc was added ^^^^^^^^^^ link/ether 00:0c:29:07:d4:c3 brd ff:ff:ff:ff:ff:ff inet 10.17.3.41/16 brd 10.17.255.255 scope global bond0