502 erros com o apache mod_proxy hot standby (ou equivalente)

2

Alguém sabe como configurar o recurso mod_proxy hot standby (+ H) para que a transferência ocorra imediatamente (sem que um usuário receba um erro 502) durante um desligamento?

Não estamos procurando balanceamento de carga real, apenas queremos que um servidor secundário assuma o controle enquanto encerramos o primário.

O problema é que, sempre que o primário fica inativo, posso ignorar uma solicitação inválida, resultando em um erro HTTP 502 que chega ao usuário final, antes que o secundário realmente assuma.

Listen 80
<VirtualHost 127.0.0.1:80>
    ServerName domain.com
    ProxyPass / balancer://balance/

    <Proxy balancer://balance/>
        BalancerMember http://primary_ip:80
        BalancerMember http://secondary_ip:80 status=+H
    </Proxy>
</VirtualHost>
    
por 6million 20.10.2010 / 16:50

3 respostas

1

Se você desabilitar explicitamente o membro principal do balanceador primeiro (antes de desativar o servidor principal), o Apache terá o prazer de encaminhar a solicitação ao membro do balanceador secundário. A aquisição acontece imediatamente.

Para isso, ative o gerenciador do balanceador primeiro com o config:

<Location /lb>
    SetHandler balancer-manager
</Location>

Em seguida, você pode ativar / desativar, de forma interativa ou programática, o membro do balanceador acessando / lb.

Ao contrário do comentário de karmawhore, uma configuração hot-standby como essa não tem nada a ver com a verificação da saúde.

    
por 12.08.2012 / 07:53
0

O Apache não suporta verificações de saúde que seriam necessárias para fazer isso. Mesmo com verificações de saúde, há uma janela entre as verificações nas quais os pedidos podem ser inválidos.

Você pode escrever algo que repetidamente testou um pequeno arquivo estático para forçar o proxy a reconhecer que o balanceador falhou.

Eu me lembrei de uma antiga solução mod_perl:

link

    
por 20.10.2010 / 18:48
0

Eu acho que você pode usar a diretiva ErrorDocument. Se você especificar o código de erro que está procurando e em vez de uma página estática (como /missing.html), você pode especificar uma página PHP que possa manipular o redirecionamento para você. Algo como:

ErrorDocument 502 /redir.php

Então no redir.php tem algo como:

<?php
header("Location: ...page that was asked for...");
?>
    
por 27.06.2012 / 11:52