本章列出了一些与高级 Linux 路由和流量整形相关的项目。其中一些链接可能值得单独成章,有些项目本身文档非常完善,不需要更多的 HOWTO 说明。
VLAN 是一种非常酷的方式,可以以虚拟而非物理的方式隔离您的网络。关于 VLAN 的更多信息可以在这里找到。通过此实现,您的 Linux 机器可以与 Cisco Catalyst、3Com:{Corebuilder, Netbuilder II, SuperStack II switch 630}、Extreme Ntwks Summit 48、Foundry:{ServerIronXL, FastIron} 等机器进行 VLAN 通信。
关于 VLAN 的一个很棒的 HOWTO 可以在这里找到。
更新:已包含在 2.4.14(可能为 13)的内核中。
Linux 的备选 VLAN 实现。该项目始于对“已建立”的 VLAN 项目的架构和编码风格的不同意,从而产生了更简洁的整体设计。
这些人太棒了。Linux 虚拟服务器是一个高度可扩展和高可用的服务器,它构建于真实服务器集群之上,负载均衡器运行在 Linux 操作系统上。集群的架构对于最终用户是透明的。最终用户只能看到一个虚拟服务器。
简而言之,无论您需要负载均衡什么,无论流量级别如何,LVS 都会有办法做到。他们的一些技术简直是“邪恶”!例如,他们让多台机器在同一个网段上拥有相同的 IP 地址,但关闭了它们的 ARP。只有 LVS 机器执行 ARP——然后它决定哪个后端主机应该处理传入的数据包,并将其直接发送到后端服务器的正确 MAC 地址。传出的流量将直接流向路由器,而不是通过 LVS 机器,因此 LVS 机器不需要看到您 5Gbit/s 的内容流向世界,也不会成为瓶颈。
LVS 在 Linux 2.0 和 2.2 中作为内核补丁实现,但在 2.4/2.5 中作为 Netfilter 模块实现,因此它不需要内核补丁!他们对 2.4 的支持仍处于早期开发阶段,所以请对其进行测试并提供反馈或发送补丁。
配置 CBQ 可能有点令人生畏,特别是当您只想对路由器后面的一些计算机进行整形时。CBQ.init 可以帮助您使用简化的语法配置 Linux。
例如,如果您希望将 192.168.1.0/24 子网(在 10mbit eth1 上)中的所有计算机的下载速度限制为 28kbit/s,请将此内容放入 CBQ.init 配置文件中
DEVICE=eth1,10Mbit,1Mbit RATE=28Kbit WEIGHT=2Kbit PRIO=5 RULE=192.168.1.0/24 |
如果您对“如何以及为什么”不感兴趣,请务必使用此程序。我们正在生产环境中使用 CBQ.init,它运行良好。它甚至可以做一些更高级的事情,例如时间相关的整形。文档嵌入在脚本中,这解释了为什么您找不到 README。
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 分钟内启动并运行。由于某些奇怪的原因,它决定丢弃我的默认网关,但 -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 接管了,您可以从更高的延迟中看到这一点。