あらゆる Linux ディストリビューションで負荷分散を実装する

あらゆる Linux ディストリビューションで負荷分散を実装する

個人使用のために負荷分散ソリューションを実装することを考えています。

私がやりたいのは、携帯電話のインターネット接続でのデータ スループットを最大化することです。はっきりさせておきます。

私は携帯電話にデータプランを契約しており、家族もそれぞれの携帯電話にデータプランを契約しています。1 台の (デスクトップ) PC に最大 4 台の電話機を接続できれば (できれば USB 経由)、4 台の電話機のいずれを PC に接続した場合よりも (理論上) 高速なインターネット接続を実現できます。

そのデスクトップ コンピューターは、イントラネットのルーターとして機能します。

上記に確かな根拠がある場合 (間違っている可能性もあります。関連する技術を詳しくは知りません)、それを実装する方法が必要です。

仕事に必要なツールはipvs(正しい?)あることはわかりましたが、その方法がわかりません。

ディストリビューション的には、どのディストリビューションでもこの作業は実行できますが、Android フォンを Ubuntu に接続するとプラグ アンド プレイで動作することがわかっています。したがって、Ubuntu で実行できれば、すべてを最初からコンパイルするよりも高速になるでしょう。

関連する方法はありますか? 負荷分散を行い、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 つ) を使用する必要があります。ほとんどのブラウザは、複数のオブジェクトを要求するときに、これを内部で実行します。一部のダウンロード マネージャーでは、1 つのファイルに対して複数の接続を使用できます。

garethTheRed が提案しているように、ispunityこの設定の上に「接着剤」を追加してiptables、接続リストをループし、ゲートウェイが応答しているかどうかを確認し、何か問題があれば再バランスをとるなどします。「スティッキーセッション」管理は、接続の基本的な「ラウンドロビン」負荷分散の上にポートごとに追加設定するように見えます。別の解決策は、ネットISPバランスは、iptables とルーティング テーブルの構成を自動化し、ISP の状態を監視し、問題を警告し、1 つ以上の ISP がアクセス不能になった場合にルーティングを再構成する Perl スクリプトとライブラリです。

また、複数の IP からリクエストが送信されると、一貫した IP 検索に基づく一部のサービスが中断される可能性があり、それらのサービスを接続に結び付けるために追加のルールを追加する必要がある場合があります。単一の接続では速度向上は見られず、ほとんどのブラウザがとにかく試みる 4 つのことを同時に実行している場合にのみ速度向上が見られます。

ipvsホストするものの仮想サービス アドレスを作成し、複数のホスト間でサービスをフェールオーバーできるようにすることを目的としています。

答え2

それは可能かもしれない -ispunityインターネット接続の負荷を分散するプロジェクトです。Ruby で書かれています。 彼らはそれをラズベリーパイで動かしているなので、適切なディストリビューションであればどれでも動作するはずです。

彼らのシナリオとあなたのシナリオの唯一の違いは、彼らがイーサネットを使用しているのに対し、あなたが 3G の使用を提案している点です。あなたの成功 (または失敗) の多くは、4 台の携帯電話が USB 上でインターネットをどのように提供するかにかかっていると思います。

Rasberry Pi は通常 Debian の亜種を実行するので、Debian または Ubuntu から始めるとよいでしょう。

答え3

ディスパッチプロキシ
ディスパッチ プロキシを使用すると、多数の Wi-Fi ネットワーク/イーサネット/3G/4G 接続を組み合わせて、1 つの大規模で高帯域幅の負荷分散された接続としてアクセスできます。より高速な接続速度を利用するには、スレッド化されたダウンロード マネージャーを使用する必要があります。このマネージャーは、ディスパッチ プロキシへの複数の接続を開き、複数のインターフェイスを使用してそれらを効果的に取得するため、ダウンロード速度が統合されて高速になります。
インストール手順Mac用ですが、Linuxでも動作します。

ISPの統一
ISPUnity は、オープンソースの RubyGem/ソフトウェア ベースの複数のインターネット ロード バランサーおよびフェイルオーバーです。

モバイル インターネットの場合、dispatch-proxyISP Unity のように設定を構成しないため、お勧めします。 これ組み込みの負荷分散用のパッチを適用した Linux カーネルに関するリンクコメントを参照してください。

関連情報