Redis: Instalación Debian 13

  • Ver la versión disponible
# Ver qué versión de Redis está disponible en Debian 13
apt-cache show redis-server | grep Version
  • Instalamos
apt install redis-server -y
  • Versión
redis-server --version
systemctl status redis-server
  • Copiamos el archivo de configuración
cp /etc/redis/redis.conf /etc/redis/redis.conf.backup
  • Le agregamos
cat > /etc/redis/redis.conf << 'EOF'
# Red - escuchar en todas las interfaces
bind 0.0.0.0
port 6379
protected-mode no

# Memoria - 20GB de los 24GB disponibles
maxmemory 20gb
maxmemory-policy allkeys-lru

# Persistencia desactivada - sesiones y caché son regenerables
save ""
appendonly no

# Conexiones
tcp-backlog 511
timeout 300
tcp-keepalive 300
maxclients 2000

# Rendimiento
hz 20
dynamic-hz yes
lazyfree-lazy-eviction yes
lazyfree-lazy-expire yes
lazyfree-lazy-server-del yes

# Logs
loglevel notice
logfile /var/log/redis/redis-server.log

# Base de datos
databases 4
EOF
  • Reiniciamos y probamos
systemctl restart redis-server
redis-cli ping

En el cliente: nodo01

apt install php8.3-redis -y
  • Verificar que la extensión cargó:
php8.3 -m | grep redis
  • Respuesta
redis
  • Abrimos el archivo de configuración de moodle
nano /var/www/html/config.php
  • Y antes de la linea
require_once(__DIR__ . '/lib/setup.php');
  • Agregamos
// Sesiones en Redis
$CFG->session_handler_class = '\core\session\redis';
$CFG->session_redis_host = '10.0.3.131';
$CFG->session_redis_port = 6379;
$CFG->session_redis_database = 0;
$CFG->session_redis_auth = '';
$CFG->session_redis_prefix = 'mdl_sess_';
$CFG->session_redis_acquire_lock_timeout = 0;
$CFG->session_redis_lock_expire = 7200;
$CFG->session_redis_lock_wait = 500;
  • Instalamos
apt install redis-tools -y
  • Vamos a apasdar la cache del NFS a directorio local
  • Creamos
# Crear directorios locales para caché
mkdir -p /var/moodlecache/cache
mkdir -p /var/moodlecache/localcache
mkdir -p /var/moodlecache/temp
chown -R www-data:www-data /var/moodlecache
chmod -R 755 /var/moodlecache
  • Abrimos el archivo
nano /var/www/html/config.php
  • Agregamos
// Caché local en disco local del nodo
$CFG->localcachedir = '/var/moodlecache/localcache';
$CFG->tempdir = '/var/moodlecache/temp';
$CFG->cachedir = '/var/moodlecache/cache';
  • Guardar y verificar:
ls -la /var/moodlecache/
grep "localcachedir\|tempdir" /var/www/html/config.php
  • Reiniciamos
systemctl restart php8.3-fpm

Analisis

  • para ver al load avegrage
uptime && ps aux | awk '$8=="D"' | wc -l
  • Inicio
  • Final

  • Ver nodos esperando NFS
ps aux | awk '$8=="D"' | awk '{print $2}' | while read pid; do
  cat /proc/$pid/wchan 2>/dev/null
done | sort | uniq -c | sort -rn
  • Inicio
  • Ver cantidad de conexiones
grep "$(LANG=C date '+%d/%b/%Y:%H:%M')" /var/log/apache2/access.log | wc -l
  • Inicio
  • Ver sessiones en redis bloqueadas
redis-cli -h 10.0.3.131 --scan --pattern "mdl_sess_*lock*" | xargs redis-cli -h 10.0.3.131

Cron para limpiar cache

  • Verificamos si existe algunb cron de moodle
crontab -l -u www-data

grep -r "moodle\|php.*admin" /etc/cron* 2>/dev/null
  • No existe
  • Creamos el cron
crontab -u www-data -e
  • Agregamos
* * * * * /usr/bin/php8.3 /var/www/html/admin/cli/cron.php > /dev/null 2>&1
  • Creamos un cron que limpie la cache local cada semana
cat > /etc/cron.weekly/moodle-cache-cleanup << 'EOF'
#!/bin/bash
find /var/moodlecache/cache -type f -atime +7 -delete
find /var/moodlecache/localcache -type f -atime +7 -delete
find /var/moodlecache/temp -type f -atime +1 -delete
EOF
  • Le damos permisos
chmod +x /etc/cron.weekly/moodle-cache-cleanup
  • Verificar
crontab -l -u www-data
ls -la /etc/cron.weekly/moodle-cache-cleanup
  • Es importante verificar que el tamaño de la cache no crece semana a semana y se limpia cada semana para esto
du -sh /var/moodlecache/