Tuning no Squid

19

Filed Under (software livre) by rafaelgomes on 18-01-2009

O Squid é a proxy de acesso web opensource mais utilizado em todo mundo. Realmente uma ferramenta primorosa, mas se for devidamente configurada, pois o Squid que acompanha as distribuições Gnu/Linux mais tradicionais empacota uma versão do Squid já compilada para uma demanda menor de recurso, talvez para ter um pacote menor ou apenas para atender uma demanda muito particular.

Como todos sabem o Squid é responsável não só por efetuar bloqueios de acesso a internet com base em ACL´s configuradas previamente pelo administrador da rede, se essas regras ficarem muito complexas, tente o Dansguardian, talvez ele lhe atenda melhor, mas o Dans fica pra outro post. :P

O Squid também é reponsável pela economia de utilização da sua banda de internet, mas como? Ele guarda as páginas mais utilizadas em disco e então fornece uma espécie de cache para seus clientes, assim pessoas que requisitarem ao proxy uma determinada página e ela já estiver no cache, o Proxy não precisará utilizar a banda de internet para buscar a mesma, repassa a sua cópia que está em disco.

Você que é um iniciante no Gnu/Linux e  pretende instalar o Proxy para atender a mais de 20 pessoas e realmente deseja “sentir” a economia de utilização de banda, leia o post inteiro e tenta ajustar as configurações as SUAS necessidades. Se pensa que vai encontrar um arquivo pronto para colocar em seu servidor, pare por aqui, nem leia o resto, pois será perda de tempo.

Vamos lá…

Só há uma forma de obter um Squid otimizado a sua necessidade. Através dos sources. Baixe o source em squid-cache e vamos compila-lo. Calma, não precisa ter medo, é tranquilo.

Primeiro veja se tem as ferramentas de compilação instalada, se você usa o Fedora dê o seguinte comando:

yum groupinstall "Development Tools"

Descompacte o pacote que foi descarregado:

tar xvzf <nome do pacote>.tar.gz

Agora passou a parte básica vamos a compilação, primeiro você deve configurar o que deverá ser compilado. Com o comando ./configure –help você terá o seguinte retorno:

Usage: ./configure [OPTION]… [VAR=VALUE]…

To assign environment variables (e.g., CC, CFLAGS…), specify them as
VAR=VALUE.  See below for descriptions of some of the useful variables.

Defaults for the options are specified in brackets.

Configuration:
-h, –help              display this help and exit
–help=short        display options specific to this package
–help=recursive    display the short help of all the included packages
-V, –version           display version information and exit
-q, –quiet, –silent   do not print `checking…’ messages
–cache-file=FILE   cache test results in FILE [disabled]
-C, –config-cache      alias for `–cache-file=config.cache’
-n, –no-create         do not create output files
–srcdir=DIR        find the sources in DIR [configure dir or `..']

Installation directories:
–prefix=PREFIX         install architecture-independent files in PREFIX
[/usr/local/squid]
–exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
[PREFIX]

By default, `make install’ will install all the files in
`/usr/local/squid/bin’, `/usr/local/squid/lib’ etc.  You can specify
an installation prefix other than `/usr/local/squid’ using `–prefix’,
for instance `–prefix=$HOME’.

For better control, use the options below.

Fine tuning of the installation directories:
–bindir=DIR           user executables [EPREFIX/bin]
–sbindir=DIR          system admin executables [EPREFIX/sbin]
–libexecdir=DIR       program executables [EPREFIX/libexec]

<e o monte de linhas aqui>

Experimente ler todos os parâmetros que podem ser utilizados para customizar seu Squid, mas como não sou ruim nem nada, colocarei meus comentários sobre alguns parâmetros que julguei interessante. Estou aberto a críticas e sugestões, ok?

# Prefixo a ser utilizado em outros parâmetros

–prefix=/usr

# Onde ficará os arquivos de manuais

–mandir=/usr/share/man

# Onde ficará os arquivos de configuração

–sysconfdir=/etc/squid

# Onde fica alguns outros arquivos do Squid, como por exemplo alguns executáveis.

–libexecdir=/usr/libexec/squid

# Arquivos somente leitura pra o squid (Exemplo paginas de erro, mib e icones).

–datadir=/usr/share/squid

# Lista de sistemas de autenticação que o Squid suportará

–enable-auth=basic,digest,ntlm

# Lista de politicas de remoção de arquivos do cache

–enable-removal-policies=lru,heap

# Habilita utilização de pacotes icmp para mensurar qual o host squid mais confiável, na utilização de estrutura hierárquica,  se não usa o parâmetro cache peer do squid.conf,  pode esquecer essa diretiva.

–enable-icmp

# Referente a identificação a cada conexão, geralmente é um problema e aumenta carga. Eu costumo desabilitar.

–disable-ident-lookups

# Possibilita de criação de cache digests (Sumários de cache), requerido se usa cache_peer
# Mais informação

–enable-cache-digests

# Habilita o suporte ao limitador de banda do Squid

–enable-delay-pools

# Adiciona o log do cabeçalho “referer” (Pela pesquisa que fiz, raramente iremos precisar disso no log, pode desabilitar senão tiver uma demanda que precisar disso realmente).
# Mais informação

–enable-referer-log

# Adiciona o log do cabeçalho useragent
# Mais informação

–enable-useragent-log

# Suporte a acl com consulta de ARP (MAC)

–enable-arp-acl

# Suporte a arquivos grandes

–with-large-files

# habilita o protocolo HTCP (Também relacionado a cache_peer).

–enable-htcp

# Possibilidade ao HTCP
# Mais informação

–enable-carp

# Permite aceitar o header HTTP X-Forwarded-For para que ele possa ser redirecionado para outro site, mesmo através de proxy.

–enable-follow-x-forwarded-for

# Habilita a consulta de SNMP no proxy.

–enable-snmp

# Não necessário para proxy de acesso a internet, apenas para proxy reverso (Explico isso em outro post).

–enable-ssl

# Protocolos de armazenamento em cache suportados

–enable-storeio=ufs,diskd,coss,aufs,null

# O parâmetro abaixo é igual a –with-aufs-threads=N_THREADS –with-pthreads –enable-storeio=ufs,aufs
# Que na verdade são quantas threads do aufs teremos, setado para usar o pthreds e quais as politicas de cache serão suportadas.

–enable-async-io=32

# Permite proxy transparente via Iptables

–enable-linux-netfilter

# Habilita a consulta de DNS externa (Tenho informações que é mais lenta do que a nativa interna, estou aberto a opiniões).
–disable-internal-dns

# Habilita o suporte a epoll, que melhora conexões com os file descriptions
# Mais informações

–enable-epoll

# Quantidade maxima de file description que o Squid poderá abrir
–with-maxfd=16384

Obs: Veja que SO deve estar também devidamente configurado, veja a quantidade de FD com o seguinte comando:
# cat /proc/sys/fs/file-max
Se deseja aumentar a quantidade de FD, use o seguinte comando:
# sysctl -w fs.file-max=16384

#  Habilita as paginas de erro que serão habilitadas por padrão e a que será compilada no make, pois senão especificar, irá compilar com todas possíveis.

–enable-err-languages=Portuguese
–enable-default-err-language=Portuguese

Pronto, o meu configure fica dessa forma:

./configure –prefix=/usr –mandir=/usr/share/man –infodir=/usr/share/info –datadir=/usr/share –localstatedir=/var/lib –sysconfdir=/etc/squid –libexecdir=/usr/libexec/squid –localstatedir=/var –datadir=/usr/share/squid  –enable-removal-policies=lru,heap –enable-icmp –disable-ident-lookups –enable-cache-digests –enable-delay-pools  –enable-arp-acl –with-pthreads –with-large-files –enable-htcp –enable-carp –enable-follow-x-forwarded-for –enable-snmp –enable-ssl –enable-async-io=32 –enable-linux-netfilter –enable-epoll –disable-poll –with-maxfd=16384 –enable-err-languages=Portuguese –enable-default-err-language=Portuguese

Lembre-se que nessa compilação eu removi o suporte a autenticação, pois não vou utilizar, se deseja utilizar coloque o parâmetro correto.

Continue com o comando:

make

Agora vamos instalar os arquivos com o seguinte comando:

make install

Pronto, seu squid está instalado, agora vamos tratar os detalhes de tuning na configuração do Squid. Não vou explicar todos as linhas do Squid, apenas irei tratar dos parâmetros para otimizá-lo.

Começando pela memória utilizada pelo squid.

A contagem é bem simples. O squid utiliza 10MB de memória RAM para cada 1GB setado no parâmetro do Cache_dir, adicionado ao valor estipulado no cache_mem e por fim adicionando um valor de gordura de 20MB.

Exemplo :

Tenho um cache_dir com 10GB e um cache_mem de 512. Assim terei utilização na memória de 100MB + 512 + 20 = 632MB de utilização. Isso com uma memória de 1GB aguenta perfeitamente, pois uma maquina com o SO otimizada não utiliza mais 50MB de RAM, no fim ainda teríamos sobra para possíveis picos de utilização de outras aplicações.

Agora vamos para políticas de troca do cache:

Com o squid compilado “bonitinho” temos as seguintes políticas de troca:

lru : Squid’s original list based LRU policy

Mantém em cache os arquivos abertos recentemente.

heap GDSF : Greedy-Dual Size Frequency

Otimiza o HIT Ratio de objetos mantendo os arquivos menores e populares no cache, para obter uma melhor chance de acontecer um HIT.

heap LFUDA: Least Frequently Used with Dynamic Aging

Procura manter no cache arquivos populares, independente do tamanho otimizando assim o Byte HIT em detrimento do HIT

heap LRU : LRU policy implemented using a heap

Mantém em cache os arquivos abertos recentemente utilizando-se a política heap

Então pude concluir que:

A melhor política para memória é o GDSF, pois manipula pequenos arquivos. Muito interessante para cenários com muitos usuários.

Para guardar arquivos no disco a melhor é LFUDA, pois tem como função aumentar o bit HIT e assim economizar banda, sem falar na manipulação de grandes arquivos, que todo mundo sabe que é bem mais rápido no disco.

Temos os seguintes parâmetros:

memory_replacement_policy heap GDSF
cache_replacement_policy heap LFUDA

Obs : Aumente o parâmetro maximum_object_size para ganhar vantagem do LFUDA. (100MB para ambiente com atualizações grandes na internet).

Sistema de arquivos do cache:

No parâmetro cache_dir é o local utilizado para especificar o filesystem e informar os detalhes do mesmo.

O melhor sistema de arquivos em minha opinião é o AUFS, que tem uma performance maior do 160 requisições por segundo.

O meu cache_dir ficaria da seguinte forma:

cache_dir AUFS /var/spool/squid 10000 64 256

O primeiro parâmetro depois do local é o tamanho máximo do diretório de cache.

O Segundo parâmetro é o numero máximo de pastas criadas no primeiro nível do cache_dir.

O terceiro parametro é o numero maximo de pastas criadas no segundo nível do cache_dir.

Obs: Lembre-se de criar uma partição separada com o formato ReiserFS e com os parâmetros noatime e notail no fstab.

Arquivos de log

No squid.conf temos os parâmetros ; access.log, store.log e cache.log. Que são amplamente utilizados para enxergar o que está acontecendo com o Proxy, mas em minha opinião o parâmetro que deve estar setado todo tempo é o access.log, já que na maioria dos casos usaremos um software para fazer os relatórios de utilização, os outros dois parâmetros pode setar o caminho /dev/null, pois podem ser alterados novamente para qualquer valor em momento de depuração de problema.

Com menos arquivos para o squid tratar pode ser revertido em escrita no cache e/ou menor utilização de CPU e memória do servidor.

Fechando conexões “meio encerradas”:

O squid mantem algumas conexões que não foram encerradas pelo cliente, mas não estão em uso. Sendo assim o parametro half_closed_clients deve ser setado como off.

Obs : Todos essas dicas foram testadas na distribuição CentOS 5.2 em ambiente virtualizado com 2 GB de RAM dedicados.

Como falei no inicio do texto, estou aberto a críticas e sugestões. Acrescento ao texto com a devida notificação de autoria.

Até o próximo post…

Todas as informações acima podem ser utilizadas com base na licença Creative Commons 3.0.

Para maiores informações, use a Wiki do projeto oficial Squid-Cache.

Agradeço a todos da lista Squid-users que sanaram minhas dúvidas.

Compartilhe!

Comments posted (19)

Tuning no Squid…

Dicas de tuning para squid….

[...] por Rafael Gomes (rafaelgomesΘprojetofedora·org) – referência [...]

nao tem como postar um exemplo do squid.conf, pois nao entendi direito onde( posicao no arquivo) vai essas configuracoes???

Olá Rafael.
Uso o squid na minha rede e após vários ajustes de parâmetros, tive a impressão que o desempenho geral é melhor quando utilizamos um cache “raso”. Lógico que cada caso é um caso. Eu preciso de um cache pequeno e veloz, então inverti o valor dos diretórios:
cache_dir ufs /var/spool/squid 1024 64 8
Corrija-me se estiver errado.
Já favoritei o site. Parabéns!

César,

use outro sistema de cache diferente de ufs, que é BEM mais lento que seus concorrentes. Tente o AUFS ou DISKD, esse primeiro para plataforma Gnu/Linux e o segundo para BSD.

Quanto a quantidade de pasta, nunca mudei do padrão e não ainda não achei documentação orientando isso. Se tiver algo coloca aqui no comentário. :P

Flavio,

O que não entendeu? Seria mais fácil informar a duvida, assim poderei ajudar.
Acredito que seja mais interessante que para dúvidas gerais que entre na lista de discussão Squid Users, se dominar o inglês, em todo caso a lista Squid-br é aconselhavel tb, pois tem ótimos contribuidores também, porém a lista em inglês tem os desenvolvedores do software, ou seja…

Obrigado pela visita pessoal! :D

Continuem opinando, criticando, perguntando e sugestionando.

Olá Rafael,

Estou implementando o squid3 stable8 (lenny) com dansguardian, o problema e que ao usar os dois e acesso fica lento, quando coloco so o squid normaliza, acredito que tenha haver com as blacklist do dansguardian ou a relação entre o squid e o dansguardian já que uso autenticação e funciona da seguinte forma (dans recebe requisição encaminha para o squid redireciona a requisição)… Gostaria se saber se já passou por algo do tipo e como resolveu o problema? vou preparar o squid.conf e lhe mando.

Valeu,
Mauricio Taveira

Olá Maurício!

Também uso o squid em conjunto com o dansguardian na empresa onde trabalho e já li comentários em alguns sobre essa lentidão da qual falou. Não é pra ser nada tão perceptível, mas realmente o acesso à web com o dansguardian/squid é mais lento que fazendo uso apenas do squid, uma vez que o dansguardian faz uma filtragem com base em todo o conteúdo do site (texto da página html). Sobre as blacklists que comentou, você lembrou de “randomizar” as listas? Vários sites recomendar fazer esse procedimento para melhorar a performance do dansguardian. Te recomendo olhar o site abaixo. Aprendi bastante com ele a respeito de desempenho do dansguardian/squi.
http://contentfilter.futuragts.com/wiki/doku.php?id=performance_tuning

Excelente artigo, bastante proveitoso!
Gostaria de saber sua opinião sobre delay pools. Uso QoS CBQ e funciona legal, o problema é que tenho que restringir por domínios, tipo .net.br, .gov.br e no Mandriva não consegui usar o l7 no iptables para essa solução, mas ainda tô um pouco preocupado com a velocidade de acesso e memória, lidando com o delay do squid.

Hélio,

Depende de como está fazendo seu QoS a nível mais baixo. Veja que a camada de Aplicação (nesse caso do Squid) será submetida a esse QoS, pois de acordo com o modelo de camada OSI e TCP/IP as camadas agem sem intervenções entre camadas, apenas comunicação de transferência do datagrama.

O Delay Pool do Squid funcionará com mais algumas regras de controle de tráfego. Funciona a contento pelo que tenho conhecimento, porém nunca usei em larga escala. Nos informe os seus resultados, posso até mesmo escrever um post sobre seu desafio e como foi resolvido.

olha só, não sei se aq é o lugar mais próprio para postar esta dúvida, mas la vai:

o cbq funciona legal…. mas tenho problema com domínos que precisariam ser resolvidos por dns. então tentei utilizar o squid delay pools, mas não funciona, não limita. Acho que é pq minha rede tem máscara complexa (23). já usei as três classes, mas ouvi falar de uma class 4 que não testei. Os tutoriais da net são muito superficiais. Se alguém tiver alguma idéia…

Para estas alterações fucionarem é necessário apagar e recriar o cache?

Wellington,

Isso mesmo, pois seu cache provavelmente estará configurado de forma diferente.

[...] Squid"… algo assim vc verá vários sites, posts, tutoriais… esse é um exemplo Techfree Aqui no Under mesmo houve muita discussão sobre uma boa conf do squid, os mais experientes sempre [...]

Estou usando as configurações citadas no post tudo funcionando inclusive o delay_pools para limitar sites de videos e downloads. O problema é que o squid salva muita coisa na memoria TCP_MEM_HIT o que causa lentidão quando a memoria esta cheia. (aproximadamente 2 dias de uso 30 pcs)
o servidor tem 2gb de RAM
o cache_mem esta em 512 e o cache 17 GB
Alguem ja teve o mesmo problema? a solução temporaria que encontrei foi adicionar o restart do squid no crontab diariamente.

Resolvi o problema era a duplicação de regras do delay_pools
Ex: tinha uma regra para limitar downloads por extensão e outra para sites tipos windows update mozilla updates etc… e quando faziam algum download nesses sites o squid entrava em um loop doido enchendo a memoria rapidamente.
Agora ta funcionando blz

Olá … tenho dois squid rodando independente um 3.0.25 e um 3.0.10 este ultimo é veloz e responde rápido. O 3.0.25 as vezes parece dar gargalo (é necessário as vezes clicar na URL para a página aparecer). Uma das diferenças é que o 3.0.25 é uma VM. Poderia mudar o cache para AUFS em vez de UFS (obs: nao criei uma partição para o cache, está tudo no / na VM). Isso poderia melhorar um pouco ?

Grato

[...] já escrevi um post sobre tunning do Squid, talvez esteja um pouco velho, mas acredito que ainda sirva pra [...]

The absolute best way to truly get rid of acne is through a natural, healthy, and happy lifestyle.
Jojoba treatment can get rid of acne pimples, eliminate the eruption of acne and
clear impurities. I have been using jojoba oil for months and love the stuff.

Hence, when most other industries were reeling under the heat of recession and economic downturn, the oil and gas industry managed to retain most of its employees.
Some people might think you would be crazy to use an oil on
oily skin to fight any signs of acne, however Argan oil is a nut oil and very light on the skin so
much so that you will help your condition become much better than it already it.

It can be be your once daily moisturizer, just massage a small amount onto your face or problem
areas.

Write a comment