Linux與FreeBSD的多網卡綁定增加服務器流量

轉自:http://slaytanic.blog.51cto.com/2057708/743501

如果你覺得內網服務器一塊千兆網卡已經無法滿足你的交換需要,那麼這篇文章或可對你有所幫助。


其實以前沒想過寫這篇文章,緣起是前兩天國內某知名視頻網站約面試,出了這樣一個問題:“給你一臺服務器,4塊千兆網卡,最大輸出4G流量如何完成?”當時完成作業也沒多想,過了幾天部署hadoop集羣也用上了,回想起來,還是寫出來分享比較好。這可能是很多運維newbie目前遇到的,或者將來可能會遇到的難題。主要也是現在分工細化,專門管交換機的不懂服務器,管服務器的不懂交換機,往往想不到類似的方案。

適用範圍:超大數據量交換,網絡間海量數據複製,或多網卡主備。
目的:將目前單塊1G網卡流量改造爲多網卡綁定2-4G流量。

其實這個功能在linux和Freebsd裏面早就存在了,只是沒有受到大多數人的注意。與其花很多的錢去加服務器,爲什麼不在系統裏面挖掘呢?省錢是王道。買一臺服務器的錢足夠買幾十塊網卡了。

一、交換機多端口EtherChannel配置。

以cisco3750交換機爲例,當然,29系列也可以,用到以太信道,你至少需要2層的交換機可以完成。不過我手裏只有3750,所以就拿3750說事了。

>enable
#conf terminal
sw(config)#int port-channel 1
#多個服務器同時做多端口綁定,"編號"需有所區別
sw(config-if)#exit
sw(config)#int range g1/0/1-4
sw(config-if-range)#no sw
sw(config-if-range)#channel-group 1 mode on
#指定剛纔port-channel設定的"編號"並設置爲以太信道模式
sw(config-if-range)#exit
sw(config)#do wr
#保存到startup中,很重要

你要加多個信道,就指定不同的編號,不同信道的交換機端口不能有交集。就是你把1-4端口分給了channel 1,那麼就不能把4-8端口分給channel 2,只能分配5-8,這是個基本的邏輯問題。

然後把你的服務器插上N塊網卡,開機裝系統。我這裏以CentOS和FreeBSD8.2爲例。

二、Linux多端口綁定

Linux比較簡單,2.4內核以上,默認已經把bonding模塊加載到內核了。

#!/bin/sh
cd /etc/sysconfig/network-scripts/
echo "DEVICE=bond0
BOOTPROTO=static
IPADDR="IP"
NETMASK="MASK"
BROADCAST="BCAST"
ONBOOT=yes
TYPE=Ethernet
USERCTL=no" > ifcfg-bond0

echo "DEVICE=eth0
ONBOOT=yes
BOOTPROTO=dhcp
USERCTL=no" > ifcfg-eth0

echo "DEVICE=eth1
ONBOOT=yes
BOOTPROTO=dhcp
USERCTL=no" > ifcfg-eth1

echo "alias bond0 bonding    
options bond0 miimon=100 mode=0" >> /etc/modprobe.conf
#mode=0表示同時啓用兩塊網卡並行傳輸,mode=1表示主備模式,僅使用一塊網卡
echo "ifenslave bond0 eth0 eth1" >> /etc/rc.local
echo "------Preparing to reboot------5 seconds countdown" && sleep 5
reboot
#如有其他網卡,則修改腳本繼續添加echo "DEVICE=ethx....."

用root用戶把這段腳本放入你的服務器,執行。你需要修改自己的IP地址,子網掩碼和廣播地址。如果你有其他網卡需要綁定,則複製粘貼eth1,並參照eth1修改。

三、FreeBSD更加簡單

FreeBSD8.2默認加載netgraph模塊,可以到/boot/kernel/查看是否存在ng_fec.ko和ng_socket.ko。如沒有,請在內核配置文件中加入下面三行,然後重新buildkernel和installkernel

options         NETGRAPH
options         NETGRAPH_FEC
options         NETGRAPH_SOCKET

然後修改/etc/rc.conf

defaultrouter="192.168.1.1"
fec_interfaces="fec0"
fecconfig_fec0="em0 em1"
ifconfig_fec0="inet 192.168.1.2 netmask 255.255.255.0"
#將ifconfig_em0的IP註釋掉,如下
#ifconfig_em0="inet 192.168.1.2 netmask 255.255.255.0"

多塊網卡直接在fecconfig_fec0裏面添加,空格分隔。

然後,享受速度與激情。
發佈了20 篇原創文章 · 獲贊 21 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章