热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

RedHat服务器网卡阵列配置攻略分享

网卡阵列配置1.修改vietcrc.drc.local文件,增加以下内容(注意这里添加的是eth0、eth1两个网口)代码如下:ifenslavebond0eth0eth1#如果一

网卡阵列配置
1.修改vi /etc/rc.d/rc.local文件,增加以下内容(注意这里添加的是eth0、eth1两个网口)

代码如下:

ifenslave bond0 eth0 eth1
#如果一块网卡失效,%ignore_a_1%会按照/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,不然交换机就可能 会把数据包发送到一个错误的端口上。

—-想了解更多的服务器相关问题处理怎么解决关注<编程笔记>




推荐阅读
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • 本文详细解析了 Android 系统启动过程中的核心文件 `init.c`,探讨了其在系统初始化阶段的关键作用。通过对 `init.c` 的源代码进行深入分析,揭示了其如何管理进程、解析配置文件以及执行系统启动脚本。此外,文章还介绍了 `init` 进程的生命周期及其与内核的交互方式,为开发者提供了深入了解 Android 启动机制的宝贵资料。 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati ... [详细]
  • 通过将常用的外部命令集成到VSCode中,可以提高开发效率。本文介绍如何在VSCode中配置和使用自定义的外部命令,从而简化命令执行过程。 ... [详细]
  • 在 CentOS 6.4 上安装 QT5 并启动 Qt Creator 时,可能会遇到缺少 GLIBCXX_3.4.15 的问题。这是由于系统中的 libstdc++.so.6 版本过低。本文将详细介绍如何通过更新 GCC 版本来解决这一问题。 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 单片微机原理P3:80C51外部拓展系统
      外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC。0.IO接口电路概念与存 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 在Android平台中,播放音频的采样率通常固定为44.1kHz,而录音的采样率则固定为8kHz。为了确保音频设备的正常工作,底层驱动必须预先设定这些固定的采样率。当上层应用提供的采样率与这些预设值不匹配时,需要通过重采样(resample)技术来调整采样率,以保证音频数据的正确处理和传输。本文将详细探讨FFMpeg在音频处理中的基础理论及重采样技术的应用。 ... [详细]
  • 2016-2017学年《网络安全实战》第三次作业
    2016-2017学年《网络安全实战》第三次作业总结了教材中关于网络信息收集技术的内容。本章主要探讨了网络踩点、网络扫描和网络查点三个关键步骤。其中,网络踩点旨在通过公开渠道收集目标信息,为后续的安全测试奠定基础,而不涉及实际的入侵行为。 ... [详细]
  • JBPM 6.5 环境配置深入解析(下篇)
    本文深入探讨了JBPM 6.5 的环境配置细节,从零开始详细介绍了下载、解压后的文件结构,并结合实际操作步骤,为初学者提供了全面的配置指南。通过具体的示例和详细的解释,帮助读者快速掌握 JBPM 6.5 的安装与配置过程。 ... [详细]
  • 在CentOS上部署并使用FFmpeg多媒体处理工具
    最近在进行音频处理时需要用到FFmpeg,本文将详细介绍如何在CentOS系统上部署并使用这一强大的多媒体处理工具。首先,从官方网站下载FFmpeg的最新版本,然后通过Xftp工具将下载的压缩包(如ffmpeg-4.3.1.tar.xz)传输到服务器上。接下来,解压文件并按照官方文档进行编译安装。安装完成后,可以通过命令行工具验证FFmpeg是否成功安装,并开始进行多媒体文件的转换和处理。此外,文章还将介绍一些常用的FFmpeg命令和参数,帮助用户快速上手。 ... [详细]
author-avatar
彭元蓮_198
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有