Header Ads

Cache Híbrido en Squid Proxy

Squid se define como un "caching proxy" (de hecho su nombre real es squid-cache), por tanto todo gira en torno a la "cache" (sin tilde porque es un anglicismo técnico ampliamente aceptado en informática).
Este proxy permite configurar múltiples directorios para la "cache" de manera simultánea, aprovechando las ventajas de diferentes sistemas de almacenamiento. En este post exploraremos dos configuraciones optimizadas que combinan Rock (rápido, optimizado para SSD) y UFS (tradicional, para objetos grandes) para maximizar el rendimiento de tu proxy.
¿Por qué usar cache híbrido?
La estrategia de cache híbrido aprovecha lo mejor de dos mundos:
  • Rock: Extremadamente rápido para objetos pequeños y medianos (imágenes, CSS, JS, HTML)
  • UFS: Eficiente para objetos grandes (videos, descargas, ISOs, actualizaciones)
Esta separación permite que Squid sirva contenido frecuente desde Rock a velocidades SSD, mientras almacena archivos grandes en UFS sin desperdiciar espacio en cache rápido.
Requisitos Mínimos
Hardware
  • RAM mínima: 8 GB (4 GB para Squid + 4 GB para sistema operativo)
  • Espacio en disco: Mínimo 150 GB libres
    • 100 GB para cache Rock
    • 50 GB para cache UFS
  • CPU: 2+ cores recomendados
  • Tipo de disco: SSD recomendado (HDD funciona pero más lento)
Software
  • Ubuntu 20.04+ / Debian 11+
  • Squid 5.0 o superior
  • Usuario proxy creado por el paquete de Squid
Red
  • Servidor dedicado o con recursos compartidos controlados
  • Ancho de banda adecuado para el número de usuarios

Configuración 1: Servidor Compartido (4 GB RAM para Squid)

Ideal para servidores que ejecutan múltiples servicios (Apache, UniFi Controller, DHCP, bases de datos, etc.)
Configuración en /etc/squid/squid.conf:
# ==================================================================
# MEMORIA Y CACHE
# ==================================================================
cache_mem 4096 MB
maximum_object_size_in_memory 8192 KB      # 8 MB
memory_replacement_policy heap LFUDA
cache_replacement_policy heap LFUDA
maximum_object_size 131072 KB              # 128 MB

# ==================================================================
# DIRECTORIOS DE CACHE
# ==================================================================
# Rock: objetos pequeños/medianos (≤ 5 MB)
cache_dir rock /var/spool/squid/rock 102400 max-size=5242880

# UFS: objetos grandes (5 MB - 128 MB)
cache_dir ufs /var/spool/squid/ufs 50000 16 256 min-size=5242881

# ==================================================================
# OPTIMIZACIONES
# ==================================================================
ipcache_size 2048
fqdncache_size 4096
memory_pools_limit 32 MB
max_filedescriptors 32768
Script de instalación:
#!/bin/bash

# Crear directorios de cache
mkdir -p /var/spool/squid/{rock,ufs} 2>/dev/null
chown -R proxy:proxy /var/spool/squid
chmod -R 700 /var/spool/squid

# Inicializar caches
squid -z

# Habilitar e iniciar servicio
systemctl enable squid 2>/dev/null
systemctl start squid

echo "Squid cache híbrido configurado correctamente"

Configuración 2: Servidor Dedicado (16 GB RAM para Squid)

Ideal para servidores dedicados exclusivamente a proxy o con recursos abundantes.
Configuración en /etc/squid/squid.conf:
# ==================================================================
# MEMORIA Y CACHE
# ==================================================================
cache_mem 16384 MB                         # 16 GB
maximum_object_size_in_memory 8192 KB      # 8 MB
memory_replacement_policy heap LFUDA
cache_replacement_policy heap LFUDA
maximum_object_size 262144 KB              # 256 MB

# ==================================================================
# DIRECTORIOS DE CACHE
# ==================================================================
# Rock: objetos pequeños/medianos (≤ 5 MB)
cache_dir rock /var/spool/squid/rock 102400 max-size=5242880

# UFS: objetos grandes (5 MB - 256 MB)
cache_dir ufs /var/spool/squid/ufs 50000 16 256 min-size=5242881

# ==================================================================
# OPTIMIZACIONES
# ==================================================================
ipcache_size 4096
fqdncache_size 8192
memory_pools_limit 64 MB
max_filedescriptors 65536

# Opcional: para servidores con 8+ cores
# workers 4
Script de instalación:
#!/bin/bash

# Crear directorios de cache
mkdir -p /var/spool/squid/{rock,ufs} 2>/dev/null
chown -R proxy:proxy /var/spool/squid
chmod -R 700 /var/spool/squid

# Inicializar caches
squid -z

# Habilitar e iniciar servicio
systemctl enable squid 2>/dev/null
systemctl start squid

echo "Squid cache híbrido de alto rendimiento configurado"

Parámetros Explicados

cache_mem
Memoria RAM dedicada para cachear objetos en memoria. No es el total de RAM que Squid usará (habrá overhead adicional).
maximum_object_size_in_memory
Tamaño máximo de un objeto individual para almacenarse en RAM. Objetos mayores van directo a disco.
maximum_object_size
Tamaño máximo global de objetos a cachear. Objetos mayores no se cachean.
cache_dir rock
  • 102400: ~100 GB de espacio
  • max-size=5242880: Objetos hasta 5 MB (5,242,880 bytes)
cache_dir ufs
  • 50000: ~50 GB de espacio
  • 16: Subdirectorios de primer nivel (00-0F en hexadecimal)
  • 256: Subdirectorios de segundo nivel
  • min-size=5242881: Solo objetos mayores a 5 MB
Algoritmo LFUDA
Least Frequently Used with Dynamic Aging - mantiene objetos frecuentemente accedidos, ideal para proxies con patrones de uso repetitivos.

Verificación de Funcionamiento

1. Verificar estructura de directorios
# Verificar que existan ambos directorios
ls -ld /var/spool/squid/rock /var/spool/squid/ufs

# UFS debe tener subdirectorios 00-0F
ls /var/spool/squid/ufs/
Salida esperada:
drwx------ 2 proxy proxy 4096 feb 9 12:57 rock
drwx------ 18 proxy proxy 4096 feb 9 12:57 ufs

00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F
2. Verificar que Squid reconoce ambas capas de cache
Funcionamiento del cache híbrido en un entorno en producción Ubuntu 24.04
squidclient -p 3128 mgr:storedir
Salida esperada:
Store Directory #0 (rock): /var/spool/squid/rock
FS Block Size 1024 Bytes
Maximum Size: 104857600 KB
Current Size: 83920.00 KB 0.08%

Store Directory #1 (ufs): /var/spool/squid/ufs
FS Block Size 4096 Bytes
First level subdirectories: 16
Second level subdirectories: 256
Maximum Size: 51200000 KB
Current Size: 32736.00 KB
3. Verificar espacio usado
sudo du -sh /var/spool/squid/rock /var/spool/squid/ufs
Ejemplo de salida:
1.4G    /var/spool/squid/rock
49M     /var/spool/squid/ufs
4. Verificar uso de RAM real
ps aux | grep '[s]quid' | awk '{sum+=$6} END {print "RAM Real: " sum/1024 " MB"}'
Nota importante: El comando systemctl status squid | grep Memory puede mostrar valores altos (40+ GB) que representan memoria virtual, no RAM física real. Usa el comando ps anterior para ver el consumo real.
5. Monitorear en tiempo real
# Ver crecimiento de ambos caches
watch -n 30 "sudo du -sh /var/spool/squid/rock /var/spool/squid/ufs"
6. Script completo de verificación
#!/bin/bash

echo "═══════════════════════════════════════════════════"
echo "  VERIFICACIÓN DE CACHES SQUID"
echo "═══════════════════════════════════════════════════"
echo ""

echo "1. Configuración activa:"
grep "cache_dir" /etc/squid/squid.conf | grep -v "^#"
echo ""

echo "2. Espacio usado:"
sudo du -sh /var/spool/squid/rock /var/spool/squid/ufs
echo ""

echo "3. RAM real usada:"
ps aux | grep '[s]quid' | awk '{sum+=$6} END {print "Total: " sum/1024 " MB"}'
echo ""

echo "4. Store directories reconocidos:"
squidclient -p 3128 mgr:storedir | grep -E "Store Directory|Maximum Size|Current Size"
echo ""

echo "═══════════════════════════════════════════════════"

Interpretación de Resultados

Distribución esperada de objetos
  • Rock tendrá MÁS objetos (miles o millones): contenido web típico (HTML, CSS, JS, imágenes)
  • UFS tendrá MENOS objetos (decenas o cientos): videos, descargas grandes, actualizaciones
Ejemplo real:
Rock:  1,699 objetos →  82 MB usado
UFS:      57 objetos →  32 MB usado
RAM:   2,203 objetos → 112 MB usado
Crecimiento normal
Con uso regular, después de días/semanas:
Configuración 4GB:
  • Rock: 50-80 GB, millones de objetos
  • UFS: 10-30 GB, cientos/miles de objetos
  • RAM: 2-3 GB en uso real
Configuración 16GB:
  • Rock: 80-100 GB, millones de objetos
  • UFS: 30-50 GB, miles de objetos
  • RAM: 8-12 GB en uso real

Solución de Problemas Comunes

Error: "WARNING: disk-cache maximum object size..."
Causa: maximum_object_size mayor que cache_mem
Solución: Asegúrate de que:
  • cache_mem esté en MB
  • maximum_object_size esté en KB
  • Ejemplo: cache_mem 4096 MB y maximum_object_size 131072 KB
Solo aparece un cache_dir en logs
Verificar:
# Ver configuración
grep "cache_dir" /etc/squid/squid.conf | grep -v "^#"

# Reinicializar
sudo systemctl stop squid
sudo rm -rf /var/spool/squid/{rock,ufs}/*
sudo squid -z
sudo systemctl start squid
Uso excesivo de RAM (systemd muestra 40+ GB)
No es un problema real. Systemd muestra memoria virtual. Verificar RAM real:
ps aux | grep '[s]quid' | awk '{sum+=$6} END {print sum/1024 " MB"}'
Si el resultado es <2 GB para configuración de 4GB o <10 GB para 16GB, está funcionando correctamente.

Consideraciones de Rendimiento

Ventajas del cache híbrido
  • Velocidad: Rock sirve contenido frecuente a velocidad SSD
  • Eficiencia: UFS maneja archivos grandes sin desperdiciar espacio rápido
  • Escalabilidad: Fácil agregar más espacio a cualquier cache
  • Flexibilidad: Cada cache puede estar en discos diferentes
Cuándo usar cada configuración
Configuración 4GB si:
  • Servidor con múltiples servicios
  • RAM limitada (8-32 GB total)
  • 50-200 usuarios concurrentes
  • Presupuesto ajustado
Configuración 16GB si:
  • Servidor dedicado a proxy
  • RAM abundante (64+ GB)
  • 200-1000+ usuarios
  • Máximo rendimiento requerido

Conclusión

La configuración híbrida Rock + UFS ofrece el mejor balance entre velocidad y capacidad para Squid. Con la configuración adecuada según tus recursos, puedes lograr:
  • Hit rates del 30-60% en redes típicas
  • Reducción significativa de ancho de banda
  • Tiempos de respuesta más rápidos
  • Mejor experiencia de usuario
Recuerda monitorear regularmente el uso de cache y ajustar los parámetros según los patrones de uso de tu red.

Con la tecnología de Blogger.