Redhat配置網卡陣列

1)修改vi /etc/rc.d/rc.local文件,增長如下內容(注意這裏添加的是eth0、eth1兩個網口)
ifenslave bond0 eth0 eth1
#若是一塊網卡失效,系統會按照/etc/rc.d/rc.local裏順序啓動網卡,起到失效保護做用。
echo "0" >>/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
setsebool ftpd_disable_trans 1
service vsftpd restart
route add -net 224.0.0.0/4 dev bond0
#添加路由來設定發送規則
2)修改配置文件/etc/sysconfig/network-scripts
新增ifcfg-bond0文件,內容以下:
DEVICE=bond0             #設備名稱
BOOTPROTO=static         #不啓用DHCP
ONBOOT=yes               #開機自啓動
IPADDR=192.168.101.X     #網卡陣列的ip地址
NETMASK=255.255.255.0    #掩碼
GATEWAY=192.168.101.1    #網關
修改ifcfg-eth0,ifcfg-eth1文件,根據實際配置文件新增修改部分以下:
MASTER=bond0
SLAVE=yes
BOOTPROTO=static         #配置靜態地址,不開啓DHCP
ONBOOT=yes               #開機網卡自啓動
3)修改/etc/modprobe.d/dist.conf(按esc用:$回車抵達最後一行在末尾添加下面兩句)
alias bond0 bonding
(Bonding只能提供鏈路監測,從主機到交換機的鏈路是否連通,若是隻是交換機對外的鏈路down掉,而交換機自己沒有故障,bonding會認爲沒有故障而繼續使用)
options bond0 miimon=100 mode=1
(miimon用來進行鏈路監測,每100ms監測一次鏈路鏈接狀態,若是一條不一樣轉入另外一條線路;mode的值表示工做模式,共有1,2,3,4四種模式
Mode=0表示load balancing(round-robin)爲負載均衡模式
Mode=1表示fault- tolerance(active-backup)爲冗餘模式,主備工做模式)
alias net-pf-10 off         #關閉ipv6支持,能夠不加
對於級聯小交換機
alias bond0 bonding
options bond0 mode=1 arp_interval=500 arp_ip_target=192.168.101.254 arp_validate=all primary=eth0
#經過定時器,每一個slave接口不斷髮送ARP包來不斷更換交換機端口與MAC的對應關係
使得每一個網卡都在進行工做。這個ARP的發送規則是:
每arp_interval(MS)間隔向arp_ip_target發送arp請求,能夠向多個arp_ip_target發送arp請求。
4)增長/etc/udev/rules.d/50-hwinterfaces.rules
(鎖定網卡物理地址,SYSFS{address}==""雙引號中輸入物理地址)
KERNEL=="eth*",SYSFS{address}=="",NAME="eth0"
KERNEL=="eth*",SYSFS{address}=="",NAME="eth1"
KERNEL=="eth*",SYSFS{address}=="",NAME="eth2"
KERNEL=="eth*",SYSFS{address}=="",NAME="eth3"
KERNEL=="eth*",SYSFS{address}=="",NAME="eth4"
防止機器網卡的mac地址發生漂移
5)查看網卡陣列的配置狀況
#ifconfig -a|grep HWaddr
查看網卡mac信息,若是bond0,eth0,eth1硬件地址一致,則配置成功
#cat /proc/net/bonding/bond0
查看bond0工做狀態
附錄:
1.bond0上的mac地址修改爲一致,這些網卡接在同一臺交換機上,那麼該交換機的arp表同一mac地址對應的端口有多個,交換機沒法判斷數據包發往的端口,因此要求交換機的相應端口採起聚合模式,聚合後的端口採用同一mac地址。
2. 使網卡配置立刻生效,不用重啓機器,命令
#service network restart或
#/etc/rc.d/init.d/network restart
必須關閉NetworkManager服務
#service NetworkManager stop      //當前環境下關閉服務
#chkconfig NetworkManager off     //開機啓動關閉服務
3.從新啓動網卡,命令
#ifconfig bond0 down/ifdown bond0
#ifconfig eth0 down/ifdown eth0
#ifconfig eth1 down/ifdown eth1
#ifenslave bond0 eth0 
#ifenslave bond0 eth1 
#ifconfig bond0 up/ifup bond0
#ifconfig eth0 up/ifup eth0
#ifconfig eth1 up/ifup eth1
4. Bonding的模式一共有7種:
#defineBOND_MODE_ROUNDROBIN     0.balance-rr模式,網卡的負載均衡模式
#defineBOND_MODE_ACTIVEBACKUP    1.active-backup模式,網卡的容錯模式
#defineBOND_MODE_XOR             2.balance-xor模式,須要交換機支持
#defineBOND_MODE_BROADCAST      3.broadcast模式
#defineBOND_MODE_8023AD         4.IEEE 802.3ad動態鏈路聚合模式,須要交換機支持#defineBOND_MODE_TLB             5.自定義傳輸負載均衡模式
#defineBOND_MODE_ALB             6.網卡虛擬化方式
bonding模塊的全部工做模式能夠分爲兩類:多主型工做模式和主備型工做模式,balance-rr 和broadcast屬於多主型工做模式而active-backup屬於主備型工做模式。(balance-xor、自適應傳輸負載均衡模式 (balance-tlb)和自適應負載均衡模式(balance-alb)也屬於多主型工做模式,IEEE 802.3ad動態鏈路聚合模式(802.3ad)屬於主備型工做模式。
1)BOND_MODE_ROUNDROBIN模式下,bonding對於發送和接收數據的處理邏輯是不一致的,對於數據的接收,bonding基本不作任何處理,純粹依靠交換機端口與MAC的變化來實現交替接收數據。發送的話,交換機會根據數據的源MAC來學習端口和MAC之間的關係,因此bonding 作到的就是選擇不同的網卡發送。
2)網卡的容錯模式(mode =BOND_MODE_ACTIVEBACKUP),容錯模式的配置方法和負載均衡模式基本差很少,只不過修改一下/etc/modprobe.conf便可。
5.arp檢測模式
觀察交換機端口上所學習到的MAC地址,發現MAC會在兩個端口上反覆切換在BOND_MODE_ROUNDROBIN模式下,bonding對於發送和接收數據的處理邏輯是不一致的,對於數據的接收,bonding基本不作任何處理,純粹依靠交換機端口與MAC的變化來實現交替接收數據。發送的話,交換機會根據數據的源MAC來學習端口和MAC之間的關係,因此bonding 作到的就是選擇不同的網卡發送。
對於數據的發送,
static inline voidbond_set_mode_ops(struct net_device *bond_dev, int mode)
{
switch(mode) {
case BOND_MODE_ROUNDROBIN:
bond_dev->hard_start_xmit =bond_xmit_roundrobin;
break;
...
bond的發送函數被註冊爲bond_xmit_roundrobin。經過bond_xmit_roundrobin的實現能夠發現。
static int bond_xmit_roundrobin(structsk_buff *skb, struct net_device *bond_dev)
{
ead_lock(&bond->curr_slave_lock);
slave = start_at = bond->curr_active_slave;
read_unlock(&bond->curr_slave_lock);
bond_for_each_slave_from(bond, slave, i,start_at) {
if(IS_UP(slave->dev) &&
 (slave->link == BOND_LINK_UP) &&
 (slave->state ==BOND_STATE_ACTIVE)) {
res =bond_dev_queue_xmit(bond, skb, slave->dev);
write_lock(&bond->curr_slave_lock);
bond->curr_active_slave= slave->next;
write_unlock(&bond->curr_slave_lock);
break;
}
bond_xmit_roundrobin會經過curr_active_slave指針所指向的設備來進行發送,固然 curr_active_slave會在調用bond_dev_queue_xmit完成實際的發送以後指向下一個slave設備。 bond_dev_queue_xmit實際是調用通用的發送函數dev_queue_xmit來進行的,它傳遞給dev_queue_xmit的是一個 skb,在傳遞以前skb->dev就被指定爲了當前的slave設備,這樣內核就會找到對應的真實網卡設備來進行發送,最後 curr_active_slave指針的輪詢切換,實現了bonding的負載均衡工做模式。
從這種模式能夠看到,bonding實現了一個相似網卡驅動的模塊,對應的bond0設備是一個純粹的虛設備,數據發送雖說通過了它,但經過一系列調用,轉了一圈以後纔回到真正的網卡設備那裏進行發送,無疑會消耗必定的系統性能。
簡單用100Mbps速率的UDP數據包測試了一下BOND_MODE_ROUNDROBIN模式。
測試過程當中發現接收端會有較多的亂序包,觀察交換機端口狀況,端口之間的切換頻率不規則,這個和交換機的配置或者性能應該有很大聯繫,有必要的話須要進一步研究。數據的正確性和時序性可否保證須要進一步仔細測試。
6. mii鏈路檢測方式
與以前arp檢測方式不一樣。這兩種鏈路檢測方式在各類mode下都是可使用的,但要注意不能同時使用。
bonding的mii檢測實現。首先和arp-monitor同樣,mii也是定時器觸發
if(bond->params.miimon) {  /* link checkinterval, in milliseconds. */
init_timer(mii_timer);
mii_timer->expires= jiffies + 1;
mii_timer->data  = (unsigned long)bond_dev;
mii_timer->function = (void*)&bond_mii_monitor;
add_timer(mii_timer);
}
bond_mii_monitor函數其本質的原理就是檢測網卡的鏈路狀態,bonding定義網卡有4個鏈路狀態:BOND_LINK_UP:
正常狀態(處於該狀態的網卡是是潛在的發送數據包的候選者)
BOND_LINK_FAIL:網卡出現故障,向狀態BOND_LINK_DOWN 切換中
BOND_LINK_DOWN:失效狀態
BOND_LINK_BACK:網卡恢復,向狀態BOND_LINK_UP切換中
從上到下,表示了網卡鏈路從正常到失效再到恢復狀態。bond_mii_monitor函數就是依次檢查網卡的鏈路狀態是否處於這些狀態,而後經過標記 do_failover變量來講明當前是否須要切換slave網卡。代碼篇幅較大,但邏輯仍是很清晰的,故此處不羅列了。
在BOND_MODE_ACTIVEBACKUP模式下,兩塊網卡其實有一塊是不工做的,被設置爲IFF_NOARP的狀態。同時,bond虛設備,還有 slave設備的MAC地址均一致,因此這張網卡不會被外界察覺存在。交換機也不存在想該端口發包的狀況。當bond的mii檢測發現當前的active 設備失效了以後,會切換到這個備份設備上。
在bond_change_active_slave函數中
if (bond->params.mode ==BOND_MODE_ACTIVEBACKUP) {
if (old_active) {
bond_set_slave_inactive_flags(old_active);
}
if (new_active) {
bond_set_slave_active_flags(new_active);
}
}
這個就是在BOND_MODE_ACTIVEBACKUP模式下的切換邏輯,很簡單,須要注意的是,在 bond_set_slave_inactive_flags(old_active)中,須要將接口的狀態設置爲IFF_NOARP,否則交換機就可能 會把數據包發送到一個錯誤的端口上。
BOND_MODE_ACTIVEBACKUP模式下的數據發送很是簡單,可想而知curr_active_slave指針始終都指向當前可用的設備,所 以直接發送就能夠,沒有以前BOND_MODE_ROUNDROBIN模式下slave設備切換的過程。
相關文章
相關標籤/搜索