Aproveitando o questionamento do Felipe, e por perceber que tem sido uma dúvida recorrente, resolvi compartilhar uma dica de como configurar o Squid para trabalhar com múltiplas áreas de spool (cache em disco).

Para alcançar diferentes níveis de conhecimento, demonstrarei desde o particionamento – o processo é bastante simples.

 

1. Identifique, particione e formate os discos disponíveis no SO (adicionais para spool):

– Comece identificando os discos em questão (ATENÇÃO, serão formatados posteriormente)

root@squidproxy:~# fdisk -l 

Disk /dev/sdb: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
...

Veremos uma saída similar a anterior, caso existam dois discos adicionais, identificados como sdb e sdc (por exemplo).

 

– Em seguida, particione o disco com o comando cfdisk

root@squidproxy:~# cfdisk /dev/sdb 
root@squidproxy:~# cfdisk /dev/sdc 

É evidente que o particionamento pode ser feito por outras ferramentas, como fdisk, cfdisk ou gparted, por exemplo – optei pelo cfdisk devido a simplicidade.”

O cfdisk permite manipular as partições de forma rápida e bastante intuitiva – neste caso (com discos dedicados para spool), basta criar uma nova partição (primária), alocando o espaço total.
REPITA O PROCESSO PARA CADA DISCO.

 

– Formatando as partições

root@squidproxy:~# fsck.ext4 /dev/sdb1
root@squidproxy:~# fsck.ext4 /dev/sdc1

Se você não estiver familiarizado com particionamento no Linux, recomendo acessar:
http://www.ubuntuiniciantes.com.br/2016/08/formatar-e-particionar-hd-no-linux.html

 

2. Defina e configure os pontos de montagem sobre /var/spool/squid:

– Ajustes manuais para definição da estrutura de diretórios

root@squidproxy:~# mkdir -p /var/spool/squid/{disk1,disk2}

root@squidproxy:~# mount /dev/sdb1 /var/spool/squid/disk1
root@squidproxy:~# mount /dev/sdc1 /var/spool/squid/disk2

# Opcional - caso queira otimizar a utilização de disco (por tamanho de objeto)
root@squidproxy:~# mkdir -p /var/spool/squid/disk1/{cache1,cache2}
root@squidproxy:~# mkdir -p /var/spool/squid/disk2/{cache1,cache2}

root@squidproxy:~# chown -R proxy.proxy /var/spool/squid

 “Cada disco será montado em /var/spool/squid/disk[N]. Já os subdiretórios cache1 e cache2 serão utilizados para armazenar os objetos cacheados pelo Squid (por disco). Esta subdivisão em cache1 e cache2 é opcional – auxilia apenas na melhor distribuição dos objetos (por tamanho).

 

– Fixando a configuração para montagem automática no boot (em /etc/fstab)

vim /etc/fstab

  /dev/sdb1 /var/spool/squid/disk1 ext4 defaults,noatime 0 2
  /dev/sdc1 /var/spool/squid/disk2 ext4 defaults,noatime 0 2

Edite o arquivo /etc/fstab e inclua as linhas anteriores no final do arquivo. É possível trabalhar com a notação UUID ao invés do caminho fixo (como /dev/sd[x][n]).

 

– Uma maneira de testar se as entradas do fstab estão corretas é simulando com chamadas via comando umount e mount:

umount /var/spool/squid/disk1
umount /var/spool/squid/disk2

mount /var/spool/squid/disk1
mount /var/spool/squid/disk2

Logo após liste o conteúdo dos diretórios disk1 e disk2. E, com o comando mount (sem opções), também confirme se os dispositivos estão realmente montados.

 

3. Para finalizar, basta configurar, através da opção cache_dir, a área de disco utilizada pelo Squid (normalmente, em /etc/squid/squid.conf):

Finalizarei com uma demonstração um pouco mais avançada que oferecerá maior performance. Se houver alguma dúvida recomendo a leitura da PARTE 2 do tutorial de instalação e configuração que escrevi anteriormente.

## SMP support
workers 2
cpu_affinity_map process_numbers=1,2 cores=1,2

memory_cache_shared on

if ${process_number} = 1
   cache_dir ufs /var/spool/squid/disk1/cache1 7000 32 256 min-size=64000 max-size=1024000
   cache_dir ufs /var/spool/squid/disk1/cache2 29000 16 256 min-size=1024001
endif

if ${process_number} = 2
   cache_dir ufs /var/spool/squid/disk2/cache1 7000 32 256 min-size=64000 max-size=1024000
   cache_dir ufs /var/spool/squid/disk2/cache2 29000 16 256 min-size=1024001
endif

Repare que simulei uma configuração com processamento paralelo, permitindo que o Squid trabalhe com dois processos, dedicando cada processo para acessar um disco específico – processo 1 para disk1 e processo 2 para disk2. Também fixei o processo ao núcleo específico mapeando com a opção cpu_affinity_map.

Caso prefira algo mais simples, é possível definir um único cache_dir por disco e sem o suporte SMP, por exemplo (29 Gb):

cache_dir ufs /var/spool/squid/disk1 29000
cache_dir ufs /var/spool/squid/disk2 29000

Com mais de um disco físico, a utilização do filesystem aufs pode resultar em performance superior, desde que seja uma única referência (diretório) por disco. Ou seja, neste caso, não é indicado trabalhar com os subdiretórios cache1 e cache2 com o aufs porque ocorreria concorrência de acesso simulâneo e assíncrono para o mesmo disco.

Espero que a dica seja útil! 😉