Skip to main content

Instalar redis / phpredis con control de estado en cPanel

Introducción

Redis es para mi una de las mejores soluciones básicas para el caché de aplicaciones y sobre todo para la gestión de colas es Redis. Es perfecto para Wordpress, Prestashop, Laravel, Symfony, e imprescindible para Magento.

En este doc te explico en pocos pasos cómo instalar Redis para tus aplicaciones web en un entorno de cPanel CentOs.

Instalación redis en CentOs (cPanel)

Debemos instalar epel, y al ser un sistema con el intrusivo panel de control cPanel deberemos deshabilitar el repositorio, so pena de tener problemas en el futuro.

Cuando nos pregunte pecl por las opciones es recomendable usar igbinary y la compresión lzf

# yum install epel-release
# grep -q '^enabled' /etc/yum.repos.d/epel.repo && sed -i 's/^enabled.*/enabled=0/' /etc/yum.repos.d/epel.repo || echo 'enable=0' >> /etc/yum.repos.d/epel.repo
# yum install --enablerepo=epel redis
# systemctl enable redis
# systemctl start redis
# /opt/cpanel/ea-php80/root/usr/bin/pecl install igbinary igbinary-devel redis # ea-php80 para php 8.0, Deberás repetir para cada versión php instalada
/opt/cpanel/ea-php80/root/usr/bin/pecl  install igbinary igbinary-devel redis 
Ignoring installed package pecl/igbinary
Ignoring installed package pecl/igbinary
WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update
downloading redis-5.3.4.tgz ...
Starting to download redis-5.3.4.tgz (268,154 bytes)
........................................................done: 268,154 bytes
29 source files, building
running: phpize
Configuring for:
PHP Api Version:         20200930
Zend Module Api No:      20200930
Zend Extension Api No:   420200930
enable igbinary serializer support? [no] : yes
enable lzf compression support? [no] : yes
enable zstd compression support? [no] : no

Script de control de estado

Como norma general, Redis en un entorno fuerte con memoria abundante y de calidad (ECC) no suele tener ningún problema. En caso de no estar trabajando en un entorno HA (High Availability) mediante un cluster de redis, es más que bueno y necesario tener un monitor que controle la salud de nuestro servicio.

#!/bin/sh

active=$(redis-cli ping)  # redis sin contraseña
# Si usamos protección por contraseña
#  active=$(redis-cli -a +S62tFFXqTXhAQ1Y2X1PxUQNJASHSHSHFu4aS5iBZiCQfCz4wp6hrpCc62vNLlKXE3LPsJxBIgM6 ping)
hostname=$(hostname -f)

if [ "$active" != "PONG" ]; then
        echo "Redis ${hostname} down" | mail -s "Redis ${hostname} down"  monitor@myemail.com
        systemctl restart redis
fi

Damos permisos de ejecucion 700 y añadimos al crontab de root

* * * * *  /usr/local/bin/redischeck.sh  > /dev/null 2>&1

Tips sobre la configuración

WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128

Editar el fichero chmod +x /etc/rc.d/rc.local

# Añadir
sysctl -w net.core.somaxconn=65535

Ejecutar

chmod +x /etc/rc.d/rc.local

WARNING overcommit_memory is set to 0!

nano /etc/sysctl.conf
vm.overcommit_memory = 1

WARNING you have Transparent Huge Pages (THP) support enabled in your kernel

echo never > /sys/kernel/mm/transparent_hugepage/enabled

Editar tambien /etc/rc.d/rc.local

echo never > /sys/kernel/mm/transparent_hugepage/enabled

Redis 6.2 con control ACL

Editado 2023-05-10

Laversion actual ya no es la 6.2. He optado por ir a la última estable.

yum install systemd-devel
cd /usr/local/src
# https://redis.io/download
wget https://download.redis.io/redis-stable.tar.gz
tar xvfz redis-stable.tar.gz
cd redis-stable
make 
make test
make install
groupadd redis
adduser --system -g redis --no-create-home redis
mkdir -p /var/lib/redis
chown redis: /var/lib/redis
chmod 770 /var/lib/redis
mkdir /etc/redis
cp /usr/local/src/redis-stable/redis.conf /etc/redis/
mkdir /var/run/redis
chown redis: /var/run/redis

Editamos el ficheor de configruacion

supervised systemd 
unixsocket /var/run/redis/redis.sock
unixsocketperm 770
port 0

Creamos el fichero system /etc/systemd/system/redis.service

[Unit]
Description=Redis Data Store
After=network.target
[Service]
User=redis
Group=redis
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always
[Install]
WantedBy=multi-user.target

Activamos y arrancamos

systemctl enable redis
systemctl start redis
systemctl status redis

Notas sobre Ubuntu

Los cambios a realziar para la configuracion del sistema se realizan en el fichero /etc/sysctl.conf

Aviso

Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris

Si necesitas soporte profesional puedes contratar con Castris soporte profesional.