在任何 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 核心的連結評論,您可以看看。

相關內容