您好,欢迎来到思海网络,我们将竭诚为您提供优质的服务! 诚征网络推广 | 网站备案 | 帮助中心 | 软件下载 | 购买流程 | 付款方式 | 联系我们 [ 会员登录/注册 ]
促销推广
客服中心
业务咨询
有事点击这里…  531199185
有事点击这里…  61352289
点击这里给我发消息  81721488
有事点击这里…  376585780
有事点击这里…  872642803
有事点击这里…  459248018
有事点击这里…  61352288
有事点击这里…  380791050
技术支持
有事点击这里…  714236853
有事点击这里…  719304487
有事点击这里…  1208894568
有事点击这里…  61352289
在线客服
有事点击这里…  531199185
有事点击这里…  61352288
有事点击这里…  983054746
有事点击这里…  893984210
当前位置:首页 >> 技术文章 >> 文章浏览
技术文章

.RedHat服务器网卡阵列配置

添加时间:2016-8-17 1:59:06  添加: 思海网络 
网卡阵列配置
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-s
新增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,不然交换机就可能 会把数据包发送到一个错误的端口上。

关键字:.RedHat、服务器、网卡阵列
分享到:

顶部 】 【 关闭
版权所有:佛山思海电脑网络有限公司 ©1998-2024 All Rights Reserved.
联系电话:(0757)22630313、22633833
中华人民共和国增值电信业务经营许可证: 粤B1.B2-20030321 备案号:粤B2-20030321-1
网站公安备案编号:44060602000007 交互式栏目专项备案编号:200303DD003  
察察 工商 网安 举报有奖  警警  手机打开网站