Solaris 11: Como usar o ILB para criar um balanceador de carga de alta disponibilidade em dois servidores de back-end?

2

Estou tentando usar o ILB do Solaris 11 para criar um balanceador de carga em dois servidores DNS de back-end. Aqui está meus requisitos:

Dois IPs externos: .XXX.YYY, .XXX.ZZZ - estes são os IPs de DNS que nossos clientes atingem Duas caixas ILB em uma configuração HA sobre esses dois IPs externos Dois servidores DNS de backend

Gostaria de ter as duas caixas ILB (ilb1 e ilb2) cada saldo de carga entre os dois servidores DNS (ns1 e ns2) em dois IPs de entrada diferentes. Eu gostaria que o ilb1 fosse primário em .XXX.YYY e secundário em .XXX.ZZZ, e ilb seria o inverso disso. Dessa forma, se um dos servidores DNS ou os servidores do ILB forem desativados, as solicitações de DNS deverão continuar não impactadas. No entanto, não podemos ir totalmente NAT sobre isso devido aos nossos requisitos que os servidores backend tem que ser capaz de ver o SRC_IP real da solicitação de DNS - vai NAT completa faz parecer aos servidores DNS que todas as solicitações são provenientes do Caixas ILB, não os próprios clientes.

Ir HALF-NAT manterá corretamente o SRC_IP da solicitação DNS, entretanto isso significa que o pacote agora tem que ser roteado através da caixa ILB da qual foi solicitado, para que o IP correto esteja no pacote quando ele for recebido. para o cliente, caso contrário, o cliente irá jogá-lo fora ("resposta de fonte inesperada" e similares). Aqui está o problema - já que existem dois IPs, como posso rotear o pedido de forma confiável através da caixa ILB correta? / etc / defaultrouter nas caixas de DNS só permite usar 1 IP, então aproximadamente metade das nossas respostas seria descartada.

Esta configuração é possível? Minha descrição é clara como lama?

    
por gatesphere 14.03.2013 / 19:39

1 resposta

0

Parece que você já tem muito do que precisa, mas falta mágica.

Primeiro, para lidar com vários endereços VIP, você quer usar o VRRP (ou possivelmente anycast, mas não acho que seja isso que você está fazendo). Você não declarou explicitamente que você tem essa parte funcionando, mas eu entendo que você faz isso, então vou falar sobre o ILB e o roteamento.

Boas notícias, você não precisa forçar o encaminhamento de volta pelo ILB.

O que você quer é chamado de Direct Server Return e usa o modo "stateless" do ILB.

Veja o que ele faz:

  1. O LB altera o endereço L2 ether de destino para o endereço L2 do servidor real.
  2. O RS recebe um pacote com a fonte L3 real e o destino L3 real.
  3. O RS responde com a origem e o destino corretos de L3.

A documentação da Oracle sobre como configurar o DSR tem uma completa escrever com código de exemplo para configurar corretamente o DSR. ( Nota: A documentação do Oracle é precisa, mas foi escrita com pouca gramática. Para ser claro, os passos 1, 3 e 4 são executados no ILB enquanto o passo 2 é realizado nos servidores reais.) p>

Para descrever muito em breve:

  • Use type=DSR no seu comando ilbadm create-rule
  • Adicione o (s) endereço (s) VIP ao lo0 em cada servidor real

Se os seus servidores reais forem Linux, você também precisará desabilitar algumas proteções de spoof de roteamento e arp:

echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
    
por 26.06.2013 / 23:57