abordagem para redirecionar protocolos (texto sem formatação) para máquinas atrás de um roteador que estão inativas

1

Estou procurando há algum tempo, como conseguir isso, mas não consigo encontrar soluções semelhantes ou sintetizar uma a partir do meu conhecimento.

Aqui estão os detalhes sobre a minha configuração: Eu tenho um gateway / roteador que tem o uplink para a internet. "Atrás" que são vários servidores diferentes. Alguns deles têm um IP público, outros não. De qualquer maneira, todos os serviços que eu queria expor estão expostos ou desbloqueando a respectiva porta no IP de destino ou DNAT a porta através de uma das máquinas sem IP público. Toda essa configuração funciona bem (para a maior parte, é um conjunto de regras baseado no netfilter em combinação com algumas entradas na tabela de roteamento).

Agora, o problema: às vezes, as máquinas atrás do roteador podem estar inoperantes (não posso arcar com redundâncias extras no momento). Se isso acontecer, eu gostaria que o usuário de um serviço - em particular HTTP - tivesse uma experiência de usuário "melhor" do que um tempo limite de rede e oferecesse um servidor de "backup" que mostrasse apenas um aviso breve sobre o fato o roteador está inativo no momento. Portanto, se o roteador não puder acessar o serviço, ele deverá redirecionar o tráfego dinamicamente para o "backup".

Alguém sabe de uma solução para esse problema ou pode sugerir uma maneira de abordá-lo? Sugestões para termos de pesquisa também são bem-vindas ...

    
por 0xC0000022L 09.03.2011 / 18:57

2 respostas

3

Uma solução seria usar um balanceador de carga como HAProxy . Ele suporta o conceito de um servidor de backup, para que você possa rotear seu tráfego para o seu servidor normal, desde que ele responda às verificações regulares que o balanceador de carga faz. Se ele não responder mais, o tráfego pode ser roteado para servidores de backup, o que, no seu caso, poderia simplesmente exibir uma nota de "desculpa".

A desvantagem dessa abordagem é, obviamente, que você precisa manter o balanceador de carga, que pode ser outro ponto único de falha. Se o seu gateway / roteador é um sistema linux real (ao contrário de uma caixa plástica), isso provavelmente não é um problema, já que ele já é um ponto único de falha e provavelmente também pode executar o loadbalancer:)

Mais genericamente, o problema a ser resolvido não é redirecionar o tráfego (existem muitas soluções para isso), mas sim detectar que um host está inativo e, em seguida, alterar o roteamento / redirecionamento de acordo. O mesmo é necessário quando o servidor sobe novamente, para que o tráfego seja roteado para o servidor atual.

    
por 09.03.2011 / 19:07
0

A solução mais barata, você teria que escrever um script que pesquisa o servidor back-end e atualiza o encaminhamento de sua porta quando ele for desativado. Você encaminharia o tráfego para um servidor diferente que contém sua mensagem de erro.

Os detalhes do script dependem completamente dos detalhes específicos de seus sistemas. Algum código muito pseudo bash:

wget backendserver > /dev/null
test_for_failure
if failed; then
  iptables -D <port forward rule>
  iptables -A <new forward rule>
else
  verify iptables is sending to the backend
fi

Em nosso ambiente, todo o tráfego é encaminhado para um servidor, que então é enviado para os backends. Sua configuração para exibir mensagens adequadas durante as interrupções. No entanto, ainda pode falhar causando timeouts. Sua dedicada a sua tarefa, porém, tornando as interrupções raras. O próximo passo seria torná-lo parte de um cluster, para aumentar o tempo de atividade; para nós, o custo / benefício não existe.

    
por 09.03.2011 / 19:06