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
proxycreado 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_memesté en MB -
maximum_object_sizeesté en KB - Ejemplo:
cache_mem 4096 MBymaximum_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.



Post a Comment