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.