由 leijinying 在 04-09-2004 22:18 发表:
请问怎么设置多网卡一个Ip以及多网卡多Ip,以及网络设置!
原因 :网速慢了,因此就想提高,那就是多个网卡了,一个方案是一个ip多个网卡,当然了设置的时候希望mac地址也是一个!----也就是多个网卡虚拟成一个网卡--Bonding技术!!--这个的上网问题可能会好一点,我可以用两个网卡的带宽!
一个就是多网卡多ip方案。我自己设置多个ip多个网卡,然后服务器设置的时候是不是要注意哪些呢?是不是说要注意必须注明这个程序的Ip比如我的apache必须把ip这个写的清清楚楚???还有ftp服务器的配置,,等等??
那么我上网的时候到底用的是那个上网呢?????
还有我们用的是一个认证方式,那么是不是说要在每一个有网络功能的程序运行的时候设置什么环境变量什么的?然后才知道现在用的是那个ip??
目的 ;为了提供网速,或者服务质量---多个网卡,带宽不就大了吗??
呵呵
大家说说什么方案,以及解决办法,以及怎么样配置什么的,我是个菜鸟,因此希望大家可以给连接,也可以给说明,提意见什么的?? 谢谢
我有点菜!但是我会努力的!
由 leijinying 在 04-09-2004 22:19 发表:
Bonding技术
将多块网卡虚拟成为一块网卡,使其具有相同的IP地址,来实现提升主机的网络吞吐量或者
是提高可用性,这种技术被称作bonding。这项技术其实在 sun和cisco中已经存在,分别称
为Trunking和etherchannel技术,在Linux中,这种技术称为bonding。
bonding驱动最早来自于Donald Becker的beowulf对kernel2.0的补丁。但是已经有了很大的
改进和变化,最早来自于extreme-linux和beowulf的工具已经不适用于现在版本的驱动了。
对于新版本的驱动,请参考本文最后的链结地址。
1、安装
- 编译带有bonding driver的内核
对于最新版本的bonding驱动,使用内核2.2.18或以上版本(否则需要对内核打补丁)。
使用make menuconfig/xconfig/config来编译内核,并在"Network device support"部分选
择 "Bonding driver support",这里推荐配置该驱动为模块方式,因为目前这是传递给参
数给驱动并配置多个bonding设备的唯一方法。
编译和安装新的内核和模块:
make dep;make clean;make bzImage;make modules;make modules_install;
- 获取并安装用户管理工具
这个版本的bonding驱动需要新的ifenslave程序。来自extreme-linux和beowulf的原始工具
程序不能在这里使用。内核 2.2.18及其以上版本在Documentation/network中包含文件
ifenslave.c。对于更老的内核,请参考文章最后的资源链结部分的内容。
安装ifenslave.c:
gcc -O2 -s -o ifenslave ifenslave.c# cp ifenslave /sbin/ifenslave
- 配置系统
参考下一部分关于模块参数的内容。首先需要在/etc/conf.modules中添加如下内容:
alias bond0 bonding
使用标准的发布技术来定义bond0这个网络接口,例如在redhat发布中,在
/etc/sysconfig/network-scripts目录中添加ifcfg-bond0文件:
DEVICE=bond0IPADDR=192.168.1.1NETMASK=255.255.255.0NETWORK=192.168.1.0BROADCAST=
192.168.1.255ONBOOT=yesBOOTPROTO=noneUSERCTL=no
所有属于bond的接口动必须被定义为SLAVE或MASTER。例如,在Redhat中,如果希望定义
eth0和eth1定义为属于接口bond0的一部分,那么它们的配置文件(ifcfg-eth0,
ifcfg-eth1,等)间如下所示:
DEVICE=eth0USERCTL=noONBOOT=yesMASTER=bond0SLAVE=yesBOOTPROTO=none
。
如果管理工具支持可以重新启动网络子系统或者仅仅启动bonding设备,否则重新启动机器
。(对于redhat发布,使用ifup bond0'或/etc/rc.d/init.d/network restart')
如果你的发布提供的管理工具不支持在网络接口配置中定义master/slave,则需要使用下面
的命令手工配置bonding设备:
/sbin/ifconfig bond0 192.168.1.1 up# /sbin/ifenslave bond0 eth0#
/sbin/ifenslave bond0 eth1
当然也可以将这些命令定义为一个脚本,以方便执行。
- 模块参数
下面的模块参数可能被传递:
mode=
可能的值为0(默认的轮转模式round robin policy),或者1(热备份模式),参考下面的HA部
分来得到更多的相关信息。
miimon=
整数值,定义MII链路监测频率(单位为频率)。默认值为0,表示关闭链路监测。如果希望使
用链路监测,一个合适的值为100。参考HA部分得到更多信息。
downdelay=
在发现链路故障时,这里规定的整数值定义disable一个链路的延迟(单位为毫秒)。必须是
miimon的整数倍。默认值为0。参考HA部分得到更多信息。
updelay=
侦测到"link up"状态时,这里规定的整数值定义了enable一个链路的延迟。必须是miimon
的整数倍。默认值为0。参考HA部分得到更多信息。
如果需要定义多个bonding设备,驱动必须被多次加载。例如,对于有两个bonding设备的情
况,/etc/conf.modlues必须包含如下内容:
alias bond0 bondingalias bond1 bonding
options bond0 miimon=100options bond1 -o bonding1 miimon=100
- 测试配置
可以通过ifconfig命令来监测配置和传输策略,例如对于轮转策略,你应该得到如下信息:
[root]# /sbin/ifconfigbond0 Link encap:Ethernet HWaddr 00:C0:F0:1F:37:B4 inet
addr:XXX.XXX.XXX.YYY Bcast:XXX.XXX.XXX.255 Mask:255.255.252.0UP BROADCAST
RUNNING MASTER MULTICAST MTU:1500 Metric:1RX packets:7224794 errors:0 dropped:0
overruns:0 frame:0TX
packets:3286647 errors:1 dropped:0 overruns:1 carrier:0collisions:0 txqueuelen:0
eth0 Link encap:Ethernet HWaddr 00:C0:F0:1F:37:B4 inet addr:XXX.XXX.XXX.YYY
Bcast:XXX.XXX.XXX.255 Mask:255.255.252.0UP BROADCAST RUNNING SLAVE MULTICAST
MTU:1500 Metric:1RX packets:3573025 errors:0 dropped:0 overruns:0 frame:0TX
packets:1643167
errors:1 dropped:0 overruns:1 carrier:0collisions:0 txqueuelen:100 Interrupt:10
Base address:0x1080
eth1 Link encap:Ethernet HWaddr 00:C0:F0:1F:37:B4 inet addr:XXX.XXX.XXX.YYY
Bcast:XXX.XXX.XXX.255 Mask:255.255.252.0UP BROADCAST RUNNING SLAVE MULTICAST
MTU:1500 Metric:1RX packets:3651769 errors:0 dropped:0 overruns:0 frame:0TX
packets:1643480
errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:100 Interrupt:9
Base address:0x1400
问题:
1. bonding会不会和SMP冲突?
不会,老的2.0.xx版本配合SMP使用会发生冲突,而新的内核不会发生问题。
2. 哪种类型的网卡可以用作bonding?
任何类型的网卡(甚至可以使用混合类型的网卡-一个Intel的therExpress PRO/100和a 3com
3c905b),甚至可以将两个Gigabit以太网卡bond在一起使用。
3. 我可以拥有多少个bonding设备?
对应于加载的一个模块,就可以拥有一个bonding设备,参考模块参数部分来了解如何实现
。
4. 一个bonding设备可以有多少个salve网卡?
受限于linux可以支持的网卡数量和系统可以插接的网卡数量。
5. 当一个slave链路出现故障,会发生什么问题?
如果你的以太网卡支持MII状态监控,并且MII监测已经在驱动中被使用(参考模块参数部分
内容),那么就不会出现什么不幸的结果。这个版本的 bonding驱动能得到MII信息并且根据
链路状态来enable或者disable某个slave网卡。参考HA部分得到更多信息。
所有不能报告自己的链路状态的以太驱动不能很好地处理这种情况。bonding驱动不能连续
发送数据报,而导致某些数据报丢失。而重传可能会引起严重的性能问题(如果一块网卡丢
失,那么可能会对TCP或UDP带来严重的性能影响)。
6. bonding能被用作高可用性项目么?
当然可以,如果使用了MII监测,并且你所有的网卡驱动都支持MII链路状态汇报。参考HA部
分内容。
7. bonding能适用于哪种类型的switches/systems?
在轮转模式,它和下面支持trunking的系统能一起工作:
- Cisco 5500 series (参考EtherChannel支持相关内容)。 * SunTrunking software.*
Alteon AceDirector switches / WebOS (使用Trunks). * BayStack Switches (trunks必
须被配置). 可堆叠的模块(450)能在不同的物理单元的端口中定义 * Linux bonding.
对于热备份模式下,它能和一切二层交换机工作。
8. 一个bonding设备的MAC来自于哪个网卡?
如果没有明显使用ifconfig来配置指定,bonding设备的MAC地址从它的第一个slave中得到
。这个MAC地址随即被传递个所有其他的 slave设备,这些其他的slave设备将具有这个MAC
,即使第一个Slave设备被去除。只有bonding设备重起或者down了,MAC地址才会改变。
如果希望修改MAC地址,可以使用ifconfig来设置:
ifconfig bond0 ha ether 00:11:22:33:44:55
可以通过up/down设备,然后修改其slave的顺序来改变bonding设备的MAC地址:
ifconfig bond0 down ; modprobe -r bonding# ifconfig bond0 .... up# ifenslave
bond0 eth...
这个方法将自动从下一个将被添加的slave中得到地址。
为了恢复slave的MAC地址,需要将其从bonding设备中分离出来(`ifenslave -d bond0
eth0'),down掉该设备 (ifconfig eth0 down'),去除模块(rmmod 3c59x'),然后重载其以
使其从其eeproms中得到其MAC地址。若一个驱动被多个设备所拥有,那么需要将其全部
down掉。另外一种方法
是察看启动时该卡的MAC地址(dmesg或 tail /var/log/messages),并使用ifconfig来
reset它:
ifconfig eth0 down# ifconfig eth0 hw ether 00:20:40:60:80:A0
9. 哪些使用哪些传输模式?
轮转模式:基于slave的顺序,依次轮转通过不同网卡发送数据;
热备份模式:确保在同一时刻仅仅通过一个网卡发送数据,另外一个作为该激活卡的热备份
,在激活卡出现故障时数据流马上切换到热备份卡,这种模式常常用于使用交换机的高可用
性中(high availability solutions
高可用性
为了使用bonding驱动实现高可用性,需要将该驱动编译为模块,因为目前这时传递参数给
驱动的唯一方式。以后这种情况可能会改变。首先需要确保所有的网卡支持MII链路状态报
告。在Linux2.2.17及以上版本中,所有的百兆以太网和yellowfin千兆以太网都支持MII链
路状态报告。如果
你的网卡驱动不支持这种技术,那么会将链路状态监测为有故障。
bonding驱动目前通过监测MII状态注册器来侦测其所有的slave链路。侦测间隔有模块参数
"miimon"来定义。该值为整数值,单位为milliseconds。100ms是一个合适的值,因为太小
的值可能影响系统性能。也就是说链路发生故障以后在100ms秒以内将会被发现。
例如:
modprobe bonding miimon=100
或在/etc/modules.conf定义如下内容:
alias bond0 bondingoptions bond0 miimon=100
目前对高可用性有两个策略,依赖于主机是否
a) 主机连接到单台主机或支持trunking的交换机b) 主机连接到多个不同的交换机上,或单
个不支持trunking的交换机
- 在单交换机或主机上的HA-负载均衡
这种模式易于配置和理解,只需要简单的配置远程设备(主机或交换机)来将数据流量分散在
多个端口(trunk, etherchannel等),并配置 bonding接口。如果模块加载时指定了MII参数
,MII将自动工作。可以通过去除或恢复不同的链路,然后再log文件中察看驱动设备监测到
了哪些信息。
在监测时,你也许会遇到这样的问题:如果trunk连接的所有接口都down掉以后,有些具有
bug的交换机会长时间地diable trunk。可以通过重新启动交换机来修正这些问题。
例1:主机和主机间实现倍速:
在每个主机中,运行:
modprobe bonding miimon=100# ifconfig bond0 addr# ifenslave bond0 eth0 eth1
例 2:主机连接交换机以实现倍速:
在主机A中运行:
modprobe bonding miimon=100# ifconfig bond0 addr # ifenslave bond0 eth0 eth1
在交换机中:
#对port1和port2设置trunking。
- 在多个交换机或主机上的HA-负载均衡(或不支持trunking技术的单交换机情况)
这种模式更可能会出现问题,因为它依赖于这样的事实:虽然有多个端口,但是主机MAC地
址只能被一个端口可见以避免混淆交换机。
如果需要知道哪个哪个端口是活动的,哪个是备份的,那就使用ifconfig。所有的备份接口
设置有NOAEP标志。为了使用该模式,在加载时传递"mode=1"给模块:
modprobe bonding miimon=100 mode=1
或者在/etc/modules.conf中添加如下内容:
alias bond0 bondingoptions bond0 miimon=100 mode=1
例1:使用多个主机和多个交换机来创建"无单故障点瓶颈"解决方案:
在这种配置下,这里有一个ISL- 交换机间连接(Inter Switch Link,可能是一个trunk),多
个主机(host1, host2 ...)都同时连接到交换机,并且多个端口连接到外部网络
(port3...),每个主机中同时只有一个slave是激活的,但是所有的链路仍然被监测(系统能
监测到活动链路的故障并
启动备份链路)。
如果host1和host2具有同样的功能,并且被用在负载均衡中,那么将 host1的活动接口连接
到其中一个交换机而host2连接到另外一个交换机上是一个非常不错的选择。这种系统在单
个主机、交换机或者线路出问题时仍能保证工作。最糟糕可能情况是,单个交换机出现故障
,其中一台主机
将不可访问,直到另外一个交换机维护的转发表过期,另外一个主机才会转换激活接口到正
常的交换机上。
例 2:使用多个以太网卡连接到一个交换机,以应付NIC故障的情况,以提高可用性:
在主机A中:
modprobe bonding miimon=100 mode=1 # ifconfig bond0 addr# ifenslave bond0 eth0
eth1
在交换机中:
(可选地)最小化转发表过期时间
每次主机切换其活动接口,它将使用新的接口直到该接口出现故障。在这个例子中,主机受
交换机转发表的过期时间影响很大。
- 调整交换机的频率
如果交换机转换到备份接口需要花费太长的时间,一般来说都希望在当前接口发生故障的情
况下立即启用备用接口。可以通过传递模块参数"downdelay"来实现减少完全disable一个接
口的延迟。
当一个交换机重启以后,可能出现其端口在端口可用以前报告"link up"状态。这可能使得
bonding设备使用还不可用的端口这可能通过传递模块参数"updelay"来延迟活动端口被重新
可用的时间。
当一个主机和交换机重新交互以确定一个丢失的链路也会出现同样的问题。
在bonding接口丢失了其所有的slave链路的情情况下,则驱动将马上使用第一个up的接口,
而不受updelay参数的限制。这样可以减少系统down的时间。
例如:
modprobe bonding miimon=100 mode=1 downdelay=2000 updelay=5000# modprobe
bonding miimon=100 mode=0 downdelay=0 updelay=5000
- 限制
主要限制是:
只有链路状态被监控,如果交换机本身down掉了,例如不再转发数据但是链路仍然完好。则
链路不会被diable。另外一个监测故障链路的方式统计一个沉重负载主机的接入数据帧数量
。但是对于哪些负载较小的服务器则不大适用。
资源链结
Donald Becker的以太驱动和diag程序可以在下面的到:
- http://www.scyld.com/network/- http:/