本章所列均为 Linux 路由和流量引导所需进行的计划。关于这些联结﹐有些可能要完全参考原文件﹔有些则自身就写得非常好﹐而无须更多的 HOWTO。
VLAN 是一个非常劲酷的工具﹐能够更为虚拟而非实体的隔离您的网路。关于 VLAN 的优秀资料可以到这里发掘﹕
here。按照这个实作﹐您也可以让您的 Linux 机器和诸如 Cisco Catalyst﹑3Com: {Corebuilder, Netbuilder II﹑SuperStack II switch 630}﹑Extreme Ntwks Summit 48﹑Foundry: ServerIronXL, FastIron}﹐这些机器进行 VLAN 连接。
。Alternative VLAN implementation for linux﹐该计划的起源是因为不认同 '已建立的' VLAN 计划之架构及编程﹐而另起炉灶﹐进行通盘的全新设计。
这些高手个个武艺超群。其中 Linux Virtual Server 是构建在真实伺服器族丛之上的伺服器﹐在 Linux 作业系统上执行平行负载﹐极具高伸展性和高可用性。其族丛架构对终端用户来说是透明的﹐他们只看到单一的虚拟伺服器而已。
一言以蔽之﹐不管您需要在什么等级的流量上执行什么样的平行负载﹐LVS 都有办法做到。他们某些技术堪称天才之作﹐实在匪夷所思﹗比方说﹐他们让数台伺服器在一个网段上使用同一个 IP 位址﹐但把它们的 ARP 关闭掉。只有 LVS 机器进行 ARP --- 它会决定进入封包交由哪台后端主机处理﹐然后直接将他送到正确的后端伺服器之 MAC 位址上。而外送的流量则直接流经路由器﹐而不再经过 LVS 机器﹐如此竟看不到 5Gbit/s 的容量到处乱窜﹐而不会构成瓶颈。
LVS 是用 Linux 2.0 和 2.2 的核心修补来实作﹐然而﹐2.4 里因为本身自带 Netfilter 模块﹐所以并不需要核心修补﹗他们的 2.4 支持尚处于初期开发阶段﹐所以不妨与他们切磋一下并提供回馈或修补。
要设定 CBQ 或会让人有怯步之感﹐尤其是您所要的仅仅是在一台路由器后面引导某些电脑而已。CBQ.init 可以帮您用简单的语法设定好 Linux。
例如﹐如果您想要 192.168.1.0/24 这个 subnet(接在 10mbit eth1 之上) 里面的所有电脑限制在 28kbit/s 的下载速度﹐只需将下面的内容放进 CBQ.init 设定档里面﹕
DEVICE=eth1,10Mbit,1Mbit
RATE=28Kbit
WEIGHT=2Kbit
PRIO=5
RULE=192.168.1.0/24
总的来讲﹐如果您对 'how and why' 不感兴趣﹐用此程序足矣。我们在真实的营运环境中使用 CBQ.init﹐发现它还真的不负众望。它甚至还能应付更进阶的事情呢﹐例如按时引导之类。它的文件已嵌入在 script 之中﹐这也就是为甚么您找不到 README 的原因。
Stephan Mueller (smueller@chronox.de) 写了两个非常好用的 script﹕'limit.conn' 和 'shaper'。前者让您轻松的对单一下载连线进行节流﹐只需如此则可﹕
# limit.conn -s SERVERIP -p SERVERPORT -l LIMIT
它在 Linux 2.2 和 2.4 上面都可以使用。
第二个 script 则更为复杂﹐可以根据 iptables 规则做出许多不同的伫列﹐也就是先将封包标识起来﹐再进行引导。
这个完完全全是为了冗余(redundancy)所需。用两台各自拥有 IP 位址和 MAC 位址的机器﹐共同建立起第三个 IP 位址和 MAC 位址﹐当然﹐它是虚拟的。如此设计本来纯粹是为路由器而设计的﹐它需要恒定的 MAC 位址﹐但同时也替伺服器工作。
这个方法的精妙之处是﹐设定起来不费吹灰之力。不需要核心编译或修补﹐全为使用者空间。
只需在所有参与服务的机器上执行﹕
# vrrpd -i eth0 -v 50 10.0.0.22
您已渐入佳境了﹗10.0.0.22 现在由您其中一台伺服器担当﹐很可能是首先执行 vrrp daemon 的机器。现在断掉这台电脑的连线﹐在极短瞬间之内﹐其它一台电脑就会接管这个 10.0.0.22 位址﹐还有它的 MAC 位址。
我曾在这里尝试过﹐而且不到一分钟就设定起来了。然而不知道什么原因﹐它会将预设网关丢弃掉﹐不过可以用 -n 旗标来避免啦。
这是一个 '活生生' 的 failover 机制﹕
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 就接手了﹐您可以发现延迟的增加。