Gerenciando vários proxies do Apache simultaneamente (mod_proxy_balancer)

4

O frontend do meu aplicativo da web é formado por dois proxies reversos do Apache, que usam o mod_proxy_balancer para distribuir o tráfego em vários servidores de aplicativos de backend. Ambos os proxies reversos de frontend, executados em hosts separados, são acessíveis pela Internet. O round robin do DNS distribui o tráfego por ambos. No futuro, é provável que o número de proxies reversos aumente, uma vez que o webapplication é muito pesado em termos de largura de banda.

A minha pergunta é: como mantenho o estado de ambos os balanceadores reversos / proxies em sincronia?

Por exemplo, para fins de manutenção, talvez eu queira reduzir a carga em um dos servidores de aplicativos de back-end. Atualmente, posso fazer isso acessando o formulário da Web do Balancer-Manager em cada proxy e alterar as regras de distribuição. Mas eu tenho que fazer isso em cada proxy manualmente e me certificar de que entro no mesmo material.

É possível "vincular" várias instâncias do mod_proxy_balancer? Ou existe uma ferramenta que se conecta a várias instâncias e atualiza todas com as mesmas informações?

Update : A ferramenta deve recuperar o status do tempo de execução e fazer alterações no tempo de execução, assim como o Balancer-Manager existente, apenas para um número de proxies - não apenas para um. A modificação de arquivos de configuração não é o que me interessa (já que existem muitas ferramentas para isso).

    
por Hank 31.01.2011 / 11:42

3 respostas

2

Existe um Anfíbio que modifica o acesso programático à interface da Web balancer-manager. Pode não ter todos os recursos necessários, mas você pode adicioná-los ou usá-los como exemplo para escrever uma biblioteca semelhante em outro idioma. Este é um script de exemplo que o utiliza para ativar ou desativar os servidores de aplicativos de back-end especificados pelo usuário em dois balanceadores de proxy.

# amphibian_example.rb
require 'amphibian'

balancer_hosts = ["b1.example.com", "b2.example.com"]

command = ARGV.shift
backend_hosts = ARGV

balancer_hosts.each do |balancer_host|
    balancer_url = "http://#{balancer_host}/balancer-manager"
    balancer = Amphibian::BalancerManager.new(balancer_url)
    backend_hosts.each do |backend_host|
        backend_url = "http://#{backend_host}"
        if command == "enable"
            balancer.enable_host(backend_url)
            puts "Enabled #{backend_host} on #{balancer_host}"
        end
        if command == "disable"
            balancer.disable_host(backend_url)
            puts "Disabled #{backend_host} on #{balancer_host}"
        end
    end
end

Isso pode ser executado como

$ amphibian_example.rb disable a1.example.com a5.example.com
Disabled a1.example.com on b1.example.com
Disabled a5.example.com on b1.example.com
Disabled a1.example.com on b2.example.com
Disabled a5.example.com on b2.example.com
    
por 03.06.2011 / 00:01
3

Recentemente, escrevi uma ferramenta para fazer o que você precisa. Se for tarde demais, espero que possa ser útil para outra pessoa. O nome do projeto é ACM (Apache Cluster Manager) e está disponível em: link

    
por 25.06.2011 / 16:33
0

Como não conheço nenhuma ferramenta que permita fazer isso, minha abordagem para esse problema seria criar um script que seja executado em todos os servidores via SSH e faça as modificações desejadas.

Esse pode ser um script Python muito simples, mas imagino que outras linguagens de script também possam fazer isso com bastante facilidade. Eu usaria ferramentas como sed para fazer as modificações do texto.

Uma abordagem mais "racional" seria usar ferramentas como Chef ou fantoche para gerenciar esses arquivos de configuração, mas eu não tenho experiência com isso (não é uma coisa boa!)

    
por 31.01.2011 / 11:49