Alta disponibilidade sem descartar conexões

4

É possível ter uma configuração de alta disponibilidade, neste exemplo, indo para dois servidores da Web e permitir o failover sem descartar conexões?

Eu tenho dois servidores web que estão usando cometa, uma técnica de HTTP onde você tem conexões HTTP de longa duração. Eu tenho dois loadbalancers em frente correndo heartbeat com um IP compartilhado. Se um desses servidores front-end ficar inativo, todas as conexões serão perdidas.

Ouvi dizer que existe uma técnica, talvez com o HAProxy, em que os dois servidores controlam o estado das conexões e, se um dos servidores falhar, o outro assumirá, sem perder as conexões. Eu não consigo descobrir como isso é feito.

    
por John Smith 01.06.2011 / 15:37

4 respostas

2

Eu também pesquisei como carregar conexões telnet de longa duração. Mesmo os grandes e caros balanceadores de carga, como o F5, parecem não suportar a "migração" de uma conexão tcp aberta de um servidor inativo para outro servidor. Eu considerei capturar o handshake e os pacotes de conexão do telnet em nosso balanceador de carga e, em seguida, repeti-los se ele tivesse que se reconectar a outro servidor. A questão é que cada aplicativo (telnet, cometa, ssh, etc) tem um conjunto diferente de regras para iniciar a conexão e efetuar login. Sem codificar para cada aplicativo, não conheço um balanceador de carga que possa fazer uma coisa dessas .

No final, desisti e investi o tempo reconfigurando o aplicativo cliente para reconectar ao serviço de uma maneira transparente para o usuário.

Para cometa, sugiro que você configure o serviço da Web para reconectar quando detectar uma desconexão. Este artigo sobre HTTP Streaming em ajaxpatterns.org tem um trecho de código para detectar uma desconexão.

Quando o cometa puder se reconectar, a configuração atual do balanceador de carga deverá funcionar conforme o esperado.

    
por 02.06.2011 / 02:46
2

Você não pode fazê-lo através do HAProxy, porque isso está na camada OSI errada - no nível HTTP, em vez de no nível TCP. Alguns dos balanceadores de carga de camada inferior têm um recurso que pode ser capaz de realizar o que você está falando, pelo menos para muitas conexões, passando informações do nó ativo para o nó passivo. Olhe para o Linux Virtual Server (LVS) combinado com um daemon de nível de serviço como o ldirectord para realizar o que você está procurando.

    
por 25.06.2011 / 21:02
1

Isso não é realmente possível. Seria uma idéia muito melhor programar o cliente para tolerar a falha do servidor e reconectar-se automaticamente. Isso permitiria uma falha de servidor único e, potencialmente, um failover de site (se um site inteiro falhasse).

Terreno Hipotético: Pode ser possível criar uma dinâmica cliente-servidor em que o balanceador de carga ou proxy intermediário possa estabelecer automaticamente uma nova conexão com o servidor de failover e encaminhar qualquer novo tráfego de / para o cliente para esse novo servidor. O servidor teria que estar de alguma forma ciente das informações da sessão do cliente, talvez armazenando as informações da sessão no armazenamento compartilhado. Como alternativa, o cliente poderia ser programado como tal para tolerar um servidor que não tenha suas informações de sessão anteriores (contanto que modifiquemos o cliente, poderíamos também fazer o parágrafo 1 e fazer com que ele simplesmente se reconectasse ao novo servidor de failover). Tal configuração seria quase certamente mais complicada e propensa a erros do que vale a pena.

    
por 02.06.2011 / 02:53
1

Usar a tolerância a falhas do vmwares no esx / esxi pode conseguir isso, mas há muitas limitações também.

Desculpe por não ligar, no meu celular no carro a caminho de casa: -).

    
por 25.06.2011 / 19:51