Nesta dica pretendo ajudar todos os usuários de
GNU/Linux que fazem uso do
Squid como servidor proxy.
Não serão abordadas configurações de regras de Squid, apenas iremos tratar algumas configurações necessárias para dar maior agilidade ao Squid, para aquelas pessoas que, assim como eu, tiveram problemas ao ter muitos usuários conectados ao proxy e a Internet tornar-se lenta.
Cenário
No cenário este "tunning" foi um servidor com 4GB de RAM, sendo 3 GB dedicados para o Squid. Dois discos SCSI de 10k com um processador Xeon 2.4 rodando
Debian 6.
O mesmo está atendendo em horário de pico, em média de 1000 usuários simultaneamente, efetuando autenticações via
winbind em um domínio NT (Active Directory) no Windows Server Enterprise 2008.
Modificando algumas configurações do kernel
Primeiramente vamos alterar alguns valores do kernel padrão, reduzindo o tempo de limpeza da tabela ARP e aumentando o seu tamanho, bem como aumentando o número de conexões simultâneas que o servidor irá atender e reduzir o tempo de espera entre as conexões.
Para isso, vamos alterar o arquivo
sysclt.conf:
# vim /etc/sysctl.conf
E no final do arquivo, adicionar as seguintes linhas:
####### TUNNING PARA SQUID ########
# Reduzir o tempo de limpeza da tabela ARP
# Expandir o seu tamanho
net.ipv4.neigh.default.gc_interval = 15
net.ipv4.neigh.default.gc_thresh1 = 4096
net.ipv4.neigh.default.gc_thresh2 = 8192
net.ipv4.neigh.default.gc_thresh3 = 16384
# Aumento do numero de conexoes simultaneas
# Reducao do tempo de espera entre as conexoes
net.core.somaxconn = 20480
net.core.netdev_max_backlog = 2048
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_max_syn_backlog = 2048
Após adicionar as linhas e salvar o arquivo, é necessário executar o comando "
sysclt -p" para que as alterações sejam importadas pelo kernel.
Modificando os limits de segurança
Uma outra boa prática adotada foi modificar os valores de limits do kernel. Para verificar os limits do seu kernel, basta digitar o comando:
# ulimit -a.
No meu caso, apenas alterei o valor de 'open files', que no padrão era 1024 e passei para 16384.
Para fazer esta alteração, basta digitar o seguinte comando na console:
# ulimit -n 16384
Porém, ao reiniciar o servidor, os valores de 'limits' irão retornar para o padrão. Para que isso não aconteça, edite o arquivo
limits.conf:
# vim /etc/security/limits.conf
No final do arquivo, inclua as seguintes linhas:
#### TUNNING DE LIMITS DE KERNEL #####
root soft nofile 16384
root hard nofile 32768
* soft nofile 16384
* hard nofile 32768
Considerações finais
Modificando configuração padrão do Squid.
Agora vamos alterar o valor padrão de arquivos de descritores abertos pelo Squid. Para isso edite o arquivo
/etc/default/squid.
Neste arquivo tem um valor padrão de 1024, altere para 4096.
Pronto, o seu kernel para uso do Squid está 'tunado'... Uma alteração a gosto, de quem quiser testar, também foi modificar os parâmetros de leitura de cache no "squid.conf".
Percebi uma melhora significativa na velocidade de acesso ao cache ao usar o método
diskd no lugar de
aufs.
Em algumas pesquisas na Internet, encontrei registros em que o diskd consegue fazer até 160 requisições por segundo ao cache no disco, sendo que o aufs, gira em torno de 40 requisições por segundo.
Entendido isso, foi alterado o cache para os seguintes parâmetros:
cache_dir diskd /var/spool/squid 20480 64 256 Q1=64 Q2=72
Se pesquisarem sobre este parâmetro, deverão encontrar muita coisa, então não irei abordar o por quê dos por quês...
Feito estas configurações, recomendo reiniciar o servidor e levantar o Squid para ver as melhoras de performance.
No meu caso, a navegação ficou visivelmente mais rápida.