这章列出了一些有关Linux的高级路由和流量整形的计划。其中有些链接应该单独写一章,有些本身的文档十分完整,不需要更多的HOWTO。
1Q VLAN在Linux上的实现(网站)
VLAN是一种使用非物理方法把网络划分成多个部分的技术。这里可以找到很多有关VLAN的信息。利用这个实现,你可以让你的Linux机器与VLAN设备(比如">Cisco Catalyst,3Com: <Corebuilder, Netbuilder II, SuperStack II switch 630>,Extreme Ntwks Summit 48,Foundry: <ServerIronXL, FastIron>)交流。
这里有关于VLAN非常好的HOWTO。
更新:这个计划已经归入了2.4.14 (也可能是13)版的内核。
1Q VLAN在Linux上的另一个实现(网站)
如题。这个计划从一开始与已经确立的vlan计划的体系和编码风格并无不协调之处,结果可以有一个非常干净的整体设计。
Linux虚拟服务器(网站)
这些人很聪明。Linux虚拟服务器是由一个Linux系统的负载均衡器把多个真实服务器组织起来,成为一个高度可伸缩、高可靠服务器方案。对于最终用户而言,集群的内部结构识完全透明的,他们只能看到一个单一的虚拟服务器。
简单地说,无论你针对哪一层流量和是否需要负载均衡,LVS总有方法来实现。他们的一些技术非常绝妙!比如,让同一网段上的几台机器使用相同的IP,但是关闭它们的ARP。只有LVS服务器才使用ARP——由它来决定哪个后端服务器来处理到来的数据包,然后把它发送给对应后端服务器的MAC地址。出去的数据包则直接发给路由器,而不必经过LVS机器,也就是LVS不会看到你那发到全世界的5Gbps数据流,从而避免了成为瓶颈。
LVS在Linux2.0和2.2上以内核补丁的方式实现,而在2.4/2.5上则以Netfilter模块的方式实现,不需要内核补丁。他们的2.4支持尚处在早期开发,希望大家捧场并给出回馈和补丁。
CBQ.init (site)
配置CBQ确实令人厌烦,尤其当你仅仅是想把路由器后面的几台机器进行流量整形的时候。CBQ.init可以帮助你用很简单的语法来配置你的Linux路由器。
比如,你想把192.168.1.0/24子网(连接在10Mbps的eth1)的下载速率限制在28kbps上,只要把这些行放在CBQ init配置文件中即可:
DEVICE=eth1,10Mbit,1Mbit
RATE=28Kbit
WEIGHT=2Kbit
PRIO=5
RULE=192.168.1.0/24
如果你对于“如何?为什么?”这类问题不感兴趣的话,一定得用它。我们在产品中使用了CBQ init,情况良好。他还可以做一些高级配置,比如整形时间表。文档嵌入在脚本中,所以你找不到单独的README。
Chronox easy shaping scripts (site)
Stephan Mueller (smueller@chronox.de) 写了两个有用的脚本,“limit.conn”和“shaper”。第一个让你轻松地限制一个下载会话,象这样:
# limit.conn -s SERVERIP -p SERVERPORT -l LIMIT
工作于Linux 2.2和2.4/2.5。
第二个脚本稍稍复杂些,可用于在iptables规则上生成很多不同的队列(利用标记和整形)。
虚拟路由器冗余协议的实现(网站)
这纯粹是为了冗余。两台机器,用他们各自的IP地址和MAC地址构造出第三个虚拟的IP地址和MAC地址。最初纯粹为需要固定MAC地址的路由器而设计,其实也可以用在服务器上。
它的可爱之处在于配置异常简单。不需要补丁和编译内核,全是用户级的。
在共同提供一个服务的服务器上运行:
# vrrpd -i eth0 -v 50 10.0.0.22
就可以用了!10.0.0.22现在代表你的一台服务器,可能是运行vrrp守护程序的第一台机器。现在把这台机器从网络上断开,令一台机器会迅速接管10.0.0.22这个地址及其MAC地址。
我这里做了一个试验,并持续运行了1分钟。不知为什么,总是drop my 缺省网关,但是可以用-n选项避免。
这就是失效恢复现场:
64 bytes from 10.0.0.22: icmp_seq=3 ttl=255 time=0.2 ms
64 bytes from 10.0.0.22: icmp_seq=4 ttl=255 time=0.2 ms
64 bytes from 10.0.0.22: icmp_seq=5 ttl=255 time=16.8 ms
64 bytes from 10.0.0.22: icmp_seq=6 ttl=255 time=1.8 ms
64 bytes from 10.0.0.22: icmp_seq=7 ttl=255 time=1.7 ms
一个ping包也没有丢!在第4个包之后我从网络上断开了我的P200,然后我的486来接管,你可以看出延迟提高了。