Version 9 (modified by anônimo, 14 anos atrás) (diff)

--

FazerUmBalanceamentoDeCarga

Para que haja uma melhor compreensão do processo do balanceamente de carga com cache feito com Squid, Zeo e Zope, é necessário que coloquemos alguns conceitos e informações em destaque:

  • Cluster - Que na sua forma mais básica um cluster é um sistema que compreende dois ou mais computadores ou sistemas (denominados
    nodos no caso aqui seriam instâncias) na qual trabalham em conjunto para executar aplicações ou realizar outras tarefas, de tal forma para que os usuários que os utilizam tenham a impressão que somente um único sistema responde para eles, criando assim uma ilusão de um recurso único (computador virtual). Este conceito é denominado transparência do sistema. Como características fundamentais para a construção destas plataformas inclui-se elevação da: confiança, distribuição de carga e performance.

  • Balanceamente de Carga - Este modelo distribui o tráfego ou requisições de recursos provenientes das mesmas instâncias (Zopes) que executam os mesmos programas entre as máquinas que compõem o cluster. Todas as instâncias estão responsáveis em controlar os pedidos. Se uma instância falhar, as requisições são redistribuídas entre as outas instâncias disponíveis no momento. Este tipo de solução é normalmente utilizado em fazendas de servidores de web (web farms).
  • Squid - É uma ferramenta (proxy-cache) que alivia a latência da rede. A idéia por trás é de criar um "banco de dados" onde os objetos mais utilizados sejam guardados para os próximos acessos. Isto significa que caso tenhamos 20 acessos ao site ao mesmo tempo, somente uma vai ser realizada na instancia as outras vão ser cacheadas, dando assim uma melhor performance.
  • Zeo - É um sistema que permite rodar um site em mais de um computador, que geralmente é chamado de clustering e balanceador de carga. É bom lembrar que todas as instâncias devem ter os mesmos produtos para que o zeo funcione perfeiamente.
  • É bom deixar claro que é possível fazer isso poderiamos utilizar somente uma máquina , mas dessa forma poderiamos não conseguir resultados satisfatórios. Então para a criação do balanceador de carga com cache é necessário no mínimo 4 máquina simples, uma que vai rolar squid, outra para rodar o zeo e duas para rodas as instancias.

  • Esta configuração foi feita no ubuntu 5.04 que tem a base de pacotes Debian. A localização de determinados arquivos podem ser encontrados em diferentes locais dependendo do sistema operacional utilizado. No caso do sistema operacional Windows é necessário a instalação do cygwin e nele instalar o squid.

Antes de começar vamos criar uma interface em cada maquina do cluster. Digite no console este comando.

vi /etc/network/interfaces

Dentro desse arquivo insira as seguintes linhas de comando.

# Interface estatica
auto eth0:0
iface eth0:0 inet static
 address 10.10.10.21
 netmask 255.255.255.0
 network 10.10.10.0
 broadcast 10.10.10.255

Em cada máquina altere o ip de address. Por exemplo:

 address 10.10.10.22
 address 10.10.10.23
 address 10.10.10.24
 address 10.10.10.25

Esta alteração server para que cada maquina tenha um ip diferente. Agora você deve estar se perguntando por que criar estas interfaces? A resposta é bem simples, é para que você trabalhar com ip's fixos e não precisar ficar olhando todo dia quais são os ip's das máquinas em questão.

Depois de termos dado alguns conceitos, informações e a criação da interface, agora vamos começar criando um cluster com o ZEO e ZOPE.

Para criar uma instância ZEO você precisa entrar na sua pasta bin dentro do zope instalado. Por exemplo:

cd /home/usuario/pastazope/bin

Dentro da pasta digite:

./mkzeoinstance /home/usuario/zeo/ 9000

Onde /home/usuario/zeo é o local onde vai ficar sua instância zeo e 9000 será a porta onde o zeo ouviram as requisições. Depois de feito isso, crie as duas instâncias zope. Em seguida faça uma copia de backup do zope.conf.

cp /home/usuario/instanciazope/etc/zope.conf /home/usuario/instanciazope/etc/zope.conf.orig

Agora entre zope.conf de cada instância zope e faça a seguinte alteração. Comente as seguintes linha, que se encontram no final do zope.conf como no exemplo abaixo:

#<zodb_db main>
#    # Main FileStorage database
#    <filestorage>
#      path $INSTANCE/var/Data.fs
#    </filestorage>
#    mount-point /
#</zodb_db>

Em seguida, descomente as seguintes linhas como no exemplo abaixo:

# Other storage examples
#
# ZEO client storage:
#
<zodb_db main>
  mount-point /
  # ZODB cache, in number of objects
  cache-size 5000
  <zeoclient>
    server 10.10.10.100:9000
    storage 1
    name zeostorage
    var $INSTANCE/var
    # ZEO client cache, in bytes
    cache-size 20MB
    # Uncomment to have a persistent disk cache
    #client zeo1
  </zeoclient>
</zodb_db>

Repare na linha server 10.10.10.100:9000, onde você pode ver que 10.10.10.100 é o ip da maquina com a instancia zeo e 9000 é a portal que o zeo está ouvindo as requisições.
Agora inicie suas instancias zope. Crie um pasta em uma das instancias e abra a outra instancia para ver se esta pasta foi criada lá também, se vc conseguir ver a pasta é porque o cluster está funcionando.

Ainda dentro do zope.conf descomente a ICP port como segue abaixo:

<icp-server>
  # valid key is "address"
  address 3132
</icp-server>

Agora instale o squid (No Ubuntu).

sudo apt-get install squid

Em seguida faça uma cópia de backup do squid.conf e entre nele com os seguintes comandos.

sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.orig
sudo gedit /etc/squid/squid.conf

Apague todo o squid.conf e insira as seguintes linhas

http_port 80
icp_port 3130
cache_mem 1 MB
cache_dir ufs /var/spool/squid 1024 16 256

redirect_program /etc/squid/iredir/iRedirector.py
redirect_children 100
redirect_rewrites_host_header off

request_body_max_size 4196 KB
cache_mgr leonardolopes@interlegis.gov.br
cache_effective_user proxy

acl QUERY urlpath_regex \?
no_cache deny QUERY

acl all src 0.0.0.0/0.0.0.0
acl in_backendpool dstdomain backendpool
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl CONNECT method CONNECT

cache_peer 10.10.10.23 parent 8080 3132 no-digest no-netdb-exchange round-robin
cache_peer 10.10.10.25 parent 8080 3132 no-digest no-netdb-exchange round-robin
cache_peer_access 10.10.10.23 allow in_backendpool
cache_peer_access 10.10.10.23 deny all
cache_peer_access 10.10.10.25 allow in_backendpool
cache_peer_access 10.10.10.25 deny all

http_access allow manager localhost
http_access deny manager
http_access allow all
never_direct allow all
#http_reply_access allow all
#icp_access allow all

httpd_accel_host virtual
httpd_accel_port 0
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

Veja se as portas HTTP e ICP do cache_peer é a mesma da suas instancias zope. No caso porta HTTP é a 8080 e a porta ICP é a 3132. Observe que é possível usar as mesmas portas para as duas instancias porque elas estão em maquinas diferentes.

Concluido a configuração do squid passemos para o redirecinador de URL. Caso não queria fazer um, existe um pronto no seguinte site: http://longsleep.org/projects/iredir

Descompacte o arquivo e copie a pasta iredir para /etc/squid/. Depois de feito isso, abra o arquivo redirector_class.py. Dentro do arquivo encontrará as seguintes linhas de comando.

# define sitemap matching regex mapping
sitemap = {

            (10, 'localhost'): 'backendpool/VirtualHostBase/http/$netloc$:80/portal/VirtualHostRoot',
            (11, 'testandoplone'): 'backendpool/VirtualHostBase/http/$netloc$:80/interlegis/VirtualHostRoot',
            (12, 'siteplonedeteste'): 'backendpool/VirtualHostBase/http/$netloc$:80/intranet/VirtualHostRoot',
            
          }

Observe que localhost, testandoplone e siteplonedeteste são as URL que vc pode digitar em seu browser, sendo que estas conseguiram acessar o zope se estiverem configuradas dentro de /etc/hosts (no caso do Ubuntu). E portal, interlegis e intranet são os objetos que serão mandados para o squid faça o cache.

Depois disso abra o seu browser e digite a URL que foi colocada no redirector_class.py. Aparecendo o objetos selecionado, quer dizer que o squid está fazendo o balanceamento das instâncias, para testar se ele está fazendo cache, digite no console.

ab -n 100 -c 4 http://''urlnoredirector_class.py''/

Depois faça o mesmo teste, mas dessa vez com a url direto da instancia zope. Normalmente com esta configuração o squid consegue dar em torno de 350 resquests por segundo. Caso a diferença não seje no mínimo o dobro de requests é porque o squid não está fazendo cache. Isso pode ocorrer se o zope não estiver mandando informações para o squid fazer o cache dos objetos, etão

Anexos (1)

Download de todos os anexos como .zip

 

The contents and data of this website are published under license:
Creative Commons 4.0 Brasil - Atribuir Fonte - Compartilhar Igual.