在任何 Linux 发行版上实现负载平衡

在任何 Linux 发行版上实现负载平衡

我正在考虑实施一个供个人使用的负载平衡解决方案。

我想做的是最大限度地提高手机互联网连接的数据吞吐量。让我明确一点:

我的手机中有数据计划,我的家人的手机也有各自的数据计划。如果我可以在一台(台式)PC 上连接最多 4 部手机(最好通过 USB),那么我(理论上)将获得比 4 部手机中任何一部手机更快的互联网连接速度(如果我将它们连接到 PC)。

然后,该台式计算机将充当 Intranet 的路由器。

如果上述内容有良好的基础(我可能是错的 - 不知道所涉及的技术的详细信息),我需要一个如何实现它的方法。

我已经看到完成这项工作的工具是ipvs(对吗?),但不知道如何做。

从发行版的角度来看,这项工作可以在任何发行版中完成,但我知道将 Android 手机与 Ubuntu 连接起来可以即插即用。因此,如果我可以在 Ubuntu 中完成此操作,它可能会比从 strach 编译所有内容更快。

有亲戚怎么办吗?是否有一个发行版可以进行负载平衡并动态识别 USB 互联网连接?

答案1

要平衡传出连接,您所需要的只是标准路由iptables和一些策略路由。对于 4 个连接来说,这确实有点复杂,因为当连接来来去去时,您需要重新配置和重新平衡链接。

原始iptables设置是

  • 为每个连接创建路由表

    ip rule add fwmark 10 table PHONE0 prio 33000
    ip rule add fwmark 11 table PHONE1 prio 33000
    ip rule add fwmark 12 table PHONE2 prio 33000
    ip rule add fwmark 13 table PHONE3 prio 33000
    
  • 将每个连接的默认网关添加到每个表(网关 IP 将根据每个电话提供商/设置而有所不同)

    ip route add default via 192.168.1.2 table PHONE0 
    ip route add default via 192.168.9.1 table PHONE1 
    ip route add default via 192.168.13.2 table PHONE2 
    ip route add default via 192.168.7.9 table PHONE3 
    
  • 随机标记任何未标记的流,这将通过特定连接路由流。OUTPUT用于本地进程。PREROUTING如果您要为其他客户端转发流量,请使用)

    iptables -t mangle -A OUTPUT -j CONNMARK --restore-mark
    iptables -t mangle -A OUTPUT -m mark ! --mark 0 -j ACCEPT
    iptables -t mangle -A OUTPUT -j MARK --set-mark 10
    iptables -t mangle -A OUTPUT -m statistic --mode random --probability 0.25 -j MARK --set-mark 11
    iptables -t mangle -A OUTPUT -m statistic --mode random --probability 0.25 -j MARK --set-mark 12
    iptables -t mangle -A OUTPUT -m statistic --mode random --probability 0.25 -j MARK --set-mark 13
    iptables -t mangle -A OUTPUT -j CONNMARK --save-mark
    
  • 每个连接的 NAT(接口将需要是您的电话连接在系统中显示的接口)

    iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
    iptables -t nat -A POSTROUTING -o ppp1 -j MASQUERADE
    iptables -t nat -A POSTROUTING -o ppp2 -j MASQUERADE
    iptables -t nat -A POSTROUTING -o ppp3 -j MASQUERADE
    

请注意,单个 TCP 或 UDP 连接不会加速,因为它仍然通过单个链接进行。您必须使用多个并发连接(至少 4 个)才能利用额外的带宽。大多数浏览器在请求多个对象时都会在后台执行此操作。某些下载管理器允许您对单个文件使用多个连接。

正如 garethTheRed 建议的那样,ispunity在此设置之上添加一些“粘合剂”iptables以循环连接列表,检查网关是否响应,如果出现问题则重新平衡等。它的“粘性会话”管理看起来是额外的设置每个端口在其基本的“循环”连接负载平衡之上。另一个解决方案是网络 ISP 平衡,一种 Perl 脚本和库,可自动执行 iptables 和路由表配置、监视 ISP 状态、向您发出问题警报并在一个或多个 ISP 无法访问时重新配置路由。

另请注意,来自多个 IP 的请求可能会破坏某些基于一致 IP 查找的服务,并且您可能需要为这些服务添加其他规则以将它们绑定到连接。仅当您同时执行 4 件事时,您不会在单个连接上看到任何加速,大多数浏览器无论如何都会尝试这样做。

ipvs更多的是为您托管的事物创建虚拟服务地址,以便服务可以在多个主机之间进行故障转移。

答案2

这是可能的 -ispunity是一个可以平衡您的互联网连接负载的项目。它是用 Ruby 编写的。 他们已经在 Raspberry Pi 上运行了,所以它应该在任何合理的发行版上运行。

他们的场景与您的场景之间的唯一区别是他们使用以太网,而您建议使用 3G。我想您的成功(或失败)很大程度上取决于您的 4 部手机如何通过 USB 提供互联网。

由于 Rasberry Pi 通常运行 Debian 的变体,那么可以从 Debian 或 Ubuntu 开始。

答案3

调度代理
使用调度代理可以组合许多 Wi-Fi 网络/以太网/3G/4G 连接,并将它们作为一个大的、高带宽、负载平衡的连接进行访问。请注意,要利用更高的连接速度,用户必须使用线程下载管理器,该管理器将打开与调度代理的多个连接,并且它将使用多个接口有效地获取它们,从而实现组合的更快的下载速度。
安装说明适用于 Mac,也适用于 Linux。

ISP统一
ISPUnity 是一个基于开源 ruby​​gem/软件的多互联网负载均衡器和故障转移。

对于移动互联网我推荐dispatch-proxy您不要像 ISP 统一那样配置任何设置。 有关用于内置负载平衡的修补 Linux 内核的链接评论,您可以看看。

相关内容