Implementando balanceamento de carga em qualquer distribuição Linux

Implementando balanceamento de carga em qualquer distribuição Linux

Estou pensando em implementar uma solução de balanceamento de carga para uso pessoal.

O que eu quero fazer é maximizar o rendimento de dados em conexões de Internet por telefone móvel. Deixe-me ser claro:

Eu tenho um plano de dados no meu celular e minha família também tem os respectivos planos de dados nos telefones. Se eu puder conectar até 4 telefones em um PC (desktop) (de preferência via USB), conseguirei (teoricamente) uma conexão de Internet mais rápida do que qualquer um dos 4 telefones (se eu conectá-los a um PC).

Esse computador desktop atuará como um roteador para uma intranet.

Se o que foi dito acima tiver uma base sólida (posso estar errado - não conheço detalhadamente as tecnologias envolvidas), preciso de como implementar isso.

Já vi que a ferramenta para o trabalho é ipvs(certo?), mas não sei como.

Em termos de distribuição, o trabalho pode ser feito em qualquer distribuição, mas sei que conectar um telefone Android ao Ubuntu funciona plug and play. Então, se eu puder fazer isso no Ubuntu, provavelmente será mais rápido do que compilar tudo do strach.

Existe um parente como fazer? Existe uma distribuição que faz balanceamento de carga e identifica conexões de Internet USB em tempo real?

Responder1

Para equilibrar as conexões de saída, tudo o que você precisa é iptablesde roteamento padrão e de alguma política. Isso fica um pouco complexo com 4 conexões, pois você precisará reconfigurar e reequilibrar os links conforme as conexões vão e vêm.

A iptablesconfiguração bruta é

  • Crie uma tabela de roteamento para cada conexão

    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
    
  • Adicione o gateway padrão para cada conexão a cada tabela (o IP do gateway irá variar dependendo de cada provedor/configuração de telefone)

    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 
    
  • Marque aleatoriamente quaisquer fluxos não marcados, que encaminharão o fluxo através de uma conexão específica. OUTPUTé usado para processos locais. Use PREROUTINGse você estiver encaminhando tráfego para outros clientes)

    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 para cada uma das conexões (a interface precisará ser qualquer que seja a conexão do telefone que aparece no sistema)

    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
    

Observe que uma única conexão TCP ou UDP não terá aceleração, pois ainda passará por um único link. Você precisa usar várias conexões simultâneas (pelo menos 4) para aproveitar a largura de banda extra. A maioria dos navegadores faz isso nos bastidores ao solicitar vários objetos. Alguns gerenciadores de download permitem usar múltiplas conexões para um único arquivo.

Como sugere garethTheRed, ispunityadiciona um pouco de "cola" em cima desta iptablesconfiguração para percorrer uma lista de conexões, verificar se o gateway está respondendo, reequilibrar se algo estiver errado, etc. por porta em cima de seu balanceamento de carga de conexões "round robin" básico. Outra solução éSaldo líquido-ISP, um script e biblioteca Perl que automatiza o iptables e a configuração da tabela de roteamento, monitora o status do ISP, alerta sobre problemas e reconfigura o roteamento caso um ou mais ISPs fiquem inacessíveis.

Observe também que solicitações provenientes de vários IPs podem interromper alguns serviços baseados em pesquisas de IP consistentes e pode ser necessário adicionar regras adicionais para esses serviços para vinculá-los a uma conexão. Você não verá nenhuma aceleração em conexões únicas, apenas quando estiver fazendo 4 coisas ao mesmo tempo, o que a maioria dos navegadores tentará fazer de qualquer maneira.

ipvsé mais para criar endereços de serviço virtuais para coisas que você hospeda, para que o serviço possa sofrer failover entre vários hosts.

Responder2

Poderia ser possível - ispunityé um projeto que equilibra a carga da sua conexão com a Internet. Está escrito em Ruby. Eles estão rodando em um Raspberry Pi, portanto deve rodar em qualquer distribuição razoável.

A única diferença entre o cenário deles e o seu é que eles usaram Ethernet, enquanto você propõe usar 3G. Suponho que muito do seu sucesso (ou fracasso) depende de como seus 4 celulares apresentam a Internet em USB.

Como o Rasberry Pi geralmente roda uma variante do Debian, talvez comece com ela ou com o Ubuntu.

Responder3

proxy de despacho
Usando o proxy de despacho, é possível combinar muitas redes Wi-Fi/conexões Ethernet/3G/4G e ter acesso a elas como uma conexão grande, de alta largura de banda e com carga balanceada. Observe que para usar uma velocidade de conexão mais alta, o usuário deve usar um gerenciador de download encadeado que abrirá várias conexões para o proxy de despacho e irá buscá-las efetivamente usando várias interfaces, resultando em velocidades de download mais rápidas e combinadas.
instrução para instalarpara mac, também funciona para linux.

Unidade ISP
ISPUnity é um balanceador de carga e failover múltiplo baseado em rubygem/software de código aberto.

Para internet móvel recomendo dispatch-proxyque você não defina nenhuma configuração como na unidade do ISP. esselink comentário sobre um kernel Linux corrigido para balanceamento de carga embutido, você pode dar uma olhada.

informação relacionada