对于这个应用程序,我不太关心高可用性,而不是总吞吐量。我在服务器端有一个 IP 地址,我希望能够从服务器发送超过 1 Gb 的流量。服务器有两个 1 Gb 卡并连接到一对交换机。该应用程序涉及世界各地数以千计的远程客户端连接到服务器(即不是本地网络)。
目前,使用模式 5 (balance-tlb) 设置绑定,但结果是每个端口的吞吐量不会超过 500Mbit/s。我怎样才能超过这个限制?请假设我无法访问交换机,因此无法实现 802.3ad。
(我希望添加“bonding”标签,但我无法添加新标签,所以是“teaming”。)
如果没有交换机级别的合作,您不太可能实现 2 Gb,即使这样,仅使用单个 IP 源/目标组合也可能很难。大多数团队都设置了 IP 哈希,它为每个源/目标分配一个 NIC 路径。因此,您只会获得 1 千兆位。有轮询方案,但您经常会发现数据包到达时出现乱序,除非主机和目的地都支持该方案,否则会导致它不受欢迎。
您将需要在交换机端口上进行端口聚合(需要聚合连接到机器上 2 个千兆端口的接入交换机的两个端口)。但是,一旦实现,您应该接近 2Gbps 路径(受机器能力限制)。
通过交换机上的端口聚合与绑定驱动程序的逻辑 2Gbps 端口匹配,您将使用机器上只有一个 IP 地址的多路复用冗余路径。
我现在看到一些有趣的笔记,在这里。
首先,您可能知道您实际上永远不会达到 2Gb/s。TCP/IP 的开销会将您限制在最大值的大约 90%。
第二,即使你使用 TCP 卸载引擎,第 3 层之上的堆栈肯定会影响瓶颈所在。换句话说,你是如何传输数据的?我可以有 10Gb/s 网卡和它们之间的交叉,如果我在 ssh 隧道上使用 rsync,我不会超过几百 Mb/s。
关于拓扑,您还能告诉我们什么?你说服务器连接到几个交换机,远程客户端遍布世界各地。您是否有 > 500Mb/s(聚合)的 WAN 连接?
我们并没有真正解决这个问题。我们所做的是设置两台服务器,一台在每个接口上绑定一个 IP,然后按照此处的说明强制流量从它进入的端口流出:
http://kindlund.wordpress.com/2007/11/19/configuring-multiple-default-routes-in-linux/
针对我们的情况稍作修改。在本例中,网关为 192.168.0.1,服务器的 IP 分别为 eth0 和 eth1 上的 192.168.0.211 和 192.168.0.212: