双网卡绑定:在linux下如何做双网卡绑定实现冗余?

 


、Linux Channel Bonding
目前在各个发行版本 Linux 中使用最普遍内核版本应该就是 2.4.x版本了而 Linux Channel Bonding 在 Linux 2.4 内核中 就提供了 bonding 驱动 可以支持把多个网络适配器集合在 当作个网络适配器来使用
在 Linux 下网卡高可用性是通过 MII 或者 ETHTOOL 状态监测来实现所以需要检查系统中网络适配器是否支持 MII 或者 ETHTOOL 连状态监测可以用命令 "ethtool eth0" 来检查如果显示 "Link detected:" 信息和实现连接状态就没有问题如果系统中网络适配器不支持 MII 或者 ETHTOOL 状态监测当连接失效时系统就不能检测到同时在 bonding 驱动加载时会记录条不支持 MII 和 ETHTOOL 警告信息
下面简单介绍下实现基本思路方法:
首先我们需要打开内核对 bonding 支持
设置内核 "make menuconfig/xconfig/config"在"Network device support"区段中选择"Bonding driver support"建议设置该驱动为模块这样才能支持给驱动传递参数和设置多个bonding设备
生成并安装新内核和模块
Bonding 设置
我们需要在 /etc/modules.conf 中加入两行这样才可以在设置了 bond 设置后系统启动时候自动加载 bonding 驱动
alias bond0 bonding
options bond0 miimon=100 mode=1
当mode=1时为主备模式mode=0时为负载均衡模式
另外在 /etc/sysconfig/network-scripts 目录中创建个名为 cfg-bond0 文件
DEVICE=bond0
IPADDR=192.168.1.1
NETMASK=255.255.255.0
NETWORK=192.168.1.0
BROADCAST=192.168.1.255
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
在 bond 中所有网络适配器脚本中都要有 SLAVE 和 MASTER 定义例如如果要让eth0和eth1成为bond0成员它们对应配置文件(cfg-eth0和cfg-eth1)就要仿照下面内容进行更改:
DEVICE=eth0
USERCTL=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
在脚本文件cfg-eth1中把eth0替换成eth1同时根据需要还要加入IP地址方面信息如果需要设置另外 bonding 设备(例如bond1)就把MASTER=bond0改成bond1这样该网络适配器就成为bond1附属设备了
使 bond 生效
用命令 "/etc/rc.d/init.d/network restart" 重新启动网络子系统也可以重新启动系统来使 bond0 生效
这样bond 设置就基本结束了如果希望了解更详细信息可以参考 "/usr/src/linux-2.4/Documentation/networking/bonding.txt"


2、Linux 下 BASP(Broadcom Advanced Server Program)
Broadcom 公司不仅在 Windows 平台上提供了 BASP 工具来实现网卡高可用性同样在 Linux 操作系统下也提供了对应工具来实现下面就介绍下如何在 Linux 下利用 BASP 来实现多块 Broadcom 以太网卡 teaming
首先BASP 是个为 2.4.x 内核设计模块通过由多个网卡创建team可以提供负载平衡(load-balancing)容错(fault-tolerance)和 VLAN等功能个 team 可以包括1到8块网卡每块网卡都可以被指定为主(Primary)或者是热备(hot-standby只适用于SLB team)team 中所有主网卡都会通过发送和接收全部网络流量部分来参和负载平衡工作而热备网卡会在所有主网卡失去连接时进行接管VLAN 可以添加到 team 中通过区别 VLAN ID 来实现多个 VLAN每个 VLAN 都会创建个虚拟设备
通常我们得到 BASP 打包文件中包括两个文件个是 RPM 包个是 TAR 格式文档
安装 TAR 文档
解压并展开 TAR 文档
% tar xzvf basplnx-{version}.{arch}.tgz
(1) 创建内核模块 "basp.o"
% make
(2) 创建设备文件并复制文件
% make
(3) 更新模块信息
% depmod -a
(4) 加载驱动
% insmod basp
安装 RPM 包
(1) 安装 RPM 源文件包
% rpm -i basplnx-{version}.src.{arch}.rpm
(2) 进入 RPM 路径并为内核创建驱动
% cd /usr/src/redflag
% rpm -bb SPECS/basplnx.spec
注意:如果 Linux 发行版本包含是 RPM v4.1 或者更新版本使用 rpmbuild 命令代替 "rpm"
(3) 安装刚刚创建
% rpm -i RPMS/i386/basplnx-{version}.{arch}.rpm
驱动和其它需要文件会自动被安装
(4) 加载驱动
% insmod basp
下面介绍下配置信息
在 BASP 包里面包含了个工具和几个 team 配置脚本大部分步骤要在第次安装完驱动以后来做而步骤"更改配置脚本"是只要需要更改 team 配置就可以参照着来操作
由于 Linux 不会自动加载网络设备驱动除非该设备设置了IP地址所以用户必须为 team中所有物理适配器手工配置个网络脚本文件这些网络脚本文件位于 /etc/sysconfig/network-scripts 文件名必须以 "cfg-" 开头然后跟着物理适配器别名如果是网卡 eth0就应该创建个文件该文件文件名是 cfg-eth0然后加入下面内容
DEVICE=eth0
BOOTPROTO=
ONBOOT=yes
配置过程包括下面几个步骤:
1. 可以从 "/etc/basp/samples" 目录中拷贝个配置脚本到 "/etc/basp" 目录注意配置脚本文件名必须是以 "team-" 开头
2. 更改配置脚本:
(a) 更改 team 类型
(b) 添加/删除物理网络适配器
(c) 添加/删除虚拟网络适配器
(d) 为每个虚拟网络适配器分配IP地址
配置脚本中语法可以在 /etc/basp/sample/team-sample 脚本文件中查到注意在配置 Teaming 时至少要有个主适配器 (Primary Adapter)
3.在第次时手工启动 team:
% /etc/init.d/basp start
注意:这个步骤只在第次安装时需要在以后启动过程中team 配置会自动启动
注意:如果所有虚拟网络适配器中有没有设置 IP 地址那么在启动 BASP team 过程中会有信息如果出现这种现象请按照步骤2操作为所有虚拟网络适配器配置 IP 地址
注:如果要创建多个 team 可以拷贝举例脚本文件到 "/etc/basp/team-<名称>"然后根据需要更改举例文件


3、Intel ANS (Advanced Networking Services) for Linux
ANS 是 Intel 公司提供在 Linux 系统下实现 teaming (包括其它厂商 Multi-Vendor Teaming) 和 VLAN 软件Software包目前从 Intel 网站WebSite上可以下载最新版本是 3.0.2
这个版本 ANS 对基于 Linux 网卡驱动要求 如果是 PRO/100 网卡 驱动版本要求是 e100-2.3.x 如果是 PRO/1000 网卡 驱动版本要求是 e1000-5.2.x而有发行版本中提供驱动没有包含 ANS 需要 MII 接口支持
另外 对于 Linux 内核 要求是 2.4.7 或者更高 同时 该软件Software包也支持基于安腾系统
当前版本 ANS 也可以用命令行工具 PROCfg 来配置 使用 PROCfg 好处是可以省去很多手工配置麻烦但是 PROCfg 目前只能在32位架构上使用
注:ANS 只在以模块方式加载驱动环境下测试过 并没有在把驱动静态建立在内核中环境下进行过测试
对于 MVT (Multi-Vendor Teaming) 支持 要求 team 中至少要有块 Intel 服务器网络适配器并且做为主设备 而其它厂商网络适配器驱动也要正常加载 而建立 team 时使用命令和参数和 Intel 网卡相同.
下面先讲下 ANS 安装:
首先确认所有网络适配器工作正常 并且驱动 e100.o 和/或 e1000.o 位于 /lib/modules//kernel/drivers/net/ (区别 LINUX 发行版本路径可能会有所区别)
1. 以 root 身份登录
2. 拷贝 iANS-3.0.2.tar.gz 到 /tmp 下
3. 用命令 "tar xzf iANS-3.0.2.tar.gz" 展开
4. 进入 iANS-3.0.2/src 目录 运行 "make" 来编译
5. 运行 "make "
配置 ANS
要配置 ANS 有下面几种思路方法:
1. PROCfg 工具 这是个简单配置工具 可以减少命令行方式输入工作
2. 脚本 建议新用户使用
3. 手工 使用 ianscfg 工具
下面以手工配置方式为例:
1. 停止要加入 team 中网络适配器
config -a (列出当前所有网络设备)
config ethx down (停止网络适配器 这样 ANS 才可以使用它们x代表网络适配器序号)
2. 加载 ANS 模块
insmod ians
3. 用 ianscfg 工具来创建和更改 team
ianscfg -a -t test (创建名称为 test team 默认情况下 team 类型是 AFT Adapter Fault Tolerance)
ianscfg -a -t test -m eth0 (添加 eth0 到名称为 test team 中)
ianscfg -a -t test -m eth1 (添加 eth1 到名称为 test team 中)
ianscfg -a -t test -v vnet0 (添加名称为 vnet0 虚拟网络适配器到 test 中)
ianscfg -c test (提交名称为 test team 信息)
4. 激活 team
config vnet0 [netmask <子网掩码>]现在 网卡就可以工作了.
5. 通过 ianscfg 我们可以保存 ANS 配置 也可以恢复以前配置
如果希望在系统每次启动时候 都激活配置好 team 可以用下面命令
ianscfg -w -b (保存当前 team 配置信息到默认 /etc/ians/ians.conf 文件中 并且在启动过程中加载)
通常情况下 我们为虚拟网卡设置都是静态IP地址 所以 我们要检查下 /etc/sysconfig/network-scripts/ 目录中对应脚本是否和我们希望
例如:
脚本 cfg-vnet0
DEVICE=vnet0
ONBOOT=yes
BOOTPROTO=
IPADDR=
NETMASK=<子网掩码>
这样 整个 ANS 配置工作就基本结束了. 如果要了解更详细信息 可以参见 iANS 软件Software包中 README 文件 以及 man ianscfg.
从上面几种思路方法来看如果要实现VLAN功能就需要 BASP 或者 iANS 这样工具同时还要使用对应可以支持网络适配器当使用第 3方网络适配器时BASP和iANS都不能实现VLAN功能如果只是需要实现网卡高可用性 3种思路方法都可以实现

Tags:  双网卡绑定方法 intel双网卡绑定 双网卡绑定软件 双网卡绑定

延伸阅读

最新评论

发表评论