sexta-feira, 6 de dezembro de 2013

Tunning Squid - Para alto tráfego


Tunning Squid - Para alto tráfego

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 tamanhonet.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 conexoesnet.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.

Nenhum comentário:

Postar um comentário