Ir para o conteúdo
ou

Software livre Brasil

0 integrantes

Nenhum(a)

Red Hat Magazine

redirection forbidden: http://www.redhat.com/magazine/rss20.xml -> https://www.redhat.com/magazine/rss20.xml

 Voltar a torontux
Tela cheia Sugerir um artigo

Cluster de servidores web com SQUID

30 de Abril de 2010, 0:00 , por Software Livre Brasil - 0sem comentários ainda | Ninguém está seguindo este artigo ainda.
Visualizado 974 vezes
   Todo Sysadmin mais cedo ou mais tarde vai sentir a necessidade de dividir a carga dos acessos HTTP para mais de um servidor web, sendo assim, vai procurar uma ferramenta que faça:
              •  Round-robin de requisições;
              •  Failover (Remover automaticamente o servidor down do cluster);
              •  Controle de acessos através de ACL`s;
              •  Cache de objetos;
              •  Definição de "peso" para cada servidor.
  Apesar de existirem uma série de soluções pagas para atender, podemos resolver a situação utilizando o SQUID como proxy reverso. Mas o que é um proxy reverso?
   É um proxy que geralmente fica na frente de servidores web recebendo as requisições vindas da internet, tratando-as e entregando a um ou mais servidores internos.
OBS1: Todas as requisições que chegarem nos servidores web internos vão chegar com o ip do servidor proxy, contudo, existe um patch para o kernel e para o próprio squid chamado tproxy que possibilita a total transparência das requisições. Segue um link que trata de forma mais profunda o assunto:
http://www.balabit.com/support/community/products/tproxy/
OBS2: É importante ter um servidor de DNS interno para que o squid possa consultar e fazer o round-robin,  principalmente se você hospedar vários sites. Basta criar vários Hosts do tipo A  iguais, mas com os ips diferentes ex:


www          IN      A       192.168.0.1
www          IN      A       192.168.0.2
www          IN      A       192.168.0.3


 A implantação é muito simples e funcionará assim:
   Teremos um servidor SQUID na frente e dois ou mais servidores web que receberão as conexões a partir do próprio squid. Basta apontar todas as requisições do(s) site(s) da sua empresa para o proxy reverso que ela vai se encarregar de verificar se tem o objeto em cache, caso não tenha, repassa para um dos servidores internos, pega a resposta e entrega ao cliente.

Instalação do Squid

  Eu particularmente gosto de usar o squid 2.7, é realmente muito estável e performático:

     wget http://www.squid-cache.org/Versions/v2/2.7/squid-2.7.STABLE9.tar.gz

Depois:
    ./configure --enable-delay-pools --enable-arp-acl --enable-htcp --enable-cache-digests --enable-cachemgr-hostname=localhost --enable-digest-auth-helpers=password --enable-epoll --enable-external-acl-helpers=ip_user,ldap_group,unix_group,wbinfo_group --enable-ident-lookups --with-large-files --enable-linux-netfilter --enable-auth=ntlm,basic --enable-basic-auth-helpers=multi-domain-NTLM,SMB --enable-ntlm-fail-open --enable-ntlm-auth-helpers=SMB,fakeauth --enable-referer-log --enable-removal-policies=heap,lru --enable-snmp --enable-storeio=aufs,diskd,null,ufs --enable-useragent-log --enable-wccpv2 --with-aio --with-dl --with-pthreads --enable-follow-x-forwarded-for --prefix=/usr/local/squid2_7

Depois:
make && make install

Configuração do Squid

   Segue abaixo um arquivo de configuração completo e comentado nos pontos mais importantes, não vou comentar todos os parâmetros pois existe uma vasta documentação sobre eles no próprio site oficial:
http://www.squid-cache.org/Doc/config/

# Coloque o site principal, vai ser a direção default do squid

http_port 80 vhost defaultsite=www.exemplo.com.br
icp_port 0


hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY


cache_mem 1 GB
cache_swap_low 90
cache_swap_high 95

# Aqui você define a partição de cache e a forma de armazenamento,
# particularmente uso o diskd pois é mais performático que o ufs
# e suporta mais requisições por segundo.
http://oreilly.com/catalog/squid/chapter/ch08.pdf
# Além disso aconselho a partição de cache 
# com o filesystem ReiserFS.
cache_dir diskd /cache 1024 64 256 Q1=64 Q2=72
cache_access_log /var/log/squid/access.log
cache_log none
cache_store_log none

#Usuário que o squid vai rodar, não esqueça de adicioná-lo no sistema adduser
cache_effective_user squid
cache_effective_group squid


memory_pools on
memory_pools_limit 32 MB
maximum_object_size 4 MB
minimum_object_size 0 KB
maximum_object_size_in_memory 64 KB
fqdncache_size 1024


mime_table /usr/local/squid2_7/etc/mime.conf
log_mime_hdrs off
log_fqdn off
check_hostnames off
allow_underscore on

# Servidor de DNS que o squid vai usar para resolver as requisições, muito importante!
dns_nameservers 127.0.0.1


request_header_max_size 1 MB
quick_abort_min 50 KB
quick_abort_max 50 KB
quick_abort_pct 85
connect_timeout 60 seconds
peer_connect_timeout 30 seconds
read_timeout 15 minutes
request_timeout 1 minutes
persistent_request_timeout 1 minute
client_lifetime 1 day
pconn_timeout 30 seconds
ident_timeout 10 seconds
half_closed_clients off
forward_timeout 3 minutes
shutdown_lifetime 30 seconds
refresh_pattern -i \.jpg$ 0 50% 21600 reload-into-ims
refresh_pattern -i \.gif$ 0 50% 21600 reload-into-ims
refresh_pattern -i \.png$ 0 50% 21600 reload-into-ims
refresh_pattern -i \.jpeg$ 0 50% 21600 reload-into-ims
refresh_pattern -i \.bmp$ 0 50% 21600 reload-into-ims
refresh_pattern -i \.tif$ 0 50% 21600 reload-into-ims
refresh_pattern -i \.tiff$ 0 50% 21600 reload-into-ims
refresh_pattern -i \.swf$ 0 50% 21600 reload-into-ims
refresh_pattern -i \.html$ 0 20% 1440
refresh_pattern -i \.htm$ 0 20% 1440
refresh_pattern -i \.shtml$ 0 20% 1440
refresh_pattern -i \.shtm$ 0 20% 1440
refresh_pattern -i \.mov$ 2880 80% 21600 reload-into-ims
refresh_pattern -i \.avi$ 2880 80% 21600 reload-into-ims
refresh_pattern -i \.mpg$ 2880 80% 21600 reload-into-ims
refresh_pattern -i \.mpeg$ 2880 80% 21600 reload-into-ims
refresh_pattern -i \.qtm$ 2880 80% 21600 reload-into-ims
refresh_pattern -i \.flv$ 2880 80% 21600 reload-into-ims
refresh_pattern -i \.wav$ 1440 100% 4320 reload-into-ims
refresh_pattern -i \.au$ 1440 100% 4320 reload-into-ims
refresh_pattern -i \.mid$ 1440 100% 4320 reload-into-ims
refresh_pattern -i \.mp3$ 2880 100% 21600 reload-into-ims
refresh_pattern -i \.zip$ 7200 50% 21600 reload-into-ims
refresh_pattern -i \.gz$ 0 50% 10080 reload-into-ims
refresh_pattern -i \.arj$ 0 50% 4320 reload-into-ims
refresh_pattern -i \.lha$ 0 50% 4320 reload-into-ims
refresh_pattern -i \.lzh$ 0 50% 4320 reload-into-ims
refresh_pattern -i \.rar$ 7200 50% 21600 reload-into-ims
refresh_pattern -i \.tgz$ 0 50% 21600 reload-into-ims
refresh_pattern -i \.tar$ 0 50% 21600 reload-into-ims
refresh_pattern -i \.Z$ 0 50% 4320 reload-into-ims
refresh_pattern -i \.sit$ 0 50% 4320 reload-into-ims
refresh_pattern -i \.pdf$ 7200 50% 10080 reload-into-ims


refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern .               0       20%     4320


acl all src 0.0.0.0/0.0.0.0
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8


acl SSL_ports port 443 563
acl Safe_ports port 9876
acl Safe_ports port 80          # http
acl Safe_ports port 81
acl Safe_ports port 8081
acl Safe_ports port 8082
acl Safe_ports port 8083
acl Safe_ports port 82          #
acl Safe_ports port 21          # ftp
acl Safe_ports port 443 563     # https, snews
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl Safe_ports port 23000
acl tam port 444
acl CONNECT method CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports


http_reply_access allow all
reply_header_max_size 10 KB
httpd_suppress_version_string on
tcp_recv_bufsize 0 bytes
forwarded_for on
follow_x_forwarded_for allow all
http_access allow all
icp_access allow all


detect_broken_pconn on
pipeline_prefetch on
ie_refresh on
relaxed_header_parser on
client_persistent_connections on
server_persistent_connections on
persistent_connection_after_error off
reload_into_ims on

# Aqui é a parte mais importante do balanceamento de carga, onde dizemos quais são os servidores
# que fazem parte do cluster e caso necessário o weight (peso) para cada servidor. 
# Isto é importante caso você tenha servidores com hardware diferentes e queira destinar mais      # conexões para as máquinas mais robustas. No nosso caso vou colocar três vezes mais conexões   # para o primeiro servidor
cache_peer 192.168.0.1 parent 80 0 no-query originserver round-robin no-digest weight=3
cache_peer 192.168.0.2 parent 80 0 no-query originserver round-robin no-digest weight=1
cache_peer 192.168.0.3 parent 80 0 no-query originserver round-robin no-digest weight=1


visible_hostname www.exemplo.com.br
cache_mgr contato@exemplo.com.br

Pronto! 
Você já tem um balanceamento de carga web ;)

Fonte: http://torontux.blogspot.com/2010/04/cluster-de-servidores-web-com-squid.html

0sem comentários ainda

Enviar um comentário

Os campos são obrigatórios.

Se você é um usuário registrado, pode se identificar e ser reconhecido automaticamente.