LVS-mini-HOWTO

Joseph Mack

jmack (at) wm7d (dot) net

v2004.02 Feb 2004, released under GPL.


Tradução para o Português Brasileiro: Carlos Cherem para o portal UNIX total

cherem (arroba) interamerica (ponto) com (ponto) br

www.unixtotal.com.br


Tabela de Conteúdo

1. Introdução
1.1. Origem deste Documento
1.2. O que faz o LVS
2. Requisitos mínimos de hardware e rede
2.1. Camada de Link
2.2. Gotchas: você precisa de um cliente externo
2.3. O teste inicial deve ser feito com o serviço de telnet (ou netcat)
2.4. Teste sem as regras de filtragem
3. Software
3.1. Compilador
3.2. Obtendo os arquivos: Direcionador, Servidor Real
3.3. Escolhendo o tipo de encaminhamento do LVS: LVS-NAT, LVS-DR e LVS-Tun
3.4. Métodos para múltiplos encaminhamentos
3.5. Scripts de configuração, ferramentas
3.6. Instalação Geral
3.7. Kernel do Direcionador - faça você a compilação
3.8. Como eu verifico se o meu Kernel já está com o patch ip-vs instalado?
3.9. ipvsadm
3.10. Direcionador: verifique o software
3.11. Kernel do Direcionador: Tendo uma pessoa para fazer isto para você
3.12. Direcionador: problemas na compilação
3.13. Servidor Real
4. Exemplo 1: LVS usando o encaminhamento LVS-NAT
4.1. Configure usando os scripts
4.2. Configure manualmente
4.3. Teste o funcionamento do LVS-NAT
4.4. Configure o LVS-NAT para o serviço http
5. Exemplo 2: Configure o LVS usando o encaminhamento LVS-DR
5.1. VS-DR para o serviço telnet
5.2. Configure manualmente
5.3. Teste a operação do LVS-DR
5.4. Configure o LVS-DR para o serviço http
6. Como alguns usuários conseguiram fazer
6.1. Dan Browning, LVS-DR no Red Hat 7.2: manipulando o ARP, outros tipos de problemas
6.2. Jezz Palmer, configuração do squid LVS
6.3. Dois LVS
7. E se ocorrerem problemas?
7.1. Não consigo aplicar o patch no kernel, não consigo compilar o kenel após o patch, não consigo compilar o ipvsadm
7.2. Não consigo compilar o ipvsadm
7.3. O ip_tables não funciona
7.4. O ipvsadm exibe muitos erros
7.5. Me ajude! O meu LVS não funciona
7.6. Os clientes dizem: "Conexão Recusada"
7.7. Quedas de conexão: o ipvsadm mostra as entradas em InActConn, mas nenhuma em ActiveConn
7.8. As conexões iniciais são demoradas, mas uma vez conectado tudo fica normal
7.9. A conexão leva vários segundos para ser estabelecida
7.10. O meu LVS ainda não funciona: Há mais o que se possa fazer?

Abstrato

Motivos deste documento

Para mostrar a você como instalar um Servidor Linux Virtual (LVS = Linux Virtual Server) e configurar algumas demonstrações de servidores virtuais. Não há a necessidade de saber muito de como trabalha o LVS aqui, basta que você esteja familiarizado com as configurações do Linux. Uma vez que você consiga fazer o LVS funcionar, você pode ler a documentação mais extensa e o LVS-HOWTO no site do LVS para entender realmente como ele funciona e como configurá-lo de outras maneiras.

1. Introducão

Tudo o que você gostaria de saber (código, documentos, listas de e-mail, arquivos das listas de e-mail) podem ser encontrados em algum lugar no Site do LVS

A necessidade deste mini-HOWTO foi realçada por ratz ratz (arroba) tac (ponto) ch que fez as sugestões de conteúdo e que leu e testou o que está aqui escrito. Outras sugestões foram feitas por John Cronin jsc3 (arroba) havoc (ponto) gtf (ponto) org. Que originalmente passou as informações de como fazer o LVS ser configurado e funcionar sem a necessidade de conhece-lo profundamente. Ocasionalmente podem haver duplicidades de informações no HOWTO e neste mini-HOWTO. Eventualme é fácil pular as instruçõs de um documento para o outro, mas o objetivo deste é conter apenas o mínimo para fazer o LVS funcionar de maneira rápida.

Este documento foi escrito em xml.

1.1. Origem deste documento

No Site do LVS-HOWTO e também linkado a página da Documentação do LVS

1.2. O que faz um LVS?

Um LVS é um grupo de servidores com um direcionador que faz com que pareçam para o mundo de fora (um cliente na internet) como se fosse apenas um. O LVS pode oferecer mais serviços, serviços de maior capacidade/desempenho, ou serviços redundantes (quando servidores individuais tiverem que sair do ar para manutenção) em relação aos disponíveis em servidores únicos. O serviço é tratado aqui como uma conexão para uma porta simples, ex. telnet, http, nntp, ntp, nfs, ssh, smtp, pop, banco de dados. Serviços de multiplas portas (ex. ftp para LVS-NAT) serão tratados como um caso em especial. Outros protocoloes de multiplas portas (ex ftp passivo, http/https para sites de comércio eletrônico) serão tratados pelo LVS persistente ou mais recentemente pelo fwmark no HOWTO.

No bestiário do computador, e o LVS é como um switch da camada 4. A semântica padrão do cliente-servidor continua preservada. Cada cliente pensa que está diretamente conectado ao servidor real. Cada servidor real pensa que está conectado diretamente ao cliente. Nem o cliente nem o servidor sabem que as conexões sofrem a intervensão do direcionador.

Um LVS não é um beowulf - um beowulf é um grupo de máquinas onde cada uma calcula uma pequena porção de um problema grande. Também não é um Cluster - um Cluster é uma série de computadores que distribuem o processamento. O servidor real do LVS não coopera, ele não sabe sequer da existência de outros servidores reais no LVS. Tudo que os servidores reais sabem é que eles recebem conexões de clientes.

Este mini-HOWTO demonstrará uma configuração de LVS para os serviços telnet e http.

2. Requisitos mínimos de Hardware e Rede

Esta é uma típica configuração de LVS-NAT.

                        _________
                       |         |
                       | cliente | (local ou na Internet)
                       |_________|
                            |
                        (roteador)
                     GW_DIRECIONADOR
                            |
--                          |
S                      IP Virtual
e                    _______|______
r                   |              |
v                   | direcionador | (o direcionador pode ter 1 ou 2 placas de rede)
i                   |______________|
d                           IPD
o                           |
r                           |
           -----------------+----------------
V          |                |               |
i          |                |               |
r         RIP1             RIP2            RIP3
t     ____________     ____________     ____________
u    |  servidor  |   |  servidor  |   |  servidor  |
a    |    real    |   |    real    |   |    real    |
l    |____________|   |____________|   |____________|

L
i
n
u
x

Esta é uma típica configuração do LVS-DR ou LVS-Tun.


                       _________
                      |         |
                      | cliente | (local ou na Internet)
                      |_________|
                           |
                       (roteador)-----------
                           |    GW_SERVIDOR|
--                         |               |
S                         IPV              |
e                   _______|______         |
r                  |              |    (o direcionador pode ter 1 ou 2 placas de rede)
v                  | direcionador |        |
i                  |______________|        |
d                         IPD              |
o                          |               |
r                          |               |
          -----------------+----------------
V         |                |               |
i         |                |               |
r      IPR1,IPV         IPR2,IPV        IPR3,IPV
t    ____________     ____________     ____________
u   |  servidor  |   |  servidor  |   |  servidor  |
a   |    real    |   |    real    |   |    real    |
l   |____________|   |____________|   |____________|

L
i
n
u
x

Sobre falhas no direcionador (Abordado no LVS-HOWTO), o IPV e IPD serão movidos para um direcionador de backup. Estes dois IPs não poderão ser os IPs primários das placas de rede do direcionador, ex Eles devem ser IPs secundários (ou comumente chamados de aliases). Os IPs primários nas placas de rede do Direcionador podem ser qualquer um compatível com a rede.

Um procedimento de configuração (incluindo os scripts de configuração) assumirão que você já tenha configurado todos os IPs e conexões de rede, a parte dos IPV, IPD: ex configure o IPR1..n, os IPs primários nas placas de rede do Direcionador e do GW_DIRECIONADOR/GW_SERVIDOR e verifique se os IPs nestas conexões estarão funcionando. O script irá configurar o IPV, IPD (a versão 0.9.x irá configurá-los como aliases e as versões futuras como IPs secundários).

Numa configuração de teste, com todas as máquinas numa mesma sala, um roteador (em diagrama em ascii) não estará presente e o cliente obterá os IPs a partir do GW_Direcionador ou do GW_Servidor.

Você precisará de pelo menos 3 máquinas (1 Cliente, 1 Direcionador, 1 Servidor Real). Se você tiver 4 máquinas (ex 2 Servidores Reais), então você verá o balanceamento de carga (a conexão do cliente para o LVS sendo iniciada ora num servidor real ora no outro).

Você pode configurar um LVS com apenas duas máquinas (1 Cliente e 1 Direcionador) usando a Característica de nó-local do LVS, com o direcionador também atuando como um servidor real, mas mas isso não demonstra a escalabilidade de um grupo LVS, e talvez você tenha dificuldades em saber se tudo está realmente funcinando caso você seja novo no LVS.

O Direcionador se conecta a todas as máquinas. Se você tem somente um teclado e um monitor, você pode configurar todas as outras a partir do Direcionador.

Você precisa de:

  • Cliente

    Qualquer computador com qualquer sistema operacional com um cliente telnet e http (ex netscape, lynx, IE). (Eu use um cliente MAC para o meu primeiro LVS).

  • Direcionador:

    Máquina rodando o Linux com o kernel 2.2.x (x>=14) ou 2.4.x com o patch do ipvs. Se você está começando do zero, use o kernel 2.4.x , já que o ipchains (para kernel 2.2.x) foi descontinuado.

    Para um teste, este máquina não precisa ser poderosa - qualquer 486 com placa de rede de 10Mbps já é o suficiente. Numa situação real, um Pentium I de 75Mhz usando uma placa de rede de 100Mbps é capaz de gerir 50Mbps de pacotes (barramento de 33Mhz) e a CPU quase não faz esforço. Comparada esta capacidade a um Link T-1 (1.5Mbps), e você pode ver que para redes de baixa capacidade, a redundância do LVS é a característica mais usada. Embora a capadidade de rede não possa chegar a 1Gbps em CPUs PII, já que ainda continuam com barramento em 300Mhz.

  • Servidor(es) Real(is):

    São as máquinas que prestarão os serviços de interesse (aqui telnet e/ou http). Em ambiente de produção estas máquinas podem ter qualquer sistema operacional, mas por conveniência eu discutirei o caso onde haverão Linux com Kernel >=2.2.14. (O suporte a kernels mais recentes não está incluído no HOWTO).

    O direcionador pode encaminhar os pacotes por 3 métodos. O Sistema Operacional para os servidores reais podem ser

    • LVS-NAT - qualquer computador, qualquer Sistema Operacional, rodando alguns serviços de interesse (ex httpd, ftpd, telnetd, smtp, nntp, dns, daytime ...). O Servidor Real apenas precisa possuir a pilha TCP/IP - mesmo uma impressora da rede a tem.
    • LVS-DR - Os sistemas operacionais que funcionam estão listados no HOWTO: na maioria UNIX e Windows.
    • LVS-Tun - O servidor real precisa rodar um sistema operacional que faça tunelamento (atualmente somente o Linux).

2.1. Camada de Link

Precisa ser Ethernet, pode ser de cabo coaxial ou par trançado com HUB ou Switch, os de 10Mbps são suficientes para uma demonstração. (O ATM ainda não funciona, veja o HOWTO).

2.1.1. Escolha o número de redes

Os servidores reais rodam normalmente em redes privativas (ex 192.168.1.0/24) Eles não possuem contato direto com os clientes, em alguns casos os servidores reais são máquinas (na rede local) muitas vezes usadas para outras coisas, que neste caso as deixa na rede original (pública).

O direcionador é contactado pelo(s) cliente(s) no IPV. Se o IPV precisa estar disponível publicamente (A configuração mais comum), então eles deverão estar numa rede diferente dos servidores reais, e neste caso você terá duas redes LVS. o IPV estará numa rede que que conecte o direcionador ao roteador (ou cliente de teste), se os clientes estiverem na mesma rede dos servidores reais então você terá apenas uma rede LVS.

O número de redes não tem relação com o número de placas de rede. Uma única placa de rede pode ter vários IPs e pode estar é várias redes diferentes. Você pode ter uma placa de rede no direcionador com duas redes LVS.

Nota
o IPV está normalmente no dispositivo de rede (ex eth0). Porém dec (arroba) rm-f (ponto) net 01 Jun 2002 colocou na lo e o LVS funcionou muito bem.

2.1.2. Decidindo quantas placas de rede deve ter o direcionador

Para uma configuração inicial, você precisa apenas de 1 placa de rede no direcionador. Com 2 placas de rede no direcionador você poderá separar os pacotes que são de fora dos que são de dentro, de maneira simples, com regras de filtragem e segurança. Placas de rede de 100Mbps são baratas para a produção, você pode ter tantas placas de rede quanto derem em sua placa mãe (Existem ainda placas de rede duplas e até quadruplas), eu usei uma D-link quad tulip no meu direcionador. O volume de pacotes será limitado pelo barramento PCI e pela pilha TCP/IP (em 2000 as placas mãe serão de 400Mhz) - ex. 4 Placas de rede. O direcionador poderá ter uma placa para cada servidor real uma vez que ela não esteja operando em toda a velocidade. Aumentando o número de placas de rede irá aumentar o desempenho até que haja um limite de taxas, como a velociade da CPU ou do barramento PCI.

O script de configuração irá manipular 1 ou 2 placas de rede no direcionador. No caso de 1 placa de rede, ela se conecta tanto ao lado de fora quando ao lado interno da rede dos servidores reais. No caso de 2 placas de rede, as duas redes estarão fisicamente separadas, uma conectada ao mundo de fora e outra conectada a rede dos servidores reais.

2.2. Gotchas: Você precisa de um cliente externo

Você precisa de um cliente externo.

O LVS funciona como se fosse um único computador. Você precisa acessar o LVS a partir de um cliente que não é membro do LVS. Você não pode acessar o serviço controlado do LVS (ex. http, telnet) de nenhum computador no LVS; acessos a partir do direcionador irão cair, acessos a partir dos servidores reais serão feitas localmente, passando por fora do LVS.

Mínimo de 3 computadores: cliente, direcionador, servidor real

2.3. O serviço inicial para testes deve ser o telnet (ou netcat)

Todos os testes com o se LVS devem ser feitos com serviços simples (telnet, http). O Telnet tem

  • um cliente simples (disponível em todos os sistemas operacionais)
  • um protocolo simples (uma porta)
  • todas as informações são trocadas em ASCII (que podem ser analisadas com o tcpdump)
  • conexão não persistente (você pode testar o agendamento round robin)
  • o serviço telnetd costuma ficar disponível em todos os IPs do servidor. (ex. para 0.0.0.0) ao menos sob o inetd
  • o mais importante, quando você conseguir uma conexão, você verá uma entrada na coluna ActConn na saída do ipvsadm.

Por rasões de segurança, você desativará o telnet, mas sempre que for necessário fazer testes no LVS ou em um novo serviço, sempre observe se o telnet funciona caso você esteja tendo problemas. Caso telnet não esteja sendo encaminhado pelo LVS, então você deverá resolver este problema primeiro.

Outro cliente muito útil é o netcat ou o seu substituto, o phatcat.

2.4. Teste sem as regras de filtragem

Você poderá adiciona-las posteriormente, após o LVS estar funcionando.

3. Software

3.1. Compilador

Wensong está usando o egcs-2.91.66 no RedHat 6.2 e gcc-2.96 no RedHat 7.3.

Tive uma série de problemas (Maio de 2003) com novos Kernels e gcc-3.x O kernel é compilado mas não funciona adequadamente (Em uma das minhas máquinas, a SCSI e a rede não funcionam quando eu habilito o SMP). O número de parâmetros no ip_select_ident foi alterado para parar as falhas de compilação (O novo parâmetro possui o valor '0', eu simplesmente o deletei e ele compilou mas eu fico sem saber se o código ficará capenga ou não). Eu percebi também que certos pacotes não compilam com o gcc-3.3

3.2. Obtendo os arquivos: Direcionador, Servidor Real

Horms 14 Nov 2003

Todas as edições do LVS estão disponíveis em www.linuxvirtualserver.org. Geralmente cada edição é feita de duas maneiras. Um pacote Tar onde você pode usar paca compilar o LVS tando fora como dentro dos difretórios do Kernel. E um patch para ser usando somente para compilar o LVS dentro da árvore de diretórios do Kernel.

Para o Patch 2.4.22,linux-2.4.21-ipvs-1.0.11.patch.gz pode ser aplicado. A não ser que você tenha uma bom motivo para usar um kernel antigo, use o 2.4.23 cujo código do LVS já está incluso.

Faça a sua escolha quando a estrutura do kernel. Como o LVS já está incluso do kernel 2.4.23 então a menos que você precise de funções especiais, você está pronto para usar os Kernels previamente preparados com o Patch.

Nota
Joe: Você precisará baixar os utilitários (ipvsadm) em . http://www.linuxvirtualserver.org/software/ipvs.html.
Atenção
Diferentes versões de kernel (2.2.x, 2.4.x, 2.6.x) requerem diferentes versões doipvsadm. Porém, há apenas um tipo de número de série para o ipvsadm. Você pode saber baseando-se na versão do ipvsadm. (ipvsadm-1.24.tar.gz é para os kernels 2.6, enquando ipvsadm-1.21.tar.gz é para os kernels 2.4). Se você simplesmente obter a última versão do ipvsadm (Janeiro de 2004 is v1.24) não funcionará com os kenels 2.4.x Esteja certo de ter pego a versão correta doipvsadm par a série do seu Kernel.

O pacote tar também inclui o ipvsadm que pode ser encontrado em outro pacote tar separado. Você precisará da versão do ipvsadm que combine com a versão do LVS que você está usando de maneira que você possa usá-lo para configurar o LVS.

Joe: Eu acredito que o LVS também esteja presente no kernel 2.6

3.2.1. Kernel padrão para o direcionador e o servidor real

Para o direcionador, você precisa de um kernel padrão, obtenha a partir do site ftp do Kernel. Para os linux 2.4.x, você precisará instalar o patch "hidden" ou "oculto"; (Que somente foi testado com o mesmo kernel padrão).

Note
O Kernel que vem na sua distribuição é normalmente marcado com uma versão superior ou avançada, e provavelmente não funcionará a instalação do Patch para o LVS. O Kernel do RedHat já possui o patch do LVS pré aplicado, com uma versão certamente mais antiga em relação a atual lançada no site do LVS. O SuSE (Maio 2003) está fazendo a mesma coisa. Se você fizer o LVS funcionar com o kernel padrão e não com o que vem na sua distribuição, então nós saberemos onde o problema está, mas será melhor se você entrasse em contato com a sua distribuição - eles precisam de um retorno seu, não nós. Se você estiver realmente interessado em fazer o kernel da sua distribuição funcionar com o LVS, você poderá tentar novamente após faze-lo funcionar com o kernel padrão.

3.2.2. Patch ipvs do Direcionador

Nota
Os kernels 2.4.23 e superiores já possuem o código do ipvs internamente. Você não precisa aplicar o patch neles.

Vá para o link de Programas na Homepage do LVS. Obtenha o último pacote tar para o Direcionador (disponíveis para 2.2.x, 2.4.x, e 2.5.x). Ele contém o patch do Kernel e o código fonte para outros programas e utilitários.

Você deverá aplicar o patch no kernel padrão que combine com o patch do ip_vs, recompile o kernel, reinicie e compile os programas de nível de usuário. ipvsadm.

O Direcionador opera em um (ou vários) métodos de encaminhamento; LVS-NAT (network address translation | Tradução de Endereços de Rede); LVS-DR (direct routing | Roteamento Direto) e LVS-tun (Tunelamento). O método de encaminhamento é especificado para cada servidor-real/serviço através das ferramentas do usuárioipvsadm disponíveis no site do LVS.

O código do Direcionador foi muito bem testado em computadores Intel. Mas várias pessoas rodam o Linux em computadores Alpha. Espera-se que o LVS rode em qualquer computador que rode o Linux.

3.2.3. Arquivos do Servidor-Real

O Servidor-Real deve ser configurado adequadamente de acordo com o método de encaminhamento do LVS. para fazer isto você precisa:

  • Resolver o problema de ARP. (Há mais informações sobre este assunto em problemas com arp.)
  • Configurar o GW (Gateway) padrão.
    • LVS-NAT: O DIP (IP do Direcionador IPD)
    • LVS-DR, LVS-Tun: um roteador (Que não é o Direcionador).

Para resolver o problema do ARP para o LVS-DR/LVS-tun, servidores-reais com o Linux e kernel 2.2.x/2.4.x precisam ter o patch "hidden" aplicado (patch disponível em Na página de Patches e Programas do Julian). Para kernels 2.2.x, o patch já está no kernel padrão (ex já está pré-aplicado para você). Para kernels 2.4.x você mesmo terá que aplicá-lo manualmente. A partir de 2001, ambos os patchs "hidden" e "ipvs" já podem ser aplicados simultaneamente ao Kernel, permitindo a você usar o mesmo kernel para o Direcionador e para o Servidor-Real. A parte do Kernel onde tem o patch aplicado não se altera muito em relação as outras versões, assim, o patch "hiddem against 2.4.5" também funcionará para a versão 2.4.19pre4.

Nota
O patch hidden é apenas um dos métodos para resolver o problema do arp. (Este é o método mais antigo em uso e por isso é o mais conhecido pelas pessoas que vem usando o LVS já por um bom tempo. Outros métodos ex. Módulo Noarp de Maurizio Sartori. (http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.arp_problem.html#sartori) e Filtragem de Arp do Julian. (http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.arp_problem.html#arp_filtering) também estão disponíveis.

Esta é uma lista dos sistemas operacionais que foram testados com os métodos de encaminhamento. (Nós acreditamos que todos os sistemas operacionais deverão funcionar de alguma forma)

  • Servidores-Reais por Modo -
    • LVS-NAT - Qualquer Sistema Operacional
    • LVS-DR - A maioria dos Sistemas Operacionais (Esperamos todos para sucumbir a realidade).

      O problema com sistemas operacionais que não são Linux é o mais comum, o problema com arp. O Ratz desenvolveu instruções de como fazer a configuração Servidores-Reais que não sejam Linux.

    • LVS-Tun - Apenas Linux
  • Servidores-Reais por Sistema Operacional -
    • Outros Sistemas Operacionais
      • LVS-NAT - Sem modificações necessárias para os servidores-reais
      • LVS-DR - de lonje, funciona para qualquer Sistema Operacional, embora alguma coisa seja necessária para encontrar os comandos para configurar o IPV (IP Virtual) em alguns servidores-reais com alguns sistemas operacionais. Caso esteja rodando o Linux-2.2.x ou Linux-2.4.x, você precisa resolver o problema do ARP.
      • LVS-Tun - Somente Linux (O Servidor-Real precisa ser capaz de desencapsular os pacotes IPIP). Se estiver rodando o Linux 2.2.x ou Linux 2.4.x, você terá que resolver o problema do ARP.
    • Linux 2.0.36: não há modificações ou patch necessários. funciona em qualquer modo, LVS-NAT, LVS-Tun e LVS-DR.
    • Linux 2.2.x,2.4.x:
      • LVS-NAT - sem modificações para os servidores-reais.
      • LVS-DR e LVS-Tun - (Esta é a parte difícil, também conhecido como "problema do arp").

        A teoria do problema do ARP pode ser deixada de lado nesta primeira leitura. Você precisa entender isto para criar a sua própria configuração de LVS. Aqui temos um resumo:

        
        SE   (
        	(Você está usando o LVS-DR ou LVS-Tun no Direcionador)
                E
        	(Você está rodando um Linux com kernel 2.2.x, 2.4.x no Servidor-Real)
                E
                (
        		O IPV no Servidor_Real está num dispositivo de rede, ex. lo:0, tunl0:0
        		ex. os pacotes para o IPV não serão aceitos pelo proxy transparente.
                )
                E
                (
        		O Servidor-Real pode responder as requisições ARP
        		do cliente/roteador (o servidor-real está no mesmo
        		segmento de rede do direcionador)
                )
             )
        ENTÂO
             {
             VOCÊ PRECISA RESOLVER O PROBLEMA DO ARP
             }
        FIM-SE
        
        

        No geral, você terá que resolver o problema do ARP.

A forma mais comum de resolver o problema do ARP é escondendo o IPV das requisições arp.

  • 2.2.x: O kernel padrão já possui o patch hidden (Oculto) aplicado. Use o kernel pré-aplicado nas distribuições padrão.
  • 2.4.x: O Kernel padrão não possui o patch do hidden aplicado. Você deve aplicar o patch no Kernel padrão com o patch 2.4.x obtido através da homepage do LVS.

O exemplo abaixo mostrará como resolver o problema do ARP. Todos os métodos para resolver este problema funcionam e possuem a mesma performance (throughput e latência) e são igualmente fáceis ou difíceis de configurar.

O método "hidden" para esconder os dispositivos das requisições de arp é considerado o método padrão para solucionar o problema e é o mais cmomumente usado nos servidores-reais Linux.

Para Kernels anteriores (2.0.x e até o mais recente dos 2.2.x kernels), outro método simples é colocar uma placa de rede extra no servidor-real para o IPV e não conectar esta placa em nenhuma rede. A placa de rede não manipulará nenhum pacote, ela servirá apenas como um meio de colocar o IPV no servidor-real. A placa de rede pode ser até mesmo a mais antiga modelo ISA, e uma placa PCI tulip custa bem menos do que você pagaria para alguém recompilar o Kernel com o patch hidden para você. (Nota, 2002: - isto não funciona para Kernels 2.4.x).

3.2.4. Por que netmask=/32 para o IPV no LVS-DR?

Horms 29 de Outubro de 2003

Se você estiver usando o LVS-DR então os pacotes que chegam ao servidor-real possuem o IP de destino definidos para o IPV. Então o servidor-real precisa de uma meio de aceitar este tráfego como local. Uma forma é adicionar uma interface no dispositivo de loopback e esconde-la, assim ela não responderá as requisições ARP.

A máscara deve ser 255.255.255.255 porque a interface de loopback irá responder aos pacotes para _todos_ os hosts em qualquer interface configurada. Assim 192.168.1.110 com máscara de rede 255.255.255.0 fará com que a máquina aceite pacotes de _todos_ os endereços na faixa 192.168.1.0 - 192.168.1.255, o que na verdade não é o que você quer.

3.2.5. O problema do ARP só acontece nos servidores-reais com Linux

Gregory Boehnlein

Eu estou indo trabalhar com um grupo de máquinas com Solaris 9 num futuro próximo , e eu gostaria de adicioná-los ao meu já existente LVS Cluster. Alguém possui alguma informação sobre O que/Como o Solaris poderá ser usado como um Servidor_Real num Cluster LVS-DR? No Linux eu implementei o patch Hidden-arp. Como isto pode ser resolvido no Solaris?

Roberto Nibali ratz (arroba) drugphish (ponto) ch 11 Aug 2003

O Solaris não possui este problema ;-).

ifconfig lo0:1 <IPV> netmask 255.255.255.255 up

e é isto. Funcionará porque o Solaris não responde ao arp para dispositivos de loopback.

Aqui está a informação original do Ratz para servidores-reais que não usam o Linux.

#uname      : FreeBSD
#uname -r   : 3.2-RELEASE
#<command>  : ifconfig lo0 alias <IPV> netmask 0xffffffff -arp up
#ifconfig -a: lo0: flags=80c9<UP,LOOPBACK,RUNNING,NOARP,MULTICAST>mtu 16837
#                  inet 127.0.0.1 netmask 0xff000000
#                  inet <IPV> netmask 0xffffffff
#
#uname      : IRIX
#uname -r   : 6.5
#<command>  : ifconfig lo0 alias <IPV> netmask 0xffffffff -arp up
#ifconfig -a: lo0: flags=18c9<UP,LOOPBACK,RUNNING,NOARP,MULTICAST,CKSUM>
#                  inet 127.0.0.1 netmask 0xff000000
#                  inet <IPV> netmask 0xffffffff
#
#uname      : SunOS
#uname -r   : 5.7
#<command>  : ifconfig lo0:1 <IPV> netmask 255.255.255.255 up
#ifconfig -a: lo0:  flags=849<UP,LOOPBACK,RUNNING,MULTICAST>mtu 8232
#                   inet 127.0.0.1 netmask ff000000
#             lo0:1 flags=849<UP,LOOPBACK,RUNNING,MULTICAST>mtu 8232
#                   inet <IPV> netmask ffffffff
#
#Atenção: O HP-UX responde as requisições arp para IPs na lo mesmo com -arp.
#(ex assim como no Linux).
#Você terá que colocar o servidor-real HP-UX numa rede diferente (Método do Lars)
#
#uname      : HP-UX
#uname -r   : B.11.00
#<command>  : ifconfig lan1:1 10.10.10.10 netmask 0xffffff00 -arp up
#ifconfig -a: lan0:   flags=842<BROADCAST,RUNNING,MULTICAST>
#                     inet <some IP> netmask ffffff00
#             lan0:1: flags=8c2<BROADCAST,RUNNING,NOARP,MULTICAST>
#                     inet <IPV> netmask ffffff00
#

Chris Kennedy ckennedy (arroba) iland (ponto) net

Uma coisa que eu encontrei por fora é que no Solaris 2.6, e provavelmente em outras versões dele, você tem que fazer alguma mágica para configurar o alias do loopback. Você deve rodar os seguintes comandos, um de cada vez:

ifconfig lo0:1 <IPV>
ifconfig lo0:1 <IPV> <IPV>
ifconfig lo0:1 netmask 255.255.255.255
ifconfig lo0:1 up

Que funciona bem e é atualmente parecido com uma conexão ponto-a-ponto ppp Que deve ser a maineira que o Solaris usa fazer um alias para a interface lo. Isto não fará com que você faça tudo de uma vez, apenas um passo por vez ou você terá que fazer todo o procedimento de inicialização da interface.

Ramon Kagan rkagan (arroba) YorkU (ponto) ca 05 Jun 2002

Apenas para quem estiver interessado. Você pode fazer o seguinte com a lo0:1 ou para paranóicos como eu hmel.

ifconfig <intfc> plumb
ifconfig <intfc> <IPV>
ifconfig <intfc> <IPV> <IPV>
ifconfig <intfc> netmask 255.255.255.255
ifconfig <intfc> up

Isto é da FAQ, mas eu quero adicionar que isto não precisa ser na lo0.

3.2.6. Atualizando o LVS

A única forma é compilando um novo Kernel, reiniciar, então compilar e instalar a versão do ipvsadm que combine com o novo kernel, assim como se você estivesse começando uma instalação do zero. Você não pode fazer uma atualização em plena atividade, para isso você deve desativar o Direcionador.

Eu uso o script rc.system_map (que vem com o script de configuração) para ter certeza de que eu estou com as corretas versões dos arquivos do ipvsadm, Kernel e System.map trabalhando juntos, quando eu estiver testando várias versões do LVS. (ex.uma versão 2.2 e uma 2.4).

3.2.7. LVS no CVS

O repositório CVS do IPVS está disponível em

cvs -d :pserver:anonymous@cvs.linuxvirtualserver.org:/home/lvscvsroot login
(type anything for the password of user anonymous)
cvs -d :pserver:anonymous@cvs.linuxvirtualserver.org:/home/lvscvsroot co ipvs

3.2.8. LVS no CD: Imagens ISO por Malcolm Turnbull

Malcolm Turnbull Malcolm (ponto) Turnbull (aroba) crocus (ponto) co (ponto) uk 03 Jun 2003, fez uma edição bootável pelo CD do seu swoftware de balanceamento de carga do loadbalancer.org O link está em http://www.loadbalancer.org/modules.php?name=Downloads&d_op=viewdownload&cid=2 mas atualmente está fora (Dec 2003).

Aqui está um blurb do Malcolm

A idéia básica é criar uma aplicação de switch da camada 4 que fosse fácil de usar para competir com o Coyote Point Equalizer / CISCO local director ... Todo o meu código fonte está no GPL, mas a distribuição pela imagem ISO contém arquivos que não estã na GPL para proteger o trabalho e permitir que vendedores licenciem o programa. A imagem ISO requer uma licença antes de você usá-la legalmente em produção.

Queime o CD com a imagem e use-a para iniciar um servidor sobressalente com pentium/celeron + CDROM ATAPI + 64MB de RAM + 1 ou 2 Placas de Rede e HD de 20GB.

A senha de root é : loadbalancer
O endereço IP é : 10.0.0.21/255.255.0.0
O login da interface web é : loadbalancer
A senha da interface web é : loadbalancer

A configuração padrão é a DR (Roteamento Direto) então basta plugá-la na mesma linha do seu HUB como o seu servidor web e comece a fazer uso. Baixe os manuais para obter informações de configuração ...

3.3. Dedicindo o tipo de encaminhamento LVS: LVS-NAT, LVS-DR ou LVS-Tun

Os exemplos abaixo mostrarão como configurar o LVS-NAT e o LVS-DR com um direcionador de 1 placa de rede.

Se você deseja mostrar a si mesmo como configurar um LVS, então o LVS-NAT possui a vantagem de funcionar com qualquer sistema operacional no servidor-real, e não são necessárias modificações no kernel dos servidores-reais.

Se você possui uma máquina Linux com o kernel 2.0.x, então ele pode ser usado como um servidor real para uma operação LVS em qualquer modo sem que seja necessária nenhuma modificação.

Já que o LVS-NAT foi o primeiro modo a ser desenvolvido, foi o primeiro usado pelas pessoas para configurar um LVS. Para Kernels 2.2.x, o LVS-NAT usa mais CPU do que o LVS-DR (O LVS-NAT requer a reescrita dos pacotes). Para Kernels 2.4.x o LVS-NAT possui mais performance do que o LVS-DR. Porém, para um teste simples, LVS-NAT somente requer uma máquina com pacth (o direcionador) e uma máquina sem modificações com qualquer sistema operacional para o servidor-real.

Para produção o LVS-DR seria a sua melhor escolha. Após um simples teste, uma vez que você precise da funcionabilidade do LVS-NAT (habilidade para usar servidores reais que oferecem serviços não encontrados nas máquinas Linux, remapeamento de portas, servidores reais com pilhas TCP/IP primitivas - ex. impressoras, serviços que iniciam uma requisição de conexão como o identd), estes ficarão melhor se movidos para o LVS-DR.

Aqui temos algumas condições para a escolha das várias formas do LVS: LVS-NAT (tradução dos endereços de rede), LVS-Tun (tunelamento) e LVS-DR (roteamento direto).

                       		LVS-NAT      	LVS-Tun            		LVS-DR

SO do Servidor Real          	qualquer        precisa de tunel        	a maioria
Modo do Servidor Real        	nenhum          tunl não pode responder arp  	lo não pode responder arp
Remapeamento de Portas         	sim          	não                 		não
Rede do Servidor Real     	privativa      	na internet        		local
                       		(remota  ou  local)             -
Número de Servidores Reais      baixo           alto               		alto
Os cliente se conectam em   	IPV          	IPV                		IPV
Gateway padrão do Servidor Real direcionador    o próprio roteador         	o próprio roteador
 

Até que você sabia qual método de encaminhamento usar, escolha nesta ordem

  • VS-DR padrão, possui alto desempenho e pode ser configurado na maioria dos sistemas operacionais. Os servidores Reais precisam estar na mesma rede do direcionador (o servidor real e o direcionador podem requisitar o arp um do outro)
  • VS-NAT, menor desempenho, alta latência. O Servidor real só precisa da pilha tcp/ip. (ex. qualquer sistema operacional e até mesmo uma impressora da rede). funciona para múltiplas instâncias de serviços. (ex múltiplas cópias de um serviço rodando em portas diferentes).
  • VS-Tun, Servidores Reais apenas em Linux. Possui o mesmo desempenho do VS-DR. Necessário se o servidor real estiver numa rede diferente do direcionador (ex. em outro local).

3.4. Múltiplos métodos de encaminhamento

Embora não seja usado frequentemente, você pode configurar um direcionador para encaminhar os serviços por métodos diferentes ao mesmo tempo. Assim você poderia ter o telnet sendo encaminhado por LVS-NAT para um conjunto de servidores-reais e o http encaminhado por LVS-DR para outro (possivelmente sobrepondo) conjunto de servidores-reais.

3.5. Scripts de configuração e ferramentas

Existem algumas ferramentas que podem ajudá-lo a configurar um LVS.

  • Joe escreveu Script de configuração para todos os tipos de LVS, que fazem uma série de checagens de sanidade no setup mas não manipulam o uso de direcionadores de backup (somente um direcionador simples). O script de configuração usamon para manipular a falha de serviços nos servidores reais.
  • Ferramentas que incluem suporte a direcionadores de backup, exUltra Monkey por Horms, que inclui suporte a falhas no direcionador, mas precisa ser configurado manualmente.
  • vrrpd/keepalived por Alexandre Cassen, que faz tudo sozinho para você e está no site keepalived.
  • Sylvain Maugiron sm (arroba) edatis (ponto) net 05 Feb 2003, fez uma edição para interface CGI.
  • Malcolm Turnbull malcolm (ponto) turnbull (arroba) crocus (ponto) co (ponto) uk 28 Jan 2003, escreveu uma interface web baseada em php para o lvs/ldirectord
  • Por Andreas Buer perbu (arroba) linpro (ponto) no 27 Jan 2003 escreveu uma CLI LVS controlada por um serviço (daemon) lvs-kiss Que usa ipvsadm para balanceamento de carga e controle de falhas.
  • Horms escreveu lvs-gui. Este é dos primórdios do LVS, somente configura o LVS LVS-DR, além de não ser mais continuado, não deve ser usado para os trabalhos atuais.
  • Sylvain Maugiron sm (arroba) edatis (ponto) net 27 Jan 2003

    Eu coloquei a minha interface CGI em ipvsadm Virtux Eu vou tentar desenvolver esta interface.

Infelizmente vários destes scripts produzem arquivos com o nome rc.lvs (apenas para você saber quando estiver lendo uma lista de discussão a respeito).

Uma pesquisa sobre LVS em produção (por Lorn Kay lorn_kay (aroba) hotmail (ponto) com, no Site do LVS) mostrou que a cada 19 LVS, 10 foram configurados usando métodos descritos como "outros", ex. nenhum destes usaram os scripts de configuração do site do LVS. Claramente, os scripts acima não são considerados para produção pelos nossos usuários.

3.5.1. Script de Configuração

Você pode configurar o LVS manualmente com o ipvsadm. Isto leva muitas vezes ao tédio e a condições de erro. Enquanto for viável de fazer para um simples LVS este não é o caminho para configurar vários LVS de configurações diferentes.

O script de configuração está na página de programas do LVS (no rodapé). Ele somente configura um direcionador simples e não manipula falhas no direcionador (Uso de Direcionadores de Backup). Para sistemas de produção você provavelmente precisará usar um que faça a manipulação das falhas do direcionador. Algumas pessoas já configuraram dois direcionadores através do Linux-HA (Alta Disponibilidade) usando o script de configuração, mas eu não tenho como mensionar detalhes de como elas fizeram isto.

O script de configuração foi desenvolvido para configurar um LVS rapidamente, assim eu pude fazer testes. A versão atual (0.9.x) faz um grande número de checagens, encontrando todos os erros que deliberadamente e patologicamente eu venho encontrando nos últimos 2 anos. Checagens elementares são feitas no roteamento e conectividade e o script tem produzido LVS funcionando quando nehum erro é encontrado.

Nota

O script de configuração testa e usa os links entre todas as máquinas - a rede já deve estar funcionando antecipadamente. Você já deve estar habilitado a pingar todas as máquinas da mesma rede. Você precisará estar com as placas de rede configuradas com todos os IPRs, e IPS e PIP (para versões 0.10.x e mais antigas) ou IPD (0.9.x e mais novas).

O script de configuração lê um arquivo conf e configura o LVS-DR, LVS-NAT, LVS-Tun, com máquinas de uma ou mais placas de rede usando dispositivos de rede normais ou através dos pacotes aceitos por um proxy transparente. A saída é um arquivo rc.lvs e rc.mon bem comentados para rodar no boot da máquina. (ou quando você estiver configurando um LVS).

O script de configuração detecta a versão do Kernel do direcionador (para versões antigas de kernels/ipvs) e rodará no direcionador para produzir os arquivos rc.lvs. O arquivo rc.lvs rodará no direcionador e nos servidores-reais. Isto permitirá que o script rc.lvs verifique as conexões com o agora configurado direcionador.

Eu tenho os arquivos/diretórios de configuração nas exportações NFS para os servidores-reais. Após rodar o script rc.lvs no direcionador, eu posso rodar o mesmo rc.lvs nos servidores-reais. (Após a configuração, as conexões de rede necessárias para as exportações dos diretórios podem ser removidas) Alternativamente o script de configuração pode copiar e executar o arquivo rc.lvs usando o ssh com a opção "-i" (para verificar se isto funciona execute `ssh servidor-real nome_do_host` - você deve voltar atras o nome do servidor-real). O arquivo rc.lvs sabe se ele está rodando num direcionador ou num servidor-real observando o IP da máquina e fazendo a comparação com o definido no arquivo de configuração.

O script rc.lvs é verboso e mostra todo o seu progresso. Ele procura por qualquer tipo e caso encontre ele o mensionará. ex.- Você poderá rodar o script quantas vezes queira na mesma máquina. Você pode copiar o script rc.lvs do direcionador para o servidor-real. Eu tenho o arquivo de configuração do direcionador localizado no diretório /etc/lvs (mas eles podem ficar em qualquer lugar) O diretório das exportação NFS podem ser os mesmos para todos os servidores-reais. Desta maneira o script rc.lvs pode ser executado por todos os servidores-reais. Num sistema de produção você deve desmontar os diretórios NFS após a execução do script e o término da configuração. Alternativamente, se você executar com a opção "-i" (instalação), o script de configuração usará o ssh para copiar os arquivos de saída para o servidor real e executará o script a partir do servidor real.

O script de configuração foi testado com direcionadores usando kernels 2.2 e 2.4. Ele alertará caso encontre versões de kernel mais antigas das que ele sabe a respeito. Estes alertas podem ser usualmente ignorados pois não se espera que o ipvs altere as suas configurações.

O arquivo de configuração e o script podem usar tanto IPs ou nomes-de-host (a partir do arquivo /etc/hosts) e podem usar tanto números de porta (ex 23) ou nomes do serviço (ex telnet) (a partir de /etc/services). Pode ser necessário fazer adições ao seu arquivo /etc/services como abaixo


ftp-data        20/tcp
ssh             22/tcp
domain          53/tcp  nameserver      dns #the string "dns" needs to be added here
domain          53/ucp  nameserver      dns #and here
shell           514/tcp cmd             rsh #add rsh here
https           443/tcp
https           443/udp
printer         515/tcp spooler         lpd #add the string "lpd" here
nfs             2049/udp        nfs
mysql           3306/tcp
mysql           3306/udp
netpipe         5002/tcp

Para muitas instãncias, uma máquina precisará de múltiplos IPs. Você pode colocar vários IPs numa mesma placa de rede usando o alias de IP (uma opção existente na configuração do kernel) - apenas entre com a interface virtual (ex. eth0:12) para cada IP no arquivo *.conf. (Nota: versões do script de configuração a partir de 0.10.x em diante moverão para a ferramenta iproute2 e não usarão os aliases `ifconfig` e `netstat -rn` não funcionarão para a configuração da rede pela feramenta iproute2 - Você deverá usar apenas as ferramentas do iproute2)

A documentação do script de configuração está no formato perldoc (acima de v0.9, versões mais antigas ainda estão no formato xmt/html).


director:/etc/lvs:$ perldoc configure.pl

3.5.2. Instalando o script de configuração

O script é em perl e requer módulos perl não necessários nesta demonstração. No entanto, o script não rodará sem eles, portanto verifique se você possui os módulos requeridos executando


$perl -w configure.pl

Se algum módulo estiver faltando (ex DNS.pm) você terá uma mensagem de erro como esta


direcionador:/etc/lvs# ./configure lvs_dr.conf.IP.two_NIC_two_network -i
Can't locate Net/DNS.pm in @INC (@INC contains: /usr/local/lib/perl5/5.6.0/i586-linux /usr/local/lib/perl5/5.6.0 /usr/local/lib/perl5/site_perl/5.6.0/i586-linux /usr/local/lib/perl5/site_perl/5.6.0 /usr/local/lib/perl5/site_perl .) at ./configure line 1365.
BEGIN failed--compilation aborted at ./configure line 1365.

Obtenha os módulos extras através do site da perl ou pegue diretamente usando o módulo CPAN, que você pode fazer da seguinte maneira


direcionador:# cpan
ou
direcionador:# perl -MCPAN -e "shell"

Você receberá um prompt do cpan. Ajuda, você obterá digitando "help" no prompt do cpan, é segredo. Para terminar o cpan, tente o comando `r`, que listará os módulos mais recentes disponíveis para os que já estão instalados. Você poderá instalar o módulo Net::DNS da seguinte forma


cpan> install Net::DNS

Se a instalação de um módulo tiver dependências, você será informado para baixar as mesmas.

O script rc.lvs usa fping para testar as conexões fping está disponível em

ftp://ftp.kernel.org/pub/software/admin/mon

As versões mais recentes do ping já possuem a funcionabilidade do fping e a atual versão do script de configuração testará esta nova funcionabilidade. Para versões mais antigas do script de configuração, caso você não queira baixar o fping, você poderá usar este script ao invés do fping (coloque ele em /usr/local/bin e fáça-o executável).


#!/bin/sh
#fping replacement

ping -c 1 $1
#-----fping-------------

3.5.3. Executando o script de configuração

Obtenha um modelo apropriado do arquivo de configuração(lvs_nat.conf, lvs_tun.conf ou lvs_dr.conf) de acordo com o modo de operação do LVS (VS-NAT, LVS-Tun ou LVS-DR respectivamente) e edite os IPs e serviços de acordo com a sua situação ou planejamento. Há modelos de arquivos de configuração para vários tipos de encaminhamento, números de redes e números de placas de rede. O formato do arquivo de configuração é o mesmo para todas as configurações de LVS - apenas os IPs e Redes são alterados quando você altera de um direcionador de 1 ou 2 placas de rede. São disponibilizados vários exemplos de arquivos de configuração mas somente o diagrama da rede é que muda (e os destinos do gateway padrão), não o formato das diretivas do arquivo. Os arquivos vem pré-configurados para telnet como serviço. Este é o serviço mais simples para testes iniciais: O serviço é facilmente disponibilizado e no seu teste você saberá em qual servidor conectou. Use o agendamento de round robin, assim, você se conectará a cada servidor de forma rotacionada, confirmando que tudo está funcionando adequadamente.

Outros serviços podem ser adicionados apenas descomentando/adicionando ou editando as entradas no arquivo de exemplo *.conf. O arquivo *.conf traz sugestões de IP como (192.168.1.x/24, 10.1.1.x/24) para as várias máquinas.

execute o script de configuração


$ ./configure.pl lvs_nat.conf

Isto produzirá um script chamado rc.lvs_xxx (ex rc.lvs_nat, rc.lvs_tun, rc.lvs_dr), e um script mon_xxx.cf. (Após fazer seus testes, coloque o script rc.lvs_xxx dentro de /etc/rc.d ou /etc/init.d e coloque o mon_xxx.cf dentro de /etc/mon)

Execute o script rc.lvs no direcionador e nos servidores-reais com o comando


$ . ./rc.lvs_dr

ou possivelmente (caso você tenha mensagens de erro, ex. it doesn't detect correctly whether it's running on a director or a realserver - isto aconteceu no meu servidor-real cuja versão era 2.0.36)

$sh rc.lvs_dr

O script rc.lvs -

  • adiciona dispositivos de rede e rotas para o direcionador e servidores-reais (incluindo os não Linux)
  • verifica as conexões com o fping.
  • executa o ipchains
  • habilita o ipforwarding no (VS-NAT) ou desativa no (VS-DR, LVS-Tun)
  • desativa o redirecionamento icmp (VS-NAT)
  • adiciona serviços com o ipvsadm.

O script rc.lvs não -

  • saberá sobre falhas no direcionador. Ele assume que existe apenas um direcionador.

Verifique as saídas do ipvsadm, ifconfig -a e netstat -rn no direcionador e no servidor-real, para ver se os serviços/IPs estão todos corretos. Caso tenha algo de errado re-edite e re-execute os scripts.

3.5.4. Teste com telnet

Telnet é um serviço não persistente (no senso the http, assim como no senso LVS) e permitirá verificar se todos os servidores-reais estão presentes (você reberá a mensagem de login de cada um a cada conexão).

Verifique se o(s) serviço(s) estão rodando em cada servidor no IPV (use o netstat -an). Alguns serviços (ex. telnet ficam escutando no endereço 0.0.0.0, que representa todos os IPs disponíveis na máquina).

Caso não tenha nenhum erro ao executar o script rc.lvs_xxx, então faça um telnet de um cliente para o IPV (aqui 192.168.1.110). Você será roteado para um dos servidores-reais e será apresentado o prompt de login (e o nome do servidor-real).

No direcionador, observer a saída do ipvsadm, você verá uma conexão para um servidor-real na porta:23.

No servidor-real faça o seguinte:

$ netstat -an | grep 23

e procure por conexões na porta do telnet.

Dê Logout e faça telnet novamente no IPV. Você terá o prompt de login dos outros servidores-reais.

3.5.5. Testando com outras coisas como http

Edite o arquivo lvs_nat.conf para ativar o serviço http, re-execute o configure.pl e re-execute os novos arquivos do rc.lvs_nat.

http: Aponte o seu navegador para o IPV http://192.168.1.110. Você terá do Documento Raiz de um dos servidores-reais. Abra outra cópia do Navegador e conecte novamente. Você estará agora se conectando ao outro servidor. (Será fácil de identificar caso as páginas sejam diferentes). Ovserve a saída do ipvsadm no direcionador e procure por conexões na porta http, e no servidor veja a saída do netstat -an | grep 80 (ou 8080 caso você esteja usando o LVS-NAT e tenha remapeado as portas) para conexões.

Caso o seu httpd seja persistente (é o normal do http), você irá/ou não conectar no mesmo servidor a cada vez.

3.6. Instalação - Geral

3.6.1. Abreviações/convenções para definições/testes/configurações

cliente:     	Endereço IP do Cliente	=IPC
gateway:     	IP do gateway/roteador	=GWD (o roteador será o cliente na maioria das configurações)
direcionador:	IP do direcionador      =IPD no direcionador   eth0
             	IP Virtual	        =IPV no direcionador   eth0:x (eg eth0:1)
servidor-real:  IP do Servidor-Real     =IPR no servidor-real  eth0
             	IP Virtual	        =IPV no servidor-real  eth0:x/lo:0/tunl0/dummy0
             	gateway             	=GWS
Nota

o IPD e o IPV devem ter IPs diferentes (mas podem estar na mesma placa de rede).

Nota

O IPD e o IPV serão movidos para outro direcionador na falha de outro direcionador. Estes IPs serão configurados como secundários (aliases na antiga linguagem dos kernels 2.0 e 2.2) assim, mais tarde você poderá usar o direcionador que falhou. O scrip de configuração define estes IPs para você (ex. você não deverá ter o IPV assim como o IPD como primários em suas placas de rede do direcionador).

Julian Anastasov ja (arroba) ssi (ponto) bg 06 Nov 2001

Se IPD==IPV o servidor-real receberá pacotes com saddr=local_ip (IPV) do direcionador. (Este é o problema do "source martian".) Você tem que colocar IPs adicionais (IPD) no seu direcionador e quando executar o ip route get x.y.z.230 você verá que x.y.z.180 não é a sua origem preferida. A forma normal de conseguir isto é configurando um IPV em outro dispositivo (como lo) ou configurar eles após o IPD estiver configurado. Desta maneira o IPD achará o melhor caminho quando estiver falando com a sua rede.

Adicionar IPD não é obrigatório para que qualquer LVS funcione mas você não será capaz de gerar tráfego não-LVS entre o direcionador e os servidores-reais (ping no seu caso).

3.6.2. O que você estará fazendo

Chris chrisd (arroba) better-investing (ponto) org 15 Apr 2002

  1. Eu baixei o kernel do kernel.org.
  2. Eu baixei o pacth d ipvs (um patch simples)
  3. Eu baixei o hidden patch.
  4. Eu descompactei o source do kernel em /usr/src
  5. Eu descompactei o patch hidden em /root
  6. Eu descompactei os arquivos do ipvs.
  7. Eu copiei o arquivos do patch hidden para /usr/src/linux
  8. Eu executei: patch -p1 <hidden-2.4.5-1.diff
  9. Eu copiei o patch do ipvs para /usr/src/linux
  10. Eu executei: patch -p1 <linux-2.4.18-ipvs-1.0.2.patch
  11. Eu dei um make menuconfig, e configurei o Kernel
  12. Eu dei exatamente os mesmos passos que você deu para compilá-lo:
    make dep;make clean;make bzImage;make modules;make modules_install
    

E não pulei nenhuma linha.

Coisas para seren pensadas:

  • Não aplicar o patch mais de uma vez!
  • Caso ele não funcione com estes passos e você tenha o RH 7.2, esteja certo de possuir todos os pacotes gcc instalados. Caso precise, coloque o CD na máquina e instale ou atualize os pacotes necessários.
  • Se mesmo assim não funcionar, esteja certo que o seu gcc está atualizado. Uma boa maneira de se fazer isto é fazendo o download do red-carpet do Ximian.org. Ele é um popular atualizador para Xwindows. Você não precisa do gnome para executar este programa. (Nunca mais).
  • Caso ele não funcione, consiga um guru *real*, afinal, eu não sei mais o que pode ser!

3.7. Kernel do Direcionador - Compile você mesmo

(com sugestões de John Cronin jsc3 (aroba) havoc (ponto) gtf (ponto) org)

Nota
Este é o método mais aconselhado. Obtenha um kernel recente em ftp.kernel.org e obtenha a combinação certa do código doip_vs do site do LVS (na página de programas).
Nota

Você pode compilar o código do IPVS dentro do kernel ou como um módulo carregável, dando duas versões doip_vs para cada edição. As duas versões do código não são distribuidas juntas (normalmente há uma pequena diferença de tempo entre elas).

Nota

De Horms: Caso você queira refinar o código do ipvs, (ex para alterar o tamanho das tabelas, eu não recomento que você faça isto) e se você estiver compilando o ipvs como um módulo, você precisará apenas recompilar e recarregar o módulo do ipvs para que as alterações tenham efeito. Você precisa aplicar o patch e recompilar o Kernel para poder usar o ipvs . Entretanto, para kernels 2.4.x, vale observar que apenas um símbolo registrado é necessário ao ipvs ser capaz de fazer efeito no netfilter. O Kernel não sabe e nem tomará conhecimento do código contido nos módulos do ipvs quando eles forem compilados (a não ser que você o esteja compilando dentro do kernel). Nos kernels 2.2 o ipvs faz muito mais com o patch.

Você precisa começar o processo de compilação a partir de uma árvore de diretórios limpa, para isso ou simplesmente execute make mrproper. Caso você já tenha configurado o seu kernel para o seu hardware sem o ipvs, você poderá aproveitar o seu arquivo .config. Ele terá o patch aplicado, através do código do kernel (adicionando uma nova entrada na parte de redes), e as suas configurações antigas serão mantidas. (Mantenha uma cópia de segurança do seu arquivo .config).

Aplique o patch ipvs ao kernel usando as instruções contidas no pacote tar do ipvs, você fará algo parecido com


direcionador:/usr/src/linux# patch -p1 <../ipvs-1.0.6-2.2.19/ipvs-1.0.6-2.2.19.patch

ou

direcionador:/usr/src/linux# patch -p1 <../ipvs-0.2.7-2.4.2/ipvs-0.2.7-2.4.2.patch

Sistemas de arquivo ext3

Há uma colisão com nomes de variáveis quando se aplica o pacth no kernel com ambos ipvs e ext3

Adam Kurzawa 4 Nov 2001

após aplicar AMBOS, os pacthes lvs e ext3 no 2.4.13 eu tive problemas na compilação. Se cada um dos patches forem aplicados individualmente não há problemas.

Wensong

Remova a linha "EXPORT_SYMBOL(buffermem_pages);" no arquivo linux/kernel/ksyms.c, e compile o kernel.

3.7.1. Instruções de Compilação

As instruções atuais para compilação do kernel variam de acordo com as versões. Você pode compilar o ip_vs diretamente dentro do kernel ou como um módulo carregável - ambas as formas irão funcionar normalmente para uma configuração inicial.

Você precisa habilitar o "Prompt for developmental code... " na seção "Code Maturity". Na seção "Networking" você deverá habilitar o IP:masquerading antes de ver as opções do ipvs

Algumas das opções de compilação do kernel abaixo não são explicitamente necessárias para funcionar com o LVS, mas você poderá necessitar delas - ex ip aliasing caso você queira fazer um direcionado com apenas uma placa de rede, ou tunneling caso você queira fazer uma LVS-Tun, a não ser que você saiba exatamente o que está fazendo, habilite todas estas opções com um '*' no início de cada linha. As opções de configuração do kernel abaixo são exlusivamente para o LVS. Certamente você precisa configurar outras coisas (ex. filesystems, hardware...).

Kernels 3.7.2. 2.2.x

As instruções atuais de compilação do kernel irão variar de acordo com o número do patch do kernel. Aqui está o que eu usei para ipvs-0.9.9 no kernel 2.2.15pre9 nas opções de rede.



           [*] Kernel/User netlink socket
           [*] Routing messages
   	< > Netlink device emulation
*          [*] Network firewalls
           [*] Socket Filtering
   	<*> Unix domain sockets
*          [*] TCP/IP networking
           [ ] IP: multicasting
*          [*] IP: advanced router
*          [*] IP: policy routing
           [ ] IP: equal cost multipath
           [ ] IP: use TOS value as routing key
           [ ] IP: verbose route monitoring
           [ ] IP: large routing tables
           [ ] IP: kernel level autoconfiguration
*          [*] IP: firewalling
           [ ] IP: firewall packet netlink device
*          [*] IP: use FWMARK value as routing key (NEW)
*          [*] IP: transparent proxy support
*          [*] IP: masquerading
           --- Protocol-specific masquerading support will be built as modules.
*          [*] IP: ICMP masquerading
           --- Protocol-specific masquerading support will be built as modules.
*          [*] IP: masquerading special modules support
*  	<M> IP: ipautofw masq support (EXPERIMENTAL)
*  	<M> IP: ipportfw masq support (EXPERIMENTAL)
*  	<M> IP: ip fwmark masq-forwarding support (EXPERIMENTAL)
*          [*] IP: masquerading virtual server support (EXPERIMENTAL)
*          (12) IP masquerading LVS table size (the Nth power of 2)
*  	<M> IPVS: round-robin scheduling
*  	<M> IPVS: weighted round-robin scheduling
*  	<M> IPVS: least-connection scheduling
*  	<M> IPVS: weighted least-connection scheduling
*          [*] IP: optimize as router not host
*  	<M> IP: tunneling
   	<M> IP: GRE tunnels over IP
           [*] IP: broadcast GRE over IP
           [ ] IP: multicast routing
           [*] IP: PIM-SM version 1 support
           [*] IP: PIM-SM version 2 support
*          [*] IP: aliasing support
           [ ] IP: ARP daemon support (EXPERIMENTAL)
*          [*] IP: TCP syncookie support (not enabled per default)
           --- (it is safe to leave these untouched)
   	< > IP: Reverse ARP
           [*] IP: Allow large windows (not recommended if <16Mb of memory)
   	< > The IPv6 protocol (EXPERIMENTAL)

Não altere o tamanho da tabela do IP masquerading LVS a menos que você saiba muito sobre como trabalha o ip_vs. Mas caso você tenha fortes motivos para alterar o tamanho da tabela, pelo menos dê uma lida neste HOWTO .

Faça todas as demais tarefas da compilaçãod do kernel, como "make modules", "make modules_install" e copie o novo kernel (e opcionalmente o System.map, requerido pelo Script de configuração.) para o diretório / ou /boot, e edite o seu carregador de inicialização (lilo ou grub). Esteja certo de manter o seu antigo kernel e suas configurações guardadas em local seguro por questões de segurança no caso de uma recuperação. Agora, reinicie a máquina com o seu novo kernel. Quando estiver carregando o novo kernel (com o ip_vs compilado como módulo), esteja certo de que os módulos ip_vs* estejam carregados. O arquivo README contido no diretório do kernel possui todas as informações que você precisa para aprender sobre os procedimentos de compilação e instalação de um novo kernel.

Kernels 3.7.3. 2.4.x

Os pacthes para versões anteriores ao Kernel 2.4.x foram configurados e instalados separadamente do "make menuconfig" para o kernel. Isto requeria que arquivos fossem movidos para os diretórios /lib/modules e carregados manualmente. Com as versões mais recentes do kernel, você pode obter um conjunto de arquivos onde os patches são colocados na árvore de diretório e configurados por make configure. O configurador poderá variar com diferentes patches do ip_vs Esteja certo de ter lido os documentos.

Nota

As instruções abaixo referen-se a versões mais recentes do kernel 2.4.x. Você pode esperar que ocorra alguma diferença pequena. Para o Kernel 2.4.18 (Simon Young simon-lvs (arroba) blackstar (ponto) co (ponto) uk, 1 Oct 2002)

O IP Masquerading está em:

Networking options  --->
  IP: Netfilter Configuration  --->

  <M> IP tables support (required for filtering/masq/NAT)
  <M>   Full NAT
  <M>     MASQUERADE target support

Tudo referente ao LVS deve estar em:


Networking options  --->
  IP: Virtual Server Configuration  --->

Aqui está a configuração das opções de rede


	<*> Packet socket
	[ ] Packet socket: mmapped IO
	[*] Kernel/User netlink socket
	[*] Routing messages
	<*> Netlink device emulation
	[*] Network packet filtering (replaces ipchains)
	[*] Network packet filtering debugging
	[*] Socket Filtering
	<*> Unix domain sockets
	[*] TCP/IP networking
	[ ]   IP: multicasting
	[*]   IP: advanced router
	[*]     IP: policy routing
	[*]       IP: use netfilter MARK value as routing key
	[*]       IP: fast network address translation
	[*]     IP: equal cost multipath
	[*]     IP: use TOS value as routing key
	[*]     IP: verbose route monitoring
	[*]     IP: large routing tables
	[*]   IP: kernel level autoconfiguration
	[ ]     IP: BOOTP support
	[ ]     IP: RARP support
	<M>   IP: tunneling
	< >   IP: GRE tunnels over IP
	[ ]   IP: multicast routing
	[ ]   IP: ARP daemon support (EXPERIMENTAL)
	[ ]   IP: TCP Explicit Congestion Notification support
	[ ]   IP: TCP syncookie support (disabled per default)
	  IP: Netfilter Configuration  --->
	  IP: Virtual Server Configuration  --->
	< >   The IPv6 protocol (EXPERIMENTAL)
	< >   Kernel httpd acceleration (EXPERIMENTAL)
	[ ] Asynchronous Transfer Mode (ATM) (EXPERIMENTAL)


Aqui está a minha configuração para o IP: Virtual Server configuration: (ative todas as opções)


	<M> virtual server support (EXPERIMENTAL)
	[*]   IP virtual server debugging (NEW)
	(12)   IPVS connection table size (the Nth power of 2) (NEW)
	--- IPVS scheduler
	<M>   round-robin scheduling (NEW)
	<M>   weighted round-robin scheduling (NEW)
	<M>   least-connection scheduling scheduling (NEW)
	<M>   weighted least-connection scheduling (NEW)
	<M>   locality-based least-connection scheduling (NEW)
	<M>   locality-based least-connection with replication scheduling (NEW)
	<M>   destination hashing scheduling (NEW)
	<M>   source hashing scheduling (NEW)
	--- IPVS application helper
	<M>   FTP protocol helper (NEW)

Não altere o tamanho da tabela (hash) da conexão IPVS a não ser que você tenha um bom conhecimento de como o ip_vs funciona. Caso você tenha fortes motivos para alterar o tamanho da tabela, pelo menos dê uma lida no HOWTO.

Aqui está o exemplo da minha configuração para o netfilter


	<M> Connection tracking (required for masq/NAT)
	<M>   FTP protocol support
	<M> Userspace queueing via NETLINK (EXPERIMENTAL)
	<M> IP tables support (required for filtering/masq/NAT)
	<M>   limit match support
	<M>   MAC address match support
	<M>   netfilter MARK match support
	<M>   Multiple port match support
	<M>   TOS match support
	<M>   Connection state match support
	<M>   Unclean match support (EXPERIMENTAL)
	<M>   Owner match support (EXPERIMENTAL)
	<M>   Packet filtering
	<M>     REJECT target support
	<M>     MIRROR target support (EXPERIMENTAL)
	<M>   Full NAT
	<M>     MASQUERADE target support
	<M>     REDIRECT target support
	<M>   Packet mangling
	<M>     TOS target support
	<M>     MARK target support
	<M>   LOG target support
	< > ipchains (2.2-style) support
	< > ipfwadm (2.0-style) support

3.7.4. iptables/ipchains problemas de compatibilidade

Nota

Eu removi a opção do ipchains aqui. Isto foi definido como <M> nas versões anteriores do mini-HOWTO. Entretanto isto levantou alguns problemas para pessoas que não compreendiam os problemas de compatibilidade do ipchains

O ipchains nos kernels 2.2.x foram substituídos pelo iptables no kernel 2.4.x. Para os kernels 2.4.x, o ipchains ainda existe por uma questão de compatibilidade. Entretanto, o ipchains e iptables não podem ser usados ao mesmo tempo. Você nunca deve ativar o ipchains nos kernels 2.4.x. (2.4.x está em produção desde 1999).

O ipchains nos Kernels 2.4.x faz o conntrack ficar mais lento (Veja o HOWTO).

O módulo do ip_tables é imconpatível com o ipchains. Se ele estiver presente, o módulo do ip_tables deve ser descarregado para fazer com que o ipchains funcione.

Caso você esteja com o ip_tables carregado, você receberá uma série de mensagens de erro ao tentar executar comandos do ipchains no 2.4. Mesmo dizendo que existe a compatibilidade do ipchains no kernel 2.4, seria mais fácil informar que os comandos do ipchains estão disponíveis para que você possa re-escrever os seus scripts para o iptables e no caso de problemas você poderia até usar a compatibilidade por questões temporárias. Muitos outros programas ou scripts tentarão executar os comandos do ip_tables na sua máquina com o kernel 2.4, tenha isso em mente caso queira manter o ipchains.

3.7.5. Compilação do Kernel

Faça todas as demais tarefas do Kernel - make modules, copie o novo kernel para o diretório / ou /boot (Dê um nome diferente para o seu novo Kernel ex bzImage-0.9.4-2.4.12), edite o lilo.conf e re-execute o lilo. Mantenha as informações do seu antigo kernel no seu lilo.conf, assim você poderá recorrer em caso de problemas. Agora, reinicie a máquina com o seu novo Kernel.

3.7.6. Se compilar o ip_vs fora do kernel 2.4, tenha um kernel funcionando primeiro.

Reinicie com o novo Kernel e verifique se o diretório /usr/src/linux está apontando para a atual árvore de diretórios do código fonte do kernel (Você pode usar o rc.Sysmap, que acompanha o Script de configuração), antes de compilar o ipvs (caso você esteja fazendo separadamente) e o ipvsadm.

Não esqueça de executar depmod -a após você instalar os módulos do ip_vs.

3.8. Como eu posso verificar se o meu kernel está com o patch do ip_vs realmente aplicado?

Resposta curta: você não deve usar o kernel de outras pessoas - faça você mesmo, aplique o patch e compile o seu kernel.

Resposta Longa: Caso você tenha o binário do kernel, então você já tem um trabalho feito. Caso você tenha compilado o próprio kernel, então você pode dar-lhe um nome como

bzImage-0.9.3-2.4.9-module-forward-shared

para lembra-lo do que se refere, neste caso (ip_vs 0.9.3 compilado como módulo para o kernel 2.4.9, patch forward-shared).

De outra forma

  • Caso o ipvs esteja compilado internamente no kernel

    $ grep ip_vs_init System.map
    
  • se este for um kernel recente e o ip_vs estiver compilado como um módulo, ao executar o ipvsadm irá carregar o módulo automaticamente para você, e você pode verificar isto com o comando lsmod.
  • para kernels mais antigos você deverá carregar o módulo antes de executar os comandos do ipvsadm, caso o kernel não tenha o patch do ip_vs os módulos não funcionarão e ocorrerão erros ao tentar carregá-los.

3.9. ipvsadm

O ipvsadm é uma parte do pacote tar do ipvs ele é o programa que faz a interface do usuário para o LVS. você executará o ipvsadm no direcionador.

Antes de tentar compilar o ipvsadm -

  • reinicie a máquina com o kernel que está com o patch do ip_vs aplicado

    caso contrário você receberá mensagens de erro informando que alguns arquivos de cabeçalho (headers) do ip_vs estão faltando (você estará usando os arquivos de cabeçalhos da versão anterior do kernel)

  • Verifique se você está mesmo usando a versão do kernel com o patch.

    Execute uname -a, ou caso você tenha compilado o ip_vs como um módulo, execute lsmod | grep ip_vs.

Execute um make install para o ipvsadm. Esteja certo de estar usando o ipvsadm do mesmo pacote tar que você obteve o pacth para aplicar em seu kernel (caso você faça o novo kernel mas esqueça de instalar o novo ipvsadm, você estará usando o antigo ipvsadm com o novo código do ipvs). A partir do momento que você não conseguir compilar/executar o ipvsadm pode ser que você tenha esquecido de executar o make install após a reinicialização da máquina.

Nota
ipvsadm não possui um sistema poderoso para verificar a compatibilidade de versões. Ele irá rodar mesmo nas versões incompatíveis do ip_vs mas isto não estará óbvio, caso você seja novo no LVS, uma saída estranha representa um conflito de versões (Eu fiz isto e questionei nas listas de discussão). Normalmente eu tenho diferentes versões do ip_vs instalados no meu sistema para efetuar testes. EU instalo o ipvsadm como /sbin/ipvsadm-(ip_vs_versão-versão_do_kernel)exipvsadm-0.2.12-2.4.4, e mando o rc.system_map re-linkar para o o ipvsadm correto no momento do boot.

3.9.1. Compilando o ipvsadm com o popt

Você poderá opcionalmente compilar o ipvsadm com as biblicotecas do popt, Isto permite que o ipvsadm manipule argumentos mais complicados na linha de comando. Caso a sua biblioteca libpopt for muito antiga, o seu ipvsadm irá segv. A compilação padrão usa a linkagem estática, mas atualmente pode usar as bibliotecas dinâmicas. Caso você tenha problemas e erros tipo "POPT não encontrado", então você ainda não instalou o popt ou não possui a versão mais recente dele.

Torsten Buslei

Eu compilei e instalei um novo kernel (2.4.18 com o patch 2.4.19-pre8 e o linux-2.4.18-ipvs-1.0.2.patch.gz). Após o reboot (tudo parecia estar ok até aqui), compilando o ipvsadm (tanto o ipvs-1.0.2.tar.gz quanto o ipvsadm-1.20.tar.gz) Eu obtive as seguintes mensagens de erro:

ipvsadm.c:345: `POPT_ARGFLAG_OPTIONAL' undeclared (first use in this function)
 

Eu comentei uma parte do ipvsadm.c:345


{"persistent", 'p', POPT_ARG_STRING/*|POPT_ARGFLAG_OPTIONAL*/, &optarg, 'p'},

agora o ipvsadm compilou e está rodando normalmente. Há algum problema em fazer isto?

Horms horms (arroba) vergenet (ponto) net 05 May 2002

Parece que você tem uma versão do opot que não suporta argumentos opcionais (POPT_ARGFLAG_OPTIONAL). A sua correção estará correta, com o efeito lateral que você terá dando a opção -p/--persistent caso você a use.

3.10. Direcionador: verificando o seoftware

Com um pouco de habilidade e sorte você terá carregado todos os programas sem nenhum problema nem mensagens de erro.

Verifique se o ipvsadm detectou o kernel com o patch aplicado executando o comando


direcionador:/etc/lvs:# ipvsadm

se tudo estiver OK você terá uma saída parecida com


direcionador:/usr/src# ipvsadm
IP Virtual Server version 0.2.7 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port          Forward Weight ActiveConn InActConn

Se você não estiver rodando um kernel com os patches do ipvs você terá uma mensagen informando que os módulos do ipvs estão faltando.

3.11. Kernel do Direcionador: Consiga alguém para fazê-lo para você

Apesar das nossas advertências para você pelo menos tentar compilar o seu próprio LVS a partir do kernel padrão, as pessoas continuam a tentar fazer corretivos.

Algumas distribuições já chegam com o patch do ipvs pré-aplicado. A RedHat começou a fazer isto em 1999 (mas aparentemente ela parou de faze-lo no kernel 2.4.20, de acordo com Peter Nash peter (ponto) nash (arroba) changeworks (ponto) do (ponto) uk em 15 de Maio de 2003 e com o RedHat 9.0 de acordo com James Bourne james (arroba) sublime (ponto) com (ponto) au). A SuSe falou a respeito de estar fazendo isto também (Dez de 2000) (mas começou a faze-lo em Maio de 2003). Caso você tenha uma destas distribuições, siga as instruções disponibilizadas por elas sobre como fazer a utilização do LVS no Direcionador. Há uma média de 2 versões do ipvs a cada nova versão do kernel, você estará sempre utilizando uma versão pouco mais antiga do ipvs caso prefira usa-lo por este meio. Isto em si não é um problema - o ipvs vem produzindo qualidade desde a sua primeira edição, porém as versões com mais de 6 ou 12 meses não são mais discutidas nas listas de e-mail. Então você será convidado a fazer upgrandes e voltar a lista.

Caso você não saiba se possui um Kernel com o patch do ipvs aplicado, ou você pergunta ao seu fornecedor Linux ou você pode olhar nos diretórios do código fonte do kernel em busca de arquivos do ipvs, cujos nomes costumam ser (/usr/src/linux/net/ipv4/ip_vs_*.c).

Se você não estiver certo, então, Configure a partir de um novo kernel em ftp.kernel.org/pub/linux/kernel/. Você poderá retornar a qualquer momento para o kernel nativo da sua distribuição. Caso você tente aplicar patches em kernels que já foram aplicados, você receberá mensagens de erro. ex


> Hunk #1 succeeded at 121 with fuzz 2 (offset 18 lines).
> Hunk #2 FAILED at 153.
> Hunk #3 FAILED at 163.
> Hunk #4 FAILED at 177.
> 3 out of 4 hunks FAILED -- saving rejects to include/linux/ip_masq.h.rej
>
> patching file `include/net/ip_masq.h'
> Reversed (or previously applied) patch detected!  Assume -R? [n]

Existem pessoas que compilaram o kernel após duas aplicações dos patches e então correram para as listas de e-mail com as mensagens de erro que são impossíveis de explicar. Uma das maiores fontes de perguntas nas listas de e-mail são de pessoas executando o RedHat que tiveram problemas na instalação seguindo as instruçõs contidas neste mini-HOWTO. O que acontece é que elas não começaram a partir de um kernel padrão e as instruções da RedHat não foram suficientes para executar todo o processo.

Aqui temos alguns conselhos: Larslmb (arroba) suse (ponto) com

Olá, caso você esteja recebendo mensagens de erro como estas, ou se sua distribuição já possui o LVS, não tente aplicar o patch.

Primeiramente, tente verificando se o seu distribuidor Linux possui um kernel atualizado e se há suporte técnico para ele.

Caso você pense que a última edição do LVS possui novas implementações importantes para você ou se possui importantes correções de defeitos (bugs) então você deve questionar o seu distribuidor Linux sobre estas mudanças e sobre as soluções que ele pretente tomar.

Se você precisar de uma edição mais nova do que o seu distribuidor está oferecendo, então obtenha um novo kernel a partir do site ww.kernel.org e comece a partir dele. Esteja certo de aplicar todos os patches que você irá precisar.

3.11.1. Trabalhando com o Kernel da RedHat (patch pré-aplicado)

Ramish Patel escreveu:

Eu estou usando o RedHat Linux 7.2 com kernel 2.4.7-10 e eu tentei aplicar inúmeros pacthes do LVS, apenas dois deles foram aplicados sem erros - eles vieram de ipvs-1.0.4.tar.gz, Que continham os dois pacthes aplicados com sucesso ao kernel, linux_kernel_ksyms.c.diff , linux_net_netsyms.c.diff .

Recompilei o kernel mais tarde. E continuo tendo mensagens de erro:

"Could not open the /proc/net/ip_masq/vs file
Are you sure that the IP Virtual Server is supported by the kernel?"

Horms horms (arroba) verge (ponto) net (ponto) au 31 Jul 2002

Primeiramente, eu recomendo que você comece a partir de um novo kernel obtido no site www.kernel.org (como o 2.4.18) ao invés de usar o kernel da redHat, a não ser que você saiba exatamente o que e por que está fazendo isto. O ipvs-1.0.4 não funciona com o kernel que acompanha o RedHat 7.2 e vice-versa.

Entretanto, caso você insista em fazer isto, aqui está um guia útil.

  • Você precisa aplicar os arquivos linux_kernel_ksyms.c.diff e linux_net_netsyms.c.diff
  • Você precisa remover a versão do LVS existente no kernel do RedHat 7.2. Você pode fazer isto examinando os patches fornecidos com o kernel src.rpm e o arquivo spec.
  • Compile o Kernel - uma porção pequena pode dar errado. Novamente "Este é o caminho da dor"
  • Compile os módulos do kernel disponíveis do subdiretório ipvs do pacote tar ipvs-1.0.4.tar.gz. Você terá que fazer pequenas modificações no código fonte para faze-lo funcionar, mas devem ser poucas.

Alex Kramarov escreveu instruções para compilar/atualizar o kernel da RedHat.

3.12. Direcionador: problemas de compilação

Kim Le, Jul 25, 2001

Eu tive problemas ao compilar o LVS como um módulo. Ele continua a queixar-se de "unresovled symbols - nf_register_hook". Isto porque eu não tinha o NETFILTER selecionado, então eu dei um make menuconfig, selecionei o NETFILTER e recompilei o kernel. Verifiquei que o System.map agora possui o símbolo nf_register_hook.

Horms

Acredito que você tenha uma resposta quanto a problemas de símbolos no kernel em http://marc.theaimsgroup.com/?l=linux-virtual-server&m=98766822929703&w=2 Você pode encontrar informações de como corrigir isto em http://lists.samba.org/listproc/netfilter/1999-November/002871.html Basicamente os símbolos do seu kernel estão desatualizados e você precisa recompilá-lo a partir de um "make mrproper". Talvez você queira fazer uma cópia de segurança do seu arquivo .config antes de fazer isto. Após terminar estas tarefas, volte ao diretório do ipvs e execute


$ make clean; make all; make install

Wensong

No meu entender é que o kernel/ksyms.c tem o patch aplicado nós precisamos fazer um make mrproper para ter certeza de que o ksyms está atualizado quando o kernel for recompilado. Isto está correto? Se estiver, não custaria nada incluir esta informação no arquivo README.

Aqui está a postagem original para correção a partir da lista do SAMBA.

Erik Ratcliffe erik (arroba) calderasystems (ponto) com 29 Nov 1999

Os símbolos exportados pelo kernel deverão estar armazenados em /usr/src/linux/include/linux/modules. mais notadamente, o arquivo ksyms.ver. Caso a sua compilação de kernel tenha sido feita numa estrutura de diretórios que você não tenha feito antes o 'make mrproper', a maior probabilidade é que os arquivos nos diretórios estão velhos. Eu tenho visto ocorrências destas em compilações de kernel com suporte a SMP cujos símbolos ainda representam um kernel Não-SMP. (você pode ver que os símbolos do SMP possuem um prefixo "smp_" em CRC/version number; já os símbolos de kernels Não-SMP não possuem este prefixo).

A melhor maneira de evitar problemas como este é executar o "make mrproper" antes de qualquer compilação do kernel e usar o "make modules_install". Esteja certo de marcar a opção para versões incluídas nos módulos, na configuração do kernel.

3.13. Servidores Reais

Os Servidores Reais são os computadores que de fato oferecem os serviços. O cliente pode se conectar diretamente nestes computadores para obter os serviços. Numa implementação LVS, vários Servidores Reais estão em linha abaixo do Direcionador com a finalidade de oferecerem mais desempenho ou redundância. Um Servidor Real pode oeferecer um serviço diretamente (ex telnet, httpd, smtp, lpd), ou podem acessar máquinas de terceiros para serviços. (o servidor real pode ser um cliente de um banco de dados local ou pode ser um proxy squid conectando outras máquinas na Internet).

  • Para LVS-NAT:

    o servidor real precisa de uma pilha tcpip (ex ele possui um IP) e oferece um serviço (até mesmo uma impressora da rede pode ser um servidor real aqui).

  • LVS-DR, LVS-Tun

    Adicionalmente aos requisitos para o LVS-NAT, os servidores reais possuem um IPV (também presente no Direcionador). A razão disto é resolver o problema do ARP Você consegue resolver este problema escondendo o IPV nos servidores reais dos clientes/roteadores usando tabelas de roteamento, usando a opção -noarp. (mas não funciona nos Linux 2.2+) então aplica-se um patch nos (Linux 2.2+).

Em geral, nada em específico precisa ser feito nos servidores reais (exeto por configurar o IPV nos LVS-DR e LVS-Tun para resolver o problema do arp, veja abaixo). Você pode ter qualquer sistema operacional rodando neles, exeto para o LVS-Tun, que só funciona com Linux e em alguns Windows) Você os coloca na rede, inicia os serviços no IPV (para LVS-DR e LVS-Tun) ou no IPR (VS-NAT), configura o gateway padrão (o roteador e o direcionador respectivamente nas configurações tradicionais) e com isso você estará pronto para trabalhar.

Exceções: Com o LVS-DR (e possivelmente no LVS-Tun dependendo de como você o configurou) Você terá que lidar com o problema do arp. Infelizmente isto faz com que uma instalação que deveria ser simples dê um pouco mais de trabalho. Caso você não queira lidar com o problema do arp agora, você pode usar o LVS-NAT.

os exemplos abaixo mostram como lidar com o problema do arp.

Eventualmente você precisará de um maior desempenho e uma menor latência, e para isso você precisará entender o problema do arp. Em servidores reais que não são Linux, basta você usar a opção NOARP no ifconfig da lo:0.

3.13.1. Servidores Reais Linux

Para linux,

  • Nos Kernels 2.0.x: Use a opção NOARP do ifconfig para configurar o IPV na lo:0 (assim como para outros sistemas semelhantes ao UNIX)
  • Nos kernels 2.2.x(ex. x>12); já escondem o arp
  • Nos Kernels 2.4.x; Aplique o Patch "hidden" do Julian e então esconda o arp

Caso você esteja trabalhando com o problema do arp escondendo o dispositivo IPV nos servidores reais, você precisará aplicar o patch nestes servidores se

  • 2.2.x (onde x<12)
  • 2.4.x - todas as versões.

As versões atuais do 2.2.x, ex. 2.2.19 já estão com o patch "hidden" aplicados ex. você não tem que aplicar o patch nos kernels 2.2.x atuais. Para Linux-2.0.x você pode usar a opção NOARP ao configurar o IPV no dispositivo.

Para Servidores Reais com Linux 2.4.x, aplique o patch "hidden" (obtenha-o no site da LVS na página de programas) ao seu kernel e proceda com a recompilação usando as opções tradicionais. Para o Kernel 2.4.4 -


servidor_real:/usr/src/linux# patch -p1 <../arch/hidden-2.4.4-1.diff

3.13.2. Outros UNIXes

Esta é uma lista de servidores reais postada por Ratz. Lembre-se de definir a máscara de rede para /32 para o IPV nos LVS-DR e LVS-Tun (Para o LVS-NAT você pode colocar qualquer máscara). Caso você esteja rodando servidores reais UNIX que não sejam linux, você poderá resolver o problema do arp normalmente ao configurar o dispositivo do IPV com a opção -arp.

  • Solaris 2.5.1, 2.6, 2.7
  • Linux (of course): 2.0.36, 2.2.9, 2.2.10, 2.2.12
  • FreeBSD 3.1, 3.2, 3.3
  • NT (although Webserver would crash): 4.0 no SP
  • IRIX 6.5 (Indigo2)
  • HPUX 11
    Nota
    HPUX responde ao arp, a não ser que você defina que não. Você terá que resolver o problema do arp de outra maneira.

O código do Ratz para configurar os servidores reais não-linux está em Scripts de configuração. Esta parte do script ainda não foi muito bem testada (pode acontecer de você observar que este script não configura o seu servidor real não-linux apropriadamente, então, por favor entre em contato comigo - Joe).

Nota
(Nos 3 anos de edição do script de configuração, Eu não ouvi ninguém que tenha utilizado esta parte do código, por isso não vejo motivos para mante-lo). A versão 0.10 do script de configuração (apareceu em 2003) não terá este código nele. O Script de configuração usará o iproute2 para a instalação dos dispositivos de rede e rotas. Você terá que configurar os servidores reais que não sejam Linux por si próprio.

Aqui tem informações para os sistemas UNIX (não-linux) Em alguns sistemas UNIX você tem que colocar as interfaces em prumo antes de lhes assinalar um IP. As informações de como colocar as interfaces em prumo não estão incluídas aqui.

#uname      : FreeBSD
#uname -r   : 3.2-RELEASE
#<command>  : ifconfig lo0 alias <IPV> netmask 0xffffffff -arp up
#ifconfig -a: lo0: flags=80c9<UP,LOOPBACK,RUNNING,NOARP,MULTICAST>mtu 16837
#                  inet 127.0.0.1 netmask 0xff000000
#                  inet <IPV> netmask 0xffffffff

#uname      : IRIX
#uname -r   : 6.5
#<command>  : ifconfig lo0 alias <IPV> netmask 0xffffffff -arp up
#ifconfig -a: lo0: flags=18c9<UP,LOOPBACK,RUNNING,NOARP,MULTICAST,CKSUM>
#                  inet 127.0.0.1 netmask 0xff000000
#                  inet <IPV> netmask 0xffffffff

#uname      : SunOS
#uname -r   : 5.7
#<command>  : ifconfig lo0:1 <IPV> netmask 255.255.255.255 up
#ifconfig -a: lo0:  flags=849<UP,LOOPBACK,RUNNING,MULTICAST>mtu 8232
#                   inet 127.0.0.1 netmask ff000000
#             lo0:1 flags=849<UP,LOOPBACK,RUNNING,MULTICAST>mtu 8232
#                   inet <IPV> netmask ffffffff

#uname      : HP-UX
#uname -r   : B.11.00
#<command>  : ifconfig lan1:1 10.10.10.10 netmask 0xffffff00 -arp up
#ifconfig -a: lan0:   flags=842<BROADCAST,RUNNING,MULTICAST>
#                     inet <some IP> netmask ffffff00
#             lan0:1: flags=8c2<BROADCAST,RUNNING,NOARP,MULTICAST>
#                     inet <IPV> netmask ffffff00
#

Ratz em 16 de Abril de 2001

na maioria dos casos (quando usar a opção NOARP) você precisará de suporte a aliases. Alguns UNIXes não possuem suporte a aliases de interface ou somente limitações, como o QNX, Aegis ou Amoeba por exemplo. Outros possuem problemas inerentes a flags da interface, como o HP-UX onde é impossível ter um alias de interface para outra a não ser a interface física (como acontece com o Linux 2.2 e 2.4 - Joe). Então para o HP/UX você precisa de uma configuração especial porque a tradicional não iráfuncionará com o DR. Eu fiz a maioria dos UNIXes como servidores reais e fiquei assombrado com as variações existentes nestes UNIXes, isto pode ser um resultado de uma implementação RFC que não tenha ficado muito clara.

3.13.3. Windows/NT/W2K

O Windows não é manipulado pelo Script de configuração (no qual precisaria de um bash para ser executado).

Instruções de como configurar o Windows como um servidor real é uma maioria em perguntas nas listas de email. Está pode ter sido uma parte difícil de encontrar aqui no mini-HOWTO ;-\. Existem várias formas de fazer a configuração. Aqui está algumas respostas.

Esta é a receita original do Sr. Wensong para ajustar o dispositivo lo no servidor real NT.

Caso você não tenha o "MS Loopback Adapter Driver" instalado no seu servidor NT, entre no Painel de Controle, Rede, Clique na parte dos Adaptadores, clique para adicionar um novo adaptador, selecione o "MS Loopback Adapter". O CD do Windows seré necessário para fazer esta instalação. Então adicione o endereço do seu IPV (IP Virtual) no "MS Loopback Adapter" , não entre com o endereço do gateway neste adaptador. Uma vez que a máscara de rede 255.255.255.255 não é aceita pela M$, então aceite a máscara padrão, entre no MS-DOS e remova a entrada extra na tabela de roteamento.


c:route delete <IPV's network> <IPV's netmask>

Isto fará com que os pacotes destinados a esta rede passem pela outra interface de rede, não pela interface MS Loopback. Pelo que me lembro, colocando a máscara de rede como 255.0.0.0 também funcionará.

Jerome Richard jrichard (arroba) virtual-net (ponto) fr

No Windows NT Server, você só tem que instalar o "MS Loopback Adapter" (fornecido no CD do windows NT na parte "novo hardware") e então configure o IPV neste interface.

o1004g o1004g (arroba) nbuster (ponto) com

  1. Clique em Iniciar, Configurações, Painel de Controle, e dê um duplo-clique em Adicionar/Remover Hardware.
  2. Clique em Adicionar/Solucionar Problemas de um novo Dispositivo, E então clique em anvançar.
  3. Clique em adicionar um novo dispositivo, Depois clique em avançar.
  4. Clique em Não, Eu desejo selecionar um Hardware de uma lista, Clique em avançar.
  5. Clique em Adaptadores de Rede, então clique em Avançar.
  6. Na parte dos fabricantes, Escolha Microsoft.
  7. Na caixa dos Adaptadores de Rede, clique no "Microsoft Loopback Adapter", depois clique em Avançar.
  8. Clique em Concluído.

robert.gehr (arroba) web2cad (ponto) de; 24 Oct 2001

O Adaptador MS-Loopback é o dispositivo virtual no Windows que não responde a nenhuma requisição arp. Ele deve estar no CD do WindowsNT/2000 edição Servidor. Instale ele e então defina o o endereço IP apropriado. Devido a Microsoft não aceitar a máscara de rede "x.x.x.x/32" para o adaptador de loopback, você acabará tendo duas rotas apontando para a mesma rede. Se eu disser que o seu IPR é 10.10.10.10 e o seu adaptador MS-Loopback é 10.10.10.11. Você terá duas rotas na sua tabela de roteamento, ambas apontando para a rede 10.0.0.0. Para corrigir este problema você deve deletar a rota que aponta para a interface MS-Loopback com um comando assim:
route del 10.0.0.0 mask 255.0.0.0 10.10.10.11
 

Johan Ronkainen jr (arroba) mpoli (ponto) fi

Funciona com o Windows NT4, mas com o Windows 2000 você pode apenas configurar uma métrica bem alta para a interface de Loopback. Tentei este método anos atrás com uma métrica de valor 254 e nunca tive problemas. Eu acredito que você possa alterar o valor da máscara de rede com o regedit para /32. Não tentei com o WindowsNT4 nem com o 2000, mas funcionou com o Windows98SE.

Brent Knotts brent (ponto) knotts (arroba) mylocalgov (ponto) com 28 Jan 2003

A respeito dos Servidores Reais com Windows 2000

É possível alterar a máscara de subrede pelo registro para 255.255.255.255 e realmente funciona para a minha configuração RD, esta forma é mais fácil de fazer do que ficar deletando a rota extra na tabela de roteamento a cada inicialização.

No Windows 2000, as interfaces podem ser encontradas em:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters\Interfaces

Encontre a interface com o IP apropriado e altere a máscara de subrede, não é necessário reiniciar o computador, apenas desative e reative a interface.

Outros idiomas para a MS

Sebastien Sebastien.Bonnet (arroba) experian (ponto) fg 12 Apr 2002

O "Adaptador Loopback da MS" é chamado de "carte de bouclage"

Malcolm Turnbull

Eu configurei um LVS-DR simples com 4 servidores web IIS (win2k) por trás. Eu configurei uma interface de loopback local em cada 2k com métrica definida para 254. O balanceamento de carga está funcionando normalmente ... Mas parece estar confundindo a rede Windows, a busca SMB parece não estar mais funcionando (Requisitado pelo RoboCopy).

Martijn Klingens mklingens (arroba) ism (ponto) nl 10 Sep 2002. Assunto: Re: Configuração do LVS DR nos servidores Windows 2000

Nós estamos usando uma configuração muito similar, apenas estamos utilizando um xcopy e queremos migrar para DFS. O que não muda o princípio das coisas. Detalhes que eu encontrei:

  • O Windows sempre adiciona uma rota para a subrede do adaptador de loopback. Se esta subrede também está disponível na LAN a sua tabela de roteamento se tornará confusa. No nosso caso nós migramos os IPs existentes para o LVS então tivemos que usar máscara subnet classe C inteira. A solução foi deletar manualmente as rotas /24 para a interface Loopback.
  • Desativar o compartilhamento de arquivos e impressoras na interface Loopback também ajuda.
  • Verifique os gateways e servidores DNS em todas as suas interfaces. Caso alguma coisa não esteja correta nestes campos você poderá enfrentar diversos problemas esquisitos (Existem casos em que os DNS são para ficar diferentes em cada placa de rede, mas é um caso muito incomum).

Acredito que esta ajuda tenha sido suficiente, mas caso não tenha resolvido o seu problema, tente nos passar mais informações a respeito das suas configurações. Caso você tenha problemas com os servidores-reais, ele é capaz de descobrir os outros servidores por meio do dns e ping?

Ah, você falou também na busca de computadores usando o Ambiente de Rede, o que não é exatamente o mesmo do que abrir um compartilhamento em um computador em que já se conhece o nome. Você realmente precisa da busca funcionando? Eu normalmente tenho a busca de computadores sempre desativada, assim evita que os intrusos tomem conhecimento de imediatdo sobre a minha rede. Vale informar que o DNS pode lhe fornecer as mesmas informações, com um pouco menos de risco.

3.13.4. Mac OS X (e Solaris)

Malcolm Turnbull

Alguém já usou o Mac OS X como um servidor real no LVS/DR?

Jerome RICHARD jrichard (arroba) virtual-net (ponto) fr 20 Nov 2002

Se você quer configurar vários IPs no Mac OS X, deve usar o seguinte comando:

sudo ifconfig lo0 alias 10.0.0.80 netmask 255.255.0.0
 

Há mais informações em Documentos da AppleCare

Roberto Nibali ratz (arroba) drugphish (ponto) ch 20 Nov 2002

Sim, eu fui a uma apresentação por volta de um ano atrás e me lembro que os participantes tinham um novo G4 com Mac OS X. Funcionou perfeitamente.

Há algum problema em usar a interface de loopback?

Pode usar, mas não há necessidade. O OS X é do tipo BSD, por isso você deve usar a mesma sintax dos BSD:

ifconfig lo0 alias IPV netmask 255.255.255.255 -arp up
 

Malcolm Turnbull Malcolm.Turnbull (arroba) crocus (ponto) co (ponto) uk 22 Nov 2002

Deixe Funcionando:

  • Solaris:
    ifconfig lo0:1 plumb
    ifconfig lo0:1 <vip-addr> netmask 255.255.255.255 up
     
  • Mac OS X:
    ifconfig lo0 alias IPV netmask 255.255.255.255 -arp up
     

4. Exemplo 1: LVS usando o encaminhamento LVS-NAT

O encaminhamento LVS-NAT foi o primeiro método criado para fazer um LVS. Para os kernels 2.2.x no direcionador, ele forneceu pouco desempenho numma comparação de alta carga em relação ao LVS-DR e ao LVS-Tun, devido ao demasiado uso da CPU em reescrever as regras dos pacotes. mas mesmo assim o LVS-NAT ainda é útil em várias circunstâncias. No kernel 2.4.x a performance do LVS-NAT foi muito melhor.

Configurar um LVS com duas redes (aqui 192.168.1.0/24 e 192.168.2.0/24) usando uma única placa de rede em cada computador. (Para o teste, não tenha nenhum outro IP nos computadores). O IPV no alias da placa de rede (eth0:110) é configurado pelo Script de Configuração, ex., não adicione o IPV. Não deve haver nenhuma rota padrão, e todas as interfaces na rede 192.168.1.0/24 devem ser capazes de pingar umas as outras. O Cliente não deve ser capaz de acessar nada até que o IPV esteja habilitado no Direcionador.


                       _________
                      |         |
                      | cliente |
                      |_________|
                    IPC=DGW=192.168.2.254 (eth0)
                           |
                           |
         ______________    |
        |              |   |   (IPV=192.168.2.110,eth0:110)
        | direcionador |---|
        |______________|   |   IPD=SGW=192.168.1.9(eth0)
                           |
                           |
          -----------------------------------
          |                                 |
          |                                 |
  IPR=192.168.1.11(eth0)              IPR=192.168.1.12(eth0)
     ____________                        ____________
    |  servidor  |                      |  servidor  |
    |    real    |                      |    real    |
    |____________|                      |____________|

4.1. Configurando usando o script de configuração

Para as séries v0.9.x dos scrips de configuração, use o arquivo conf lvs_nat.conf.one_NIC_two_network



#----------lvs_nat.conf------------------------------------
LVSCONF_FORMAT=1.1
LVS_TYPE=VS_NAT
INITIAL_STATE=on
CLEAR_IPVS_TABLES=yes
#
#IPV line format - device[:alias] IP netmask broadcast
#To help avoid namespace collisions with other IPVs, I set alias=last number of IPV (here 110).
IPV=eth0:110 192.168.2.110 255.255.255.0 192.168.2.255
#
#DIP line format - device[:alias] IP network netmask broadcast
DIP=eth0 192.168.1.9 192.168.1.0 255.255.255.0 192.168.1.255
#
#DIRECTOR_GW - packets with src_addr=IPV, dst_addr=0/0 are sent to DIRECTOR_GW
#to be forwarded to the outside world.
DIRECTOR_GW=192.168.2.254
#
#SERVICE line format - proto port scheduler IP|name:port[,weight] [IP|name:port[weight]]
SERVICE=t telnet rr 192.168.1.11:telnet 192.168.1.12:telnet
#SERVICE=t http rr 192.168.1.11:http,1 192.168.1.12:http,2
#
SERVER_NET_DEVICE=eth0
#VS-NAT real-servers do not have a IPV, i.e. there is no SERVER_IPV_DEVICE
#SERVER_IPV_DEVICE=
#SERVER_GW is not user configurable with LVS-NAT. script sets SERVER_GW = DIP
#SERVER_GW=
#----------end lvs_nat.conf---------------------------------

Então execute o script de configuração


$./configure lvs_nat.conf

Ele irá produzir (além de outras coisas) um arquivo rc.lvs_nat (ou rc.lvs).

Execute este arquivo rc.lvs_nat primeiramente no direcionador e depois nos dois servidores reais (o arquivo sabe reconhecer se está sendo executado num direcionador ou num servidor real e atuará apropriadamente). Um dos grandes macetes em configurar um LVS-NAT é fazer com que o Direcionador seja o gateway padrão dos seus servidores reais (O script fará isto para você) ele não funcionará se você não fizer isto.

4.2. Configurando manualmente

Executando o script no Direcionador.


#!/bin/sh
#------mini-HOWTO-setup-LVS-NAT-director----------

#set ip_forward ON for vs-nat director (1 on, 0 off).
cat /proc/sys/net/ipv4/ip_forward
echo "1" >/proc/sys/net/ipv4/ip_forward

#director is gw for realservers
#turn OFF icmp redirects (1 on, 0 off)
echo "0" >/proc/sys/net/ipv4/conf/all/send_redirects
cat       /proc/sys/net/ipv4/conf/all/send_redirects
echo "0" >/proc/sys/net/ipv4/conf/default/send_redirects
cat       /proc/sys/net/ipv4/conf/default/send_redirects
echo "0" >/proc/sys/net/ipv4/conf/eth0/send_redirects
cat       /proc/sys/net/ipv4/conf/eth0/send_redirects

#setup IPV
/sbin/ifconfig eth0:110 192.168.2.110 broadcast 192.168.2.255 netmask 255.255.255.0

#set default gateway
/sbin/route add default gw 192.168.2.254 netmask 0.0.0.0 metric 1

#clear ipvsadm tables
/sbin/ipvsadm -C

#install LVS services with ipvsadm
#add telnet to IPV with rr sheduling
/sbin/ipvsadm -A -t 192.168.2.110:telnet -s rr

#first realserver
#forward telnet to realserver 192.168.1.11 using LVS-NAT (-m), with weight=1
/sbin/ipvsadm -a -t 192.168.2.110:telnet -r 192.168.1.11:telnet -m -w 1
#check that realserver is reachable from director
ping -c 1 192.168.1.11

#second realserver
#forward telnet to realserver 192.168.1.12 using LVS-NAT (-m), with weight=1
/sbin/ipvsadm -a -t 192.168.2.110:telnet -r 192.168.1.12:telnet -m -w 1
#checking if realserver is reachable from director
ping -c 1 192.168.1.12

#list ipvsadm table
/sbin/ipvsadm
#------mini-HOWTO-setup-LVS-NAT-director----------

Executando o script nos servidores reais


#!/bin/sh
#---------mini-HOWTO-setup-LVS-NAT-realserver-------
#installing default gw 192.168.1.9 for vs-nat'
/sbin/route add default gw 192.168.1.9
#show routing table
/bin/netstat -rn

#checking if DEFAULT_GW is reachable
ping -c 1 192.168.1.9

#looking for IPV on director from realserver
ping -c 1 192.168.2.110

#set_realserver_ip_forwarding to OFF (1 on, 0 off).
echo "0" >/proc/sys/net/ipv4/ip_forward
cat       /proc/sys/net/ipv4/ip_forward

#---------mini-HOWTO-setup-LVS-NAT-realserver-------

4.3. Testando o funcionamento do LVS-NAT

No direcionador, execute o comando


$ipvsadm

A saída deverá ser algo assim


direcionador:/lvs/conf# ipvsadm
IP Virtual Server version 0.9.14 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
TCP  192.168.2.110:telnet rr
  -> 192.168.1.11:telnet          Masq    1      0          0
  -> 192.168.1.12:telnet          Masq    1      0          0

Agora, faça um telnet de um cliente para 192.168.2.110. Você terá o prompt de login de um dos servidores reais (perceba qual). Então No direcionador, execute o ipvsadm novamente


direcionador:/lvs/conf# ipvsadm
IP Virtual Server version 0.9.14 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
TCP  192.168.2.110:telnet rr
  -> 192.168.1.11:telnet          Masq    1      1          0
  -> 192.168.1.12:telnet          Masq    1      0          0

Perceba que o contador do ActiveConn foi incrementado.

Abra outra janela no cliente e faça um telnet para 192.168.2.110. Você receberá o prompt de login do outro servidor real. Agora execute novamente o ipvsadm.


direcionador:/lvs/conf# ipvsadm
IP Virtual Server version 0.9.14 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
TCP  192.168.2.110:telnet rr
  -> 192.168.1.11:telnet          Masq    1      1          0
  -> 192.168.1.12:telnet          Masq    1      1          0

Agora existem duas conexões ativas.

Você está então conectado nos servidores reais por meio do telnet. Parabéns - Você configurou um LVS-NAT para o serviço de telnet.

4.4. Configurando o LVS-NAT para o serviço http

Esteja certo de que os servidores reais estão com o serviço http habilitados na porta 80 em seus próprios IPs (O IPR, ex. 192.168.1.11, 192.168.1.12) ex. num IP diferente para cada servidor. Tenhas as páginas web um pouco diferentes umas das outras para que voc perceba em qual servidor estará se conectando.

Altere o arquivo conf apenas descomentando a linha do http e comentando a linha do telnet


#SERVICE=t telnet rr 192.168.1.11telnet 192.168.1.12:telnet
SERVICE=t http rr 192.168.1.11:http 192.168.1.12:http

Execute novamente o script de configuração no novo arquivo conf, re-execute os arquivos rc.lvs no direcionador e nos servidores reais.

ou

Para fazer esta configuração manualmente, subistitua o http pelo telnet no script do direcionador - não será necessário executar o script nos servidores reais novamente.

Se não ocorrer nenhum erro, então execute o ipvsadm


direcionador:/lvs/conf# ipvsadm
IP Virtual Server version 0.9.14 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
TCP  192.168.2.110:www rr
  -> 192.168.1.11:www             Masq    1      0          0
  -> 192.168.1.12:www             Masq    1      0          0

Direcione o seu cliente http para 192.168.2.110. caso você tenha a página web que está esperando, precione Ctrl+F5 (IE) algumas vezes e observe a alteração de páginas entre os servidores. Em algumas circunstâncias, caso a conexão http seja persistente, pode ocorrer de você ver apenas uma página web, mas nestes casos, use o lynx, curl ou telnet para 192.168.2.110 80 e no prompt em branco digite


GET /

Usando o lynx:


$ lynx -dump http://192.168.2.110/

Execute novamente o ipvsadm (no direcionador)


direcionador:/lvs/conf# ipvsadm
IP Virtual Server version 0.9.14 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
TCP  192.168.2.110:www rr
  -> 192.168.1.11:www             Masq    1      0          13
  -> 192.168.1.12:www             Masq    1      0          12

Diferente do telnet, não há nenhum ActiveConn mesmo que você tenha uma página sendo exibida em seu cliente. O protocolo http disconecta após 15 segundos, alternando para o InActConn, que irão expirar em 2 minutos. (Execute o ipvsadm após 2 minutos e verá que o InActConn estará com 0).

Um modelo de timeout pode ser visto invocando o ipchains -L -M -n (para kernels 2.2, para kenels 2.4 e superiores veja no HOWTO).

5. Exemplo: Configure o LVS usando o encaminhamento LVS-DR

Configure um LVS com uma rede simples (aqui usaremos 192.168.1.0/24) em computadores com somente uma placa de rede. Os aliases de IP nas placas de rede (ex. eth0:110, lo:0) são configurados pelo script de configuração, não há a necessidade de rotas padrão e uma máquina deverá pingar a outra.


                       _________
                      |         |
                      | cliente |
                      |_________|
                   IPC=GWS=192.168.1.254 (eth0)
                           |
                           |
         ______________    |
        |              |   |   (IPV=192.168.1.110, eth0:110)
        | direcionador |---|
        |______________|   |   IPD=192.168.1.9 (eth0)
                           |
                           |
          -----------------------------------
          |                                 |
          |                                 |
 IPR=192.168.1.11(eth0)             IPR=192.168.1.12(eth0)
(IPV=192.168.1.110, lo:0)          (IPV=192.168.1.110, lo:0)
    ____________                       ____________
   |  servidor  |                     |  servidor  |
   |    real    |                     |    real    |
   |____________|                     |____________|

5.1. VS-DR para o serviço de telnet

Para as séries v0.9.x do script de configuração, use o arquivo conf lvs_drt.conf.one_NIC_one_network


#----------lvs_dr.conf----------------------------------------
LVSCONF_FORMAT=1.1
LVS_TYPE=VS_DR
INITIAL_STATE=on
CLEAR_IPVS_TABLES=yes
#IPV line format - device[:alias] IP netmask broadcast
#To help avoid namespace collisions with other IPVs, I set alias=last number of IPV (here 110).
#note: for LVS-DR, LVS-Tun, the IP is in a /32 network
IPV=eth0:110 192.168.1.110 255.255.255.255 192.168.1.110
#DIP line format - device[:alias] IP network netmask broadcast
DIP=eth0:9 192.168.1.9 192.168.1.0 255.255.255.0 192.168.1.255
#no DIRECTOR_GW for LVS-DR or LVS-Tun
#DIRECTOR_GW=
#SERVICE line format - proto port scheduler IP[,weight] [IP[,weight]]
SERVICE=t telnet rr 192.168.1.11 192.168.1.12
#SERVICE=t http rr 192.168.1.11 192.168.1.12
SERVER_IPV_DEVICE=lo:110
SERVER_NET_DEVICE=eth0
#SERVER_GW - packets with src_addr=IPV, dst_addr=0/0 are sent to SERVER_GW
#to be forwarded to the outside world.
#For standard LVS-DR,VS-Tun, this must _NOT_ be the director.
#For Julian's martian modification (see the HOWTO), it will be the director.
#If you don't know about the martian modification, you aren't using it.
#The script will not neccesarily set up the SERVER_GW as the real-servers's default gw.
SERVER_GW=192.168.1.254
#----------end lvs_dr.conf------------------------------------

Então execute

$./configure lvs_dr.conf

Isto irá produzir (além de outras coisas) um arquivo rc.lvs_dr

Execute este arquivo rc.lvs_dr primeiramente no direcionador e depois nos dois servidores reais (o arquivo saberá se está sendo executado num direcionador ou num servidor real e agirá apropriadamente).

5.2. Configuração manual

No direcionador execute o script


#!/bin/bash
#---------------mini-rc.lvs_dr-director------------------------
#set ip_forward OFF for vs-dr director (1 on, 0 off)
cat       /proc/sys/net/ipv4/ip_forward
echo "0" >/proc/sys/net/ipv4/ip_forward

#director is not gw for realservers: leave icmp redirects on
echo 'setting icmp redirects (1 on, 0 off) '
echo "1" >/proc/sys/net/ipv4/conf/all/send_redirects
cat       /proc/sys/net/ipv4/conf/all/send_redirects
echo "1" >/proc/sys/net/ipv4/conf/default/send_redirects
cat       /proc/sys/net/ipv4/conf/default/send_redirects
echo "1" >/proc/sys/net/ipv4/conf/eth0/send_redirects
cat       /proc/sys/net/ipv4/conf/eth0/send_redirects

#add ethernet device and routing for IPV 192.168.1.110
/sbin/ifconfig eth0:110 192.168.1.110 broadcast 192.168.1.110 netmask 255.255.255.255
/sbin/route add -host 192.168.1.110 dev eth0:110
#listing ifconfig info for IPV 192.168.1.110
/sbin/ifconfig eth0:110

#check IPV 192.168.1.110 is reachable from self (director)
/bin/ping -c 1 192.168.1.110
#listing routing info for IPV 192.168.1.110
/bin/netstat -rn

#setup_ipvsadm_table
#clear ipvsadm table
/sbin/ipvsadm -C
#installing LVS services with ipvsadm
#add telnet to IPV with round robin scheduling
/sbin/ipvsadm -A -t 192.168.1.110:telnet -s rr

#forward telnet to realserver using direct routing with weight 1
/sbin/ipvsadm -a -t 192.168.1.110:telnet -r 192.168.1.11 -g -w 1
#check realserver reachable from director
ping -c 1 192.168.1.12

#forward telnet to realserver using direct routing with weight 1
/sbin/ipvsadm -a -t 192.168.1.110:telnet -r 192.168.1.12 -g -w 1
#check realserver reachable from director
ping -c 1 192.168.1.12

#displaying ipvsadm settings
/sbin/ipvsadm

#not installing a default gw for LVS_TYPE vs-dr
#---------------mini-rc.lvs_dr-director------------------------

Execute este script nos servidores reais


#!/bin/bash
#----------mini-rc.lvs_dr-realserver------------------
#installing default gw 192.168.1.254 for vs-dr
/sbin/route add default gw 192.168.1.254
#showing routing table
/bin/netstat -rn
#checking if DEFAULT_GW 192.168.1.254 is reachable
ping -c 1 192.168.1.254

#set_realserver_ip_forwarding to OFF (1 on, 0 off).
echo "0" >/proc/sys/net/ipv4/ip_forward
cat       /proc/sys/net/ipv4/ip_forward

#looking for DIP 192.168.1.9
ping -c 1 192.168.1.9

#looking for IPV (will be on director)
ping -c 1 192.168.1.110

#install_realserver_vip
/sbin/ifconfig lo:110 192.168.1.110 broadcast 192.168.1.110 netmask 0xffffffff up
#ifconfig output
/sbin/ifconfig lo:110
#installing route for IPV 192.168.1.110 on device lo:110
/sbin/route add -host 192.168.1.110 dev lo:110
#listing routing info for IPV 192.168.1.110
/bin/netstat -rn

#hiding interface lo:110, will not arp
echo "1" >/proc/sys/net/ipv4/conf/all/hidden
cat       /proc/sys/net/ipv4/conf/all/hidden
echo "1" >/proc/sys/net/ipv4/conf/lo/hidden
cat       /proc/sys/net/ipv4/conf/lo/hidden

#----------mini-rc.lvs_dr-realserver------------------

5.3. Testando o funcionamento do LVS-DR

Então, execute este comando no direcionador


$ipvsadm

A saída deverá ser algo assim


direcionador:/lvs/conf# ipvsadm
IP Virtual Server version 0.9.14 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
TCP  192.168.1.110:telnet rr
  -> 192.168.1.11:telnet          Route    1      0          0
  -> 192.168.1.12:telnet          Route    1      0          0

Observe que a forma de encaminhamento foi alterada de Masq para Route.

Agora faça um telnet do cliente para 192.168.1.110. Você receberá o prompt de login de um dos servidores reais (observe qual deles). Então, execute novamente o ipvsadm.


direcionador:/lvs/conf# ipvsadm
IP Virtual Server version 0.9.14 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
TCP  192.168.1.110:telnet rr
  -> 192.168.1.11:telnet          Route    1      1          0
  -> 192.168.1.12:telnet          Route    1      0          0

Caso você tenha o tcpwraper sendo executado em volta do telnet nos servidores-reais, o login sofrerá um atrazo de aproximadamente 7 segundos (slackware) e 3 minutos (RedHat), mas você poderá corrigir este problema fazendo a seguinte alteração no arquivo inetd.conf

De
telnet  stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd

Para
telnet  stream  tcp     nowait  root    /usr/sbin/in.telnetd  in.telnetd

Reinicie o processo do Inetd para que o mesmo faça efeito. Caso você tenha o módulo PAM sobre o login do telnet talvez você não consiga resolver o problema do atrazo (As páginas de manual do RedHat 6.2 dirão a você como alterar as entradas no arquivo /etc/pam.conf, um arquivo que não existe).

Após o login a sessão de telnet se comportará normalmente. Este atraso é apenas um pequeno contrasenso. Porém dificulta a identificação de uma conexão ruim de um problema de configuração no LVS (O que provavelmente não ocorrerá se for usado o script de configuração). Este atraso não ocorre no LVS-NAT (Veja a seção identd no HOWTO para uma maior explanação).

Abra outra janela em seu cliente e faça outro telnet para 192.168.1.110 Você terá o prompt de login do outro servidor real. Execute novamente o ipvsadm.

direcionador:/lvs/conf# ipvsadm
IP Virtual Server version 0.9.14 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
TCP  192.168.1.110:telnet rr
  -> 192.168.1.11:telnet          Route    1      1          0
  -> 192.168.1.12:telnet          Route    1      1          0

Agora existem duas conexões ativas.

Agora você está conectado ao servidor real numa sessão telnet normal. Parabéns - Você configurou um LVS-DR para o serviço de telnet.

5.4. Configure o LVS-DR para o serviço http

IMPORTANTE: Esteja certo de que os servidores reais estão com o serviço http rodando na porta 80 no IPV, 192.168.1.110 E NÂO em seus próprios IPs (não estando escutando no RIP ex. 192.168.1.11, 192.168.1.12), ex. ambos os servidores reais estarão escutando no mesmo IP. Faça com que as duas páginas web tenham alguma diferença para que você saiba em que servidor estará se conectando a cada momento. Você precisará do IPV na lo:0 antes do serviço httpd ser iniciado.

Altere o arquivo conf adicionando uma linha http e comentando a linha do telnet.

#----------lvs_dr.conf------------------------------------
#SERVICE=t telnet rr 192.168.1.11 192.168.1.12
SERVICE=t http rr 192.168.1.11 192.168.1.12
#----------end lvs_dr.conf------------------------------------

Execute novamente o script no arquivo conf, e re-execute os arquivos rc.lvs no direcionador e nos servidores reais.

or

Caso você esteja fazendo uma configuração manual alterne do http para o telnet e re-execute o script no direcionador. Você não precisa executar o script novamente nos servidores-reais.

Caso não ocorra nenhum erro, então execute ipvsadm

>direcionador:/lvs/conf# ipvsadm
IP Virtual Server version 0.9.14 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
TCP  192.168.1.110:www rr
  -> 192.168.1.11:www             Route    1      0          0
  -> 192.168.1.12:www             Route    1      0          0

Conecte o seu cliente http em 192.168.1.110. Caso você receba a página esperada, precione Ctrl+F5 (IE) algumas vezes para verificar a alternância entre os diferentes servidores-reais. Em poucas circunstâncias, pressuponto a perssistência do http, a conexão permanecerá em apenas um servidor. Nestes casos, utilize o lynx, curl ou telnet para 192.168.1.110 e quando receber um prompt em branco digite:

GET /

usando o lynx:


$ lynx -dump http://192.168.1.110/

Execute novamente o ipvsadm (no direcionador)

>direcionador:/lvs/conf# ipvsadm
IP Virtual Server version 0.9.14 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
TCP  192.168.1.110:www rr
  -> 192.168.1.11:www             Route    1      0          5
  -> 192.168.1.12:www             Route    1      0          4

Diferente do telnet, não há nenhuma ActConn mesmo que você tenha uma página sendo exibida em seu cliente. O protocolo http disconecta após 15 segundos (máx) . As conexões alternam para InActConn e irão expirar após 2 minutos. Se você executar o ipvsadm novamente após 2 minutos verá que os InActConn ficaram com 0.

Parabéns, você fez um bom trabalho. Fique Feliz! Para maiores informações veja o HOWTO e outros documento no site do LVS além de procurar pelos arquivos das listas de discussão. Caso você tenha qualquer dúvida, é um convite para entrar em nosso lista de e-mails.

6. Como alguns usuários fizeram este trabalho

6.1. Dan Browning, LVS-DR no Red Hat 7.2: Manipulando o ARP, e outros problemas

Postagem original em arquivos da lista de e-mails da lvs

Dan Browning db (arroba) kavod (ponto) com 2002-01-05

Ok, esta é a última vez que eu escreverei aqui, Eu prometo. :-) Na minha primeira postagem a minha digitação estava mais rápida, mas neste e-mail estou incluindo *todas* as instruções (mais ou menos) da forma que eu usei para configurar um LVS-DR no RedHat 7.2

Eu espero que isto seja usado por alguém algum dia. Próximo Projeto: Alternação automática do direcionador LVS de backup ...


mkdir ~/download/piranha
cd ~/download/piranha
wget \

ftp://ftp.linux.org.uk/pub/linux/piranha/7.2/piranha/piranha-0.6.0-15.i386.rpm \
ftp://ftp.linux.org.uk/pub/linux/piranha/7.2/ipvsadm/ipvsadm-1.18-8.i386.rpm \
ftp://ftp.linux.org.uk/pub/linux/piranha/7.2/scsi_reserve/scsi_reserve-0.7-6.i386.rpm \
        -c
rpm -Uvh *.rpm

chkconfig piranha-gui on
service piranha-gui restart

piranha-passwd homelast

# Caso você esteja usando dois direcionadores (Necessários para a sincronia)
# Configure as chaves de scp em todos os nós
ssh-keygen -t rsa
cat .ssh/id_rsa.pub | ssh SERVERNAME 'cat >>~/.ssh/authorized_keys2'

# Documentação de ajuda
http://ha.redhat.com/docs/high-availability/index.html
http://www.linuxvirtualserver.org/docs/arp.html
http://www.linux-vs.org/~julian/hidden.txt

# Habilitando o encapsulamento IP
# Em cada servidor real, estabelece um túnel entre cada endereço do servidor virtual
# Por exemplo, estes comandos estabelecem dois túneis (tunl0 e # # tunl1) aos dois endereços virtuais
# para precaver os servidores reais, além dos roteadores ativos
# de interceptarem broadcasts de ARPs, além disso você também deverá esconder os
# túneis dos broadcasts de ARPs. Por exemplo, estes comandos escondem o túnel tunl0:

# Insira o módulo ipip, caso não esteja compilado internamente no Kernel
insmod ipip
# Levante a interface tunl0
ifconfig tunl0 0.0.0.0 up
# Inicie a função de esconder a interface
echo 1 > /proc/sys/net/ipv4/conf/all/hidden
# Esconda todos os endereços para este dispositivo de túnel
echo 1 > /proc/sys/net/ipv4/conf/tunl0/hidden
# Configure um IPV num alias para o dispositivo túnel
ifconfig tunl0:0 1.2.3.4 up

# Testando
lynx --dump http://IPV/test
ab -n 100 -c 10 http://IPV/index.html

Ambiente: Red Hat 7.2, Piranha 0.6.0-15, Kernel padrão da RH (2.4.7-10)

                       _________
                      |         |
                      | cliente |
                      |_________|
                      IPC=5.6.7.8
                           |
                           |
                           |
                      __________
                     |          |
                     | Internet |
                     |__________|
                           |
                           |
                           |
                      IPV=1.2.3.4 (eth0:1)
                    ______________
                   |              |
                   | direcionador |
                   |______________|
                    IPD=1.2.3.5 (eth0)
                           |
                           |
          /---------------------------------\
          |                |                |
          |                |                |
  IPR1=1.2.3.10        N/A (yet)        N/A (yet)
   _____________     _____________    _____________
  |  servidor   |   |  servidor   |  |  servidor   |
  |    real     |   |    real     |  |    real     |
  |_____________|   |_____________|  |_____________|

###############
##   DETALHES:
###############
Configure o Direcionador:

Instale o Piranha, lvsadm

Configure assim:

serial_no = 38
primary = 1.2.3.4
service = lvs
backup = 0.0.0.0
heartbeat = 1
heartbeat_port = 539
keepalive = 6
deadtime = 18
network = direct
reservation_conflict_action = preempt
debug_level = NONE
virtual http {
     active = 1
     address = 1.2.3.5 eth1
     port = 80
     send = "GET / HTTP/1.0\r\n\r\n"
     expect = "HTTP"
     load_monitor = none
     scheduler = wlc
     protocol = tcp
     timeout = 6
     reentry = 15
     quiesce_server = 0
     server www4real {
         address = 1.2.3.10
         active = 1
         weight = 1
     }
}

        IP Virtual Server version 0.8.1 (size=65536)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port             Forward Weight ActiveConn InActConn
TCP  1.2.3.5:80 rr
  -> 1.2.3.10:80        	       Route   1      0          0

CURRENT LVS PROCESSES
root      1992  0.0  0.0  1604  600 ?        S    15:45   0:00 pulse
root      2295  0.0  0.0  1604  600 ?        S    15:45   0:00
/usr/sbin/lvs --nofork -c /etc/sysconfig/ha/lvs.cf
root      2299  0.0  0.0  1640  648 ?        S    15:45   0:00
/usr/sbin/nanny -c -h 1.2.3.10 -p 80 -s GET / HTTP/1.0\r\n\r\n -

## Notas para a recompilação no kernel 2.4.17 com os patchs ipvs e hidden no RedHat 7.2 ##
## Em ambos Direcionador e Servidores Reais ##

# Diretório de Download
export D=/tmp/download

mkdir $D
cd $D

#kernel
wget http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.17.tar.gz

#patch hidden
wget http://www.linux-vs.org/~julian/hidden-2.4.5-1.diff

#patch IPVS
wget
http://www.linuxvirtualserver.org/software/kernel-2.4/linux-2.4.12-ipvs-
0.8.2.patch.gz

# módulo netfilter - caso você apenas queira o módulo ao invés do grande patch acima
wget
http://www.linuxvirtualserver.org/software/kernel-2.4/ipvs-0.8.2.tar.gz

#admin do ipvs
wget ftp://rpmfind.net/linux/redhatbeta/ha/i386/ipvsadm-1.17-2.i386.rpm

# Descompacte o novo kernel
tar zxvf linux-2.4.17.tar.gz

# Descompacte o patch do ipvs
gunzip linux-2.4.12-ipvs-0.8.2.patch.gz

# Descompacte o Kernel
mv linux /usr/src/linux-2.4.17
cd /usr/src

# Crie novamente um link simbólico
rm -f linux-2.4
ln -s linux-2.4.17 linux-2.4
ln -s linux-2.4.17 linux

# Aplique o patch "hidden"
cd linux-2.4.17
patch -p1 < $D/hidden-2.4.5-1.diff

Você deverá ver:
###############################
patching file include/linux/inetdevice.h
patching file include/linux/sysctl.h
Hunk #1 succeeded at 334 (offset 9 lines).
patching file net/ipv4/arp.c
Hunk #3 succeeded at 754 (offset -1 lines).
patching file net/ipv4/devinet.c
Hunk #1 succeeded at 756 (offset 20 lines).
Hunk #2 succeeded at 1013 (offset -4 lines).
Hunk #3 succeeded at 1079 (offset 20 lines).
patching file Documentation/filesystems/proc.txt
Hunk #1 succeeded at 1583 (offset 5 lines).
patching file Documentation/networking/ip-sysctl.txt
###############################

# Aplique o patch do ipvs
patch -p1 < $D/linux-2.4.12-ipvs-0.8.2.patch

# O ipvsadm 1.18-8, que é o mais novo, já está previamente instalado (pelo projeto piranha)

make clean
make mrproper
make menuconfig
make bzImage
make modules
make modules_install
make install #doesn't support GRUB yet.  - or can copy the
arch/i386/boot/bzImage file manually
vi /boot/grub/grub.conf:
title 2.4.17_ipvs
        root (hd0,0)
        kernel /boot/vmlinuz-2.4.17 ro root=/dev/sda1

# agora copie o /usr/src/linux-2.4.17 para a próxima máquina com o Linux:
tar czf linux-2.4.17-dir.tgz /usr/src/linux-2.4.17/

scp linux-2.4.17-dir.tgz SERVER_TWO:/usr/src

# Agora descompacte no SERVER_TWO
tar zxvf linux-2.4.17-dir.tgz
cd linux-2.4.17
make modules_install
make install
# faça a configuração do grub novamente.
title 2.4.17_ipvs
        root (hd0,0)
        kernel /boot/vmlinuz-2.4.17 ro root=/dev/sda1
# reinicie!

6.2. Jezz Palmer, Configuração do squid LVS

Jezz Palmer J (ponto) D (ponto) F (ponto) Palmer (arroba) swansea (ponto) ac (ponto) uk 29 May 2002, para configurar um LVS squid.

O direcionador está rodando com o kernel 2.4.18 Os servidores reais estão com o 2.4.7 (Padrão do RH 7.2 porém recompilados) o squid não funcionou com os kerneis 2.4.18 e 2.4.17 por alguma razão.

Primeiramente eu criei o Direcionador. Usei as instruções escritas pelo Dan Browning (acima) para configurar o kernel Nota, eu usei somente uma pequena parte da configuração do kernel, eu já o havia editado para o 2.4.28 e mais tarde para o ipvsadm e o patch além de outros pequenos detalhes.

Notas para a recompilação do kernel 2.4.18 com os pacthes do ipvs e hidden no RedHat 7.2


# Diretório de Download
export D=/tmp/download

mkdir $D
cd $D

# kernel
wget http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.18.tar.gz

# patch hidden
wget http://www.linux-vs.org/~julian/hidden-2.4.5-1.diff

# patch IPVS
wget
http://www.linuxvirtualserver.org/software/kernel-2.4/linux-2.4.18-ipvs-1.0.
0.patch.gz

# admin do ipvs
wget
http://www.linuxvirtualserver.org/software/kernel-2.4/ipvsadm-1.20.tar.gz

# Descompacte e instale o admin ipvsadm
tar xvzf  ipvsadm-1.20.tar.gz
cd ipvsadm
make install

# Descompacte o novo kernel
tar zxvf linux-2.4.18.tar.gz

# Descompacte o patch do ipvs
gunzip linux-2.4.18-ipvs-1.0.0.patch.gz

# Descompacte o kernel
mv linux /usr/src/linux-2.4.18
cd /usr/src

# Crie novamente os links simbólicos
rm -f linux-2.4
ln -s linux-2.4.18 linux-2.4
ln -s linux-2.4.18 linux

# Aplique o patch "hidden"
cd linux-2.4.18
patch -p1 < $D/hidden-2.4.5-1.diff

Você deverá ver:
###############################
patching file include/linux/inetdevice.h
patching file include/linux/sysctl.h
Hunk #1 succeeded at 334 (offset 9 lines).
patching file net/ipv4/arp.c
Hunk #3 succeeded at 754 (offset -1 lines).
patching file net/ipv4/devinet.c
Hunk #1 succeeded at 756 (offset 20 lines).
Hunk #2 succeeded at 1013 (offset -4 lines).
Hunk #3 succeeded at 1079 (offset 20 lines).
patching file Documentation/filesystems/proc.txt
Hunk #1 succeeded at 1583 (offset 5 lines).
patching file Documentation/networking/ip-sysctl.txt
###############################

# Aplique o patch do ipvs
patch -p1 < $D/ linux-2.4.18-ipvs-1.0.0.patch

make clean
make mrproper

# Neste momento eu copiei o config padrão (que combina com o meu sistema) a partir do
# kernel original do RedHat 7.2 para .config, assim ganhei tempo em selecionar os módulos.

cp /usr/src/linux-2.4.7-10/configs/kernel-2.4.7-i686-smp.config ./.config

make menuconfig

Deixe todas as outras configurações como estão, mas vá para ...


Networking Options -> IP: Virtual Server Configuration and build in [*] virtual server support [EXPERIMENTAL]

e aceite os padrões



make bzImage
make modules
make modules_install
make install #doesn't support GRUB yet.  - or can copy the
arch/i386/boot/bzImage file manually
vi /boot/grub/grub.conf:
title 2.4.18_ipvs
	root (hd0,0)
	kernel /boot/vmlinuz-2.4.18 ro root=/dev/****

# Caso você tenha dois ou mais direcionadores com o mesmo hardware, então copie o novo
# kernel para eles também,

tar czf linux-2.4.18-dir.tgz /usr/src/linux-2.4.18/
scp linux-2.4.18-dir.tgz SERVER_TWO:/usr/src

# Agora descompacte no SERVER_TWO
tar zxvf linux-2.4.18-dir.tgz
cd linux-2.4.18
make modules_install
make install
# faça a configuração do grub novamente.
title 2.4.18_ipvs
	root (hd0,0)
	kernel /boot/vmlinuz-2.4.17 ro root=/dev/****
# reinicie!

Caso haja diferenças substancias no hardware, repita este processo no próximo servidor usando os padrões corretos de configuração de /usr/src/linux-2.4.7-10/configs/

Servidores Reais

Para os servidores reais Eu apenas repeti o processo acima com o Kernel padrão 2.4.7 fornecido no RedHat 7.2. O patch do ipvsadm não é necessário. Ele provavelmente funcionará sem o ipvsadm, somente com o patch do hidden.

Getting it to Work.

Eu estou usando o LVS-DR. Inicialmente eu havia decidido usar um LVS http usando 1 direcionador e 3 servidores reais http. Somente o http, por ser fácil de identificar se eles estariam funcionando ou não. Então eu configurei o apache nas três máquinas, fazendo a página inicial apenas apresentar o nome de cada máquina. Então eu usei os scripts de configuração do Joe Mack para gerar os meus arquivos rc.lvs a serem executados nas máquinas em LVS. Fiz o download do configure-lvs_0.9.2 de http://www.linuxvirtualserver.org/Joseph.Mack/configure-lvs_0.9.2.tar.gz

Ele precisa do Net-DNS-0.19, que eu baixei de http://www.perl.com/CPAN-local/authors/id/B/BB/BBB/Net-DNS-0.19.tar.gz

Então, após descompactar e instalar o Net-DNS-0.19, Eu descompactei o arquivo configure-lvs_0.9.2.tar.gz


tar xvzf configure-lvs_0.9.2.tar.gz
cd configure-lvs_0.9.2

Escolhi a opção mais próxima da minha rede de 12 ou mais exemplos de configurações e editei para se parecer com ela. O que escolhi foi o lvs_dr.conf.one_NIC_one_network. (IPs etc deletados por conveniência).


#----------lvs_dr.conf----------------------------------------
LVSCONF_FORMAT=1.1
LVS_TYPE=VS_DR
INITIAL_STATE=on
CLEAR_IPVS_TABLES=yes
#IPV line format - device[:alias] IP netmask broadcast
#To help avoid namespace collisions with other IPVs, I set alias=last number
of IPV (here 110).
#note: for LVS-DR, LVS-Tun, the IP is in a /32 network
IPV=eth0:110 my_vip 255.255.255.255 my_vip
#DIP line format - device[:alias] IP network netmask broadcast
DIP=eth0:9 my_dip my_dip_network 255.255.255.0 my_dip_broadcast
#no DIRECTOR_GW for LVS-DR or LVS-Tun
#DIRECTOR_GW=
#SERVICE line format - proto port scheduler IP[,weight] [IP[,weight]]
SERVICE=t http rr rip1,1 rip2,1 rip3,1
SERVER_IPV_DEVICE=lo:110
SERVER_NET_DEVICE=eth0
#SERVER_GW - packets with src_addr=IPV, dst_addr=0/0 are sent to SERVER_GW
#to be forwarded to the outside world.
#For standard LVS-DR,VS-Tun, this must _NOT_ be the director.
#For Julian's martian modification (see the HOWTO), it will be the director.
#If you don't know about the martian modification, you aren't using it.
#The script will not neccesarily set up the SERVER_GW as the real-servers's default gw.
SERVER_GW=my_server_gw
#----------end lvs_dr.conf------------------------------------

Usei o script de configuração para gerar o arquivo rc.lvs

./configure lvs_dr.conf.one_NIC_one_network

O rc.lvs rodou na máquina local então copiei para todos os demais servidores da lVS, os 3 servidores http.

Neste momento, digitando ipvsadm na linha de comando você deverá ter o seguinte resultado mostrando que o seu LVS está funcionando.


[root@direcionador1 root]# ipvsadm
IP Virtual Server version 1.0.0 (size=65536)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  vip:80 rr
  -> rip1:80                      Route   1      0          0
  -> rip2:80                      Route   1      0          0
  -> rip3:80                      Route   1      0          0

Então, para testar vá a um navegador em outro computador e digite http://IPV (ou seja, o seu IPV), você deverá ver a página sendo exibida com o nome de um dos servidores, recarregue a páginas algumas vezes para ver as páginas dos outros servidores. Isto só funciona com o "RR" Agendador Round Robin, mas prova que o funcionamento está correto.

Próximo passo, aplicando isto ao squid, Uau!

Primeiramente eu alterei o arquivo de configuração para os servidores squid e suas portas.


#----------lvs_dr.conf----------------------------------------
LVSCONF_FORMAT=1.1
LVS_TYPE=VS_DR
INITIAL_STATE=on
CLEAR_IPVS_TABLES=yes
#IPV line format - device[:alias] IP netmask broadcast
#To help avoid namespace collisions with other IPVs, I set alias=last number
of IPV (here 110).
#note: for LVS-DR, LVS-Tun, the IP is in a /32 network
IPV=eth0:110 vip 255.255.255.255 vip
#DIP line format - device[:alias] IP network netmask broadcast
DIP=eth0:9 dip dip_network 255.255.255.0 dip_broadcast
#no DIRECTOR_GW for LVS-DR or LVS-Tun
#DIRECTOR_GW=
#SERVICE line format - proto port scheduler IP[,weight] [IP[,weight]]
SERVICE=t squid rr rip1,1 rip2,1
SERVER_IPV_DEVICE=lo:110
SERVER_NET_DEVICE=eth0
#SERVER_GW - packets with src_addr=IPV, dst_addr=0/0 are sent to SERVER_GW
#to be forwarded to the outside world.
#For standard LVS-DR, LVS-Tun, this must _NOT_ be the director.
#For Julian's martian modification (see the HOWTO), it will be the director.
#If you don't know about the martian modification, you aren't using it.
#The script will not neccesarily set up the SERVER_GW as the real-servers's default gw.
SERVER_GW=server_gw
#----------end lvs_dr.conf------------------------------------

Então execute novamente


./configure lvs_dr.conf.one_NIC_one_network

E execute o arquivo rc.lvs resultante em todos os servidores na LVS, eu tenho somente 2 servidores reais configurados com o squid.

Isto irá provocar a seguinte saída do comando ipvsadm


[root@direcionador1 root]# ipvsadm
IP Virtual Server version 1.0.0 (size=65536)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  vip:3128 rr
  -> rip1:3128                    Route   1      0          0
  -> rip2:3128                    Route   1      0          0

( De Joe - neste estágio os servidores reais, configurados pelo script de configuração versão 0.9.x estão impedidos de acessarem servidores web na internet. Este problema é explicado em 3 partes do HOWTO e conduzido para a próxima versão do script de configuração.)

Em determinada hora eu descobri que se eu reiniciasse a rede nos servidores reais após o script rc.lvs ser executado então os servidores reais perdiam acesso ao mundo. Porém, durante o período em que Joe estava trabalhando em alternativas para o script de configuração Eu realizei testes em torno do LVS Squid e escrevi scripts para manipularem os servidores reais em caso de falhas e também uma introdução sobre um direcionador de backup.

Neste momento eu tenho um LVS squid que está usando o agendador rr (Round Robin), e tornouse aparente que o agendador rr não estava querendo funcionar por si próprio. Alguns sites HTTPS (ex. sites de bancos) não aceitam requisições vindas de clientes com múltiplos endereços IP, então eu tentei vários agendadores e o uso da persistência permitiu que eu tivesse o LVS Squid balanceado satisfatóriamente para todos os sites. (Joe - Isto está mais descrito no HOWTO na parte de Serviços - Squid).

Eu encontrei esse wlc com uma persistência de 360 segundos funcionando maravilhosamente. Isto garantiu que as requisições vindas de um único cliente fossem feitas ao mesmo servidor real por 6 minutos (Uma rotação de 6 minutos) O tempo limite pode ser incrementado, porém muitos home-bankings farão o tempo limite de qualquer conexão inativa serem encerradas em poucos minutos.


[root@direcionador1 root]# ipvsadm
IP Virtual Server version 1.0.0 (size=65536)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  vip:3128 wlc -p 360
  -> rip1:3128                    Route   1      0          0
  -> rip2:3128                    Route   1      0          0

6.3. Dois Servidores (MÁQUINAS) LVS

É possível configurar dois direcionadores LVS contra falhas totalmente funcionais. Quando um for o direcionador, ele também pode atuar como um servidor real com o nó-local (localnode) e o outro é um outro servidor real. Os dois rodam um código contra falhas para permitir a troca de regras e diretivas. Isto é mais complicado do que você gostaria para uma das suas primeiras configurações, e na prática há problemas na manipulação das "anti-falhas". Isto é discutido na Seção de Nó-Local (localnode) do HOWTO http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.localnode.html#two_box_lvs

7. O que fazer em caso de problemas?

7.1. não consigo aplicar o patch no kernel, compilar o kernel, compilar o ipvsadm

  • Você está usando o Kernel padrã?
  • A sua versão do ip_vs combina com a versão do seu kernel.
  • O seu ipvsadm é o que veio com o pacote tar do ip_vs.

7.2. Não consigo compilar o ipvsadm

Você (provavelmente) instalou um kernel binário e quando você tenta compilar o ipvsadm recebe mensagens de erro alertando sobre "missing header files".

Problema: Você não tem os arquivos de cabeçalhos do kernel (header files) (em /usr/src/linux/include/linux/) linkado a /usr/include/linux/.

Solução: instale os arquivos de cabeçahos e faça o link.

7.3. o ip_tables não funciona

Sintoma: Você está rodando o kernel 2.4.x e recebe uma série de mensagens de erro não informativas do ip_tables (ip_tables não costuma ter mensagens de erro que ajudem) como

ip_tables.o: init_module:
Device or resource busy
 

Problema: Você está com o ipchains carregado

Solução: remova o ipchains (ex. descarregue com rmmod ipchains.o). Você também pode remover o suporte ao ipchains no seu kernel, assim problemas como este não mais ocorrerão.

7.4. o ipvsadm exibe uma série de mensagens de erro

Sintoma: Você tem caracteres, números de IP, portas ou serviços não apropriados na saída do ipvsadm

Problema: A versão do seu ipvsadm não combina com a versão do seu ip_vs. (Você pode ter esquecido de compilar a nova versão do ipvsadm após reiniciar o computador com o novo kernel, então voc está usando o ipvsadm antigo).

Solução: obtenha o ipvsadm que combine com o seu ip_vs.

7.5. Ajude-me! O meu LVS não funciona

Configurar um LVS do zero pela primeira vez requer tempo e paciência, é muitas vezes entediante e nada-óbvio e há realmente várias maneiras de fazer com que dê errado. Para confundir o problema, há várias formas de fazer com que o LVS pareça estar funcionando, mas você estará apenas se conectando diretamente aos servidores reais ao invés de encaminhamento de pacotes por meio do direcionador. Entender como funciona um LVS requer um certo investimento de tempo.

As nossas respostas até agora serviram para tentar traduzir as suas postagens em nossa linguagem para figurar o que poderia estar sendo feito de errado. Não temos visto problemas em criar configurações básicas de LVS nos dias mais recentes, mas responder as mesmas requisições toma muito tempo. (Existem postagens abundantes sobre o que um LVS faz ou não faz em que nós estamos interessados em saber) Ocasionalmente, após umas 10 trocas com 3 pessoas na lista de e-mail, tentando ajudá-las no que poderia estar errado, a pessoa que fez a postagem inicial se lembrou de possuir regras de filtragem. (E ele havia verificado e estava certo de estar funcionando). E eles "esqueceram de nos avisar" sobre isto

Desde 1999, esforços substanciais tem sido colocados no HOWTO, no mini-HOWTO e nos scripts de configuração para permitir que as pessoas com um mínimo ou nenhum conhecimento sobre LVS possam configurar um e faze-lo funcionar. Caso você não queira usar o script de configuração, há muita informação aqui para você criar um LVS a partir da linha de comando.

Nós também precisamos ter os nossos trabalhos reais, por isso eu gostaria de tentar algo novo: -

Caso você não consiga fazer um LVS com 1 ou 2 servidores reais servindo a telnet (ou httpd), If you can't setup an LVS, with 1 or 2 realservers serving telnet (or httpd), então antes de tentar nos perguntar o que pode estar sendo feito de errado experimente o uso das ferramentas fornecidas para configurar um LVS básico. Uma vez que você tem um LVS básico funcionando, você poderá fazer outros ao seu jeito. Caso você não consiga que os scripts funcionem, então nós tentaremos fazer correções.

Caso você queira entrar em contato conosco, antes dê uma olhada no relatório de informações de problemas relatados (HOWTO) necessário para resolver os problemas.

7.6. O cliente diz "connection refused"

A máquina que recebeu a requisição do pacote está respondendo que não está servindo na porta solicitada do serviço. Possiveis razões para isto (Com a ajuda do Ratz)

  • o ipvsadm (no direcionador) não adicionou o serviço em sua tabela de encaminhamento (confira na saída do comando ipvsadm)
  • caso o serviço esteja na tabela do ipvsadm, então o direcionador está encaminhando o pacote a um servidor que não está respondendo ao serviço solicitado.
  • uma regra de filtragem
  • o serviço não está disponível
  • o serviço não está rodando no Servidor Real
  • o cliente escreveu o endereço IP errado
  • cabo de rede desconectado (você deverá ter as respostas icmp "host down" aqui)

7.7. quedas de conexão; o ipvsadm mostra as entradas no InActConn, mas nenhuma em ActiveConn

O erro mais comum neste caso é ter o gateway padrão definido incorretamente nos servidores reais.

  • VS-NAT: o gateway padrão tem que ser o direcionador. Não deve nenhum outro meio de comunicação do servidor real com o cliente, a não ser por meio do direcionador.
  • VS-DR e LVS-Tun: o gateway padrão não deve ser o direcionador - use o roteador local.

Caso você esteja usando o LVS-NAT com uma rede, você deve também manipular os redirecionamentos de ICMP.

7.8. Atrasos nas conexões iniciais, uma vez conectado tudo fica Ok

Normalmente você terá problemas com authd/identd. Simplesmente desative este serviço no seu servidor real da chamada do identd no cliente (ex.desconecte o seu serviço do identd).

Outro problema, que causa demoras nas conexões em qualquer situação, é o tempo limite do DNS numa chamada. Idealmente, você não deve ter nenhum DNS rodando em nenhuma máquina na LVS - você precisará rodar o sendmail etc off /etc/hosts. Entretanto caso você tenha DNS, esteja certo de haver entradas para todos os IPS da máquina (caso você tenha várias interfaces) e de qualquer máquina que você esteja chamando. Para verificar, execute comandos que precisem da resolução de nomes ex. netstat -a (precisará das entradas em /etc/services também) ou route (precisará das entradas em /etc/networks também). Se cada um destes fizerem pausa, execute-os novamente de forma a não precisarem da resolução de nomes (netstat -an, route -n) para localizar as entradas que estão causando as pausas - elas não estão tendo seus nomes resolvidos.

7.9. As conexões levam vários segundos para serem feitas

Tive este problema quanto o meu roteamento estava errado e o meu ICMP está figurando encorretamente. Outra possibilidade é a demora na resolução de nomes no DNS. Experimente fazendo a conexão tanto pelo nome do IPV quando pelo IP.

7.10. O meu LVS continua não funcionando, o que eu faço agora?

Caso você tenha configurado um simples LVS telnet a partir do LVS-mini-HOWTO e agora está tentando fazer o seu próprio LVS e ele não funciona, você deve fazer uma depuração na sua configuração.

Primeiramente faça o seu servidor real ficar fora do ar (desconecte o cabo de rede) e inicie o serviço escutando no RIP:port (VS-NAT) ou IPV:port (VS-DR ou VS-Tun).

Nota
não importa qual serviço você usará em produção, o telnet é melhor serviço para fazer uma depuração. Eu sei que você quer tentar com o seu-servidor com um servidor web com shockwave e applets em java, mas voc os terá rodando mais tarde. Tente o telnet primeiro, Ok? Isto irá salvá-lo em torno das questões da lista de e-mails do LVS.

Verifique se o serviço (inicialmente o telnet) está rodando (netstat -an). Conecte-se ao serviço a partir de um cliente simples rodando no próprio servidor real (ex. telnet IPV 80, lynx IPV) Então use o seu cliente padrão (navegador de internet) Esteja certo de que o seu serviço está fazendo tudo o que você espera que ele faça aos clientes da internet, teste bem ele.

Então conecte o servidor real a rede LVS e defna o gateway padrão (para o DIP para o LVS-NAT, para o roteador no caso de LVS-DR e LVS-Tun), adicione o IPV:serviços ao direcionador com o ipvsadm (ou com o script de configuração, veja o mini-HOWTO) usando o agendador rr. Verifique se o ipvsadm exibe o seu servidor_real:serviço.

Esteja certo de que não há firewalls entre o cliente e o LVS, caso contrário aposta-se de que tudo está off.

Então, se conecte ao IPV:serviço a partir de um cliente simples (ex telnet IPV porta), verifique se você irá conectar a todos os servidores reais, um por um (observe com o ipvsadm no direcionador). Então use o seu cliente preferido para o serviço (ex. um navegador de internet).

Caso as suas requisições de conexão não esteja se conectando, voc precisará observar em que ponto elas estão parando. Você poderá observar os pacotes por meior do tcpdump ou netstat -an (para ver se as requisições deixaram um nó e se chegaram no outro e ver se as respostas foram feitas).