terça-feira, 5 de julho de 2011

Tunning Squid. Para alto tráfego!





Neste rápido post pretendo ajudar todos os usuários de Linux que fazem uso do squid como servidor Proxy. 
Não será abordado 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 se tornar lenta.


No cenário este "tunning" foi feito em um servidor com apenas 1.5GB de ram, e dois discos SCSI de 10k com um processador Pentium III 850MHZ rodando DEBIAN 6. O mesmo esta atendendo em horário de pico em média de 800 usuários simultaneamente.


Então mão na massa:


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, assim bem como aumentando o número de conexões simultâneas que o servidor ira 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 linhas abaixo:



######################### 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 se faz 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 se 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 essa 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 default, para que isso não aconteça, faça o seguinte:

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
#######################################################################

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.

Mais alguns detalhes:

Pronto, o seu kernel para uso do squid esta 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 porque dos porquês...

Feito essas configurações, recomendo reiniciar o servidor e levantar o squid para ver as melhoras de performance. No meu caso ficou visivelmente mais rápida a navegação. 

Espero ter ajudado...

Rafael Mendes

Qualquer dúvida deixem suas perguntas.

Nenhum comentário: