installation - Configurando Redis en Webfaction
(3)
¿Cuáles son los pasos necesarios para configurar la base de datos de Redis en la cuenta de alojamiento compartido de Webfaction ?
Introducción
Debido a las restricciones de entorno especiales de los servidores de Webfaction, las instrucciones de instalación no son tan sencillas como serían. Sin embargo, al final tendrá un servidor Redis completamente funcional que se mantendrá activo incluso después de un reinicio. Personalmente instalé Redis mediante el siguiente procedimiento hace aproximadamente medio año y se ha estado ejecutando sin problemas desde entonces. Sin embargo, una pequeña palabra de advertencia, medio año no es mucho tiempo, especialmente porque el servidor no ha estado bajo un uso intensivo.
Las instrucciones constan de cinco partes: instalación, prueba, inicio del servidor, administración del servidor y mantenimiento del servidor en ejecución.
Instalación
Ingresa a tu shell de Webfaction
Descarga la última versión de Redis desde el sitio de descarga de Redis .
> mkdir -p ~/src/
> cd ~/src/
> wget http://download.redis.io/releases/redis-2.6.16.tar.gz
> tar -xzf redis-2.6.16.tar.gz
> cd redis-2.6.16/
Antes de la marca, vea es su servidor Linux 32 o 64 bit. El script de instalación no maneja bien los entornos de 32 bits, al menos en las máquinas CentOS 5 de Webfaction . El comando para bits es uname -m
. Si Linux es de 32 bits, el resultado será i686, si de 64 bits entonces x86_64. Vea esta answer para más detalles.
> uname -m
i686
Si su servidor es de 64 bits (x86_64), simplemente haga.
> make
Pero si su servidor es de 32 bits (i686), entonces debe hacer pequeñas cosas adicionales. Hay un comando make 32bit
pero produce un error. Edite una línea en el script de instalación para hacer make 32bit
funcione.
> nano ~/src/redis-2.6.16/src/Makefile
Cambia la línea 214 de este
$(MAKE) CFLAGS="-m32" LDFLAGS="-m32"
a esto
$(MAKE) CFLAGS="-m32 -march=i686" LDFLAGS="-m32 -march=i686"
y guarda. A continuación, ejecute la marca con la bandera de 32 bits.
> cd ~/src/redis-2.6.16/ ## Note the dir, no trailing src/
> make 32bit
Los ejecutables se crearon en el directorio ~/src/redis-2.6.16/src/
. Los ejecutables incluyen redis-cli
, redis-server
, redis-benchmark
y redis-sentinel
.
Pruebas (opcional)
Como lo sugiere el resultado de la instalación, sería bueno asegurarse de que todo funcione como se espera al ejecutar las pruebas.
Hint: To run ''make test'' is a good idea ;)
Desafortunadamente, las pruebas requieren que se instale tlc8.6.0, que no es el predeterminado por lo menos en la máquina web223. Así que debes instalarlo primero, desde la fuente. Ver notas de instalación Tcl / Tk y compilación de notas .
> cd ~/src/
> wget http://prdownloads.sourceforge.net/tcl/tcl8.6.0-src.tar.gz
> tar -xzf tcl8.6.0-src.tar.gz
> cd tcl8.6.0-src/unix/
> ./configure --prefix=$HOME
> make
> make test # Optional, see notes below
> make install
La prueba de Tcl con make test
tomará tiempo y también fallará debido a las restricciones del entorno de WebFaction. Te sugiero que te saltes esto.
Ahora que tenemos Tlc instalado podemos ejecutar pruebas de Redis. Las pruebas tomarán mucho tiempo y también usan temporalmente una cantidad bastante grande de memoria.
> cd ~/src/redis-2.6.16/
> make test
Después de las pruebas estás listo para continuar.
Iniciando el servidor
Primero, cree una aplicación personalizada a través del Panel de control de Webfaction (Aplicación personalizada (escucha en el puerto)). Nómbrelo , por ejemplo, fooredis . Tenga en cuenta que no tiene que crear un dominio o sitio web para la aplicación si Redis se usa solo localmente, es decir, desde el mismo host.
Segundo, haga una nota sobre el número de puerto de socket que se dio para la aplicación. Sea el ejemplo 23015 .
Copia los ejecutables compilados previamente al directorio de la aplicación. Puede elegir copiar todos o solo los que necesite.
> cd ~/webapps/fooredis/
> cp ~/src/redis-2.6.16/src/redis-server .
> cp ~/src/redis-2.6.16/src/redis-cli .
Copie también el archivo de configuración de muestra. Pronto modificarás eso.
> cp ~/src/redis-2.6.16/redis.conf .
Ahora Redis ya es ejecutable. Hay problemas de pareja sin embargo. Primero, el puerto predeterminado de Redis 6379 podría estar ya en uso. En segundo lugar, incluso si el puerto estaba libre, sí, podría iniciar el servidor, pero deja de ejecutarse en el mismo momento en que sale del shell. Para el primero, se debe editar el redis.conf y para el segundo, se necesita un demonio que también se resuelva al editar el redis.conf.
Redis es capaz de ejecutarse en modo daemon . Para eso necesita configurar un lugar donde el demonio almacena sus ID de proceso, PID. Por lo general, los pidfiles se almacenan en / var / run / pero debido a las restricciones del entorno, debe seleccionar un lugar para ellos en su directorio de inicio. Debido a una razón que se explica más adelante en la parte Administración del servidor, una buena opción es colocar el archivo pid en el mismo directorio que los ejecutables. No tiene que crear el archivo usted mismo, Redis lo crea automáticamente.
Ahora abre el redis.conf para editar.
> cd ~/webapps/fooredis/
> nano redis.conf
Cambie las configuraciones de la siguiente manera.
-
daemonize no
->daemonize yes
-
pidfile /var/run/redis.pid
->pidfile /home/foouser/webapps/fooredis/redis.pid
-
port 6379
->port 23015
Ahora, finalmente, inicie el servidor de Redis. Especifique el archivo conf para que Redis escuche el puerto correcto y se ejecute como un demonio.
> cd ~/webapps/fooredis/
> ./redis-server redis.conf
>
Véalo corriendo.
> cd ~/webapps/fooredis/
> ./redis-cli -p 23015
redis 127.0.0.1:23015> SET myfeeling Phew.
OK
redis 127.0.0.1:23015> GET myfeeling
"Phew."
redis 127.0.0.1:23015> (ctrl-d)
>
Detén el servidor si quieres.
> ps -u $USER -o pid,command | grep redis
718 grep redis
10735 ./redis-server redis.conf
> kill 10735
o
> cat redis.pid | xargs kill
Gestionando el servidor
Para facilitar su uso y como trabajo de preparación para la siguiente parte, cree un script que ayude a abrir el cliente y comenzar, reiniciar y detener el servidor. Una solución fácil es escribir un makefile. Al escribir un makefile, recuerde usar pestañas en lugar de espacios.
> cd ~/webapps/fooredis/
> nano Makefile
# Redis Makefile
client cli:
./redis-cli -p 23015
start restart:
./redis-server redis.conf
stop:
cat redis.pid | xargs kill
Las reglas son bastante autoexplicativas. Lo especial de la segunda regla es que, mientras está en modo daemon, llamar al ./redis-server no crea un nuevo proceso si ya hay uno en ejecución.
La tercera regla tiene cierta sabiduría tranquila. Si redis.pid no se almacenó en el directorio de fooredis pero, por ejemplo, en /var/run/redis.pid, no sería tan fácil detener el servidor. Esto es especialmente cierto si ejecuta varias instancias de Redis simultáneamente.
Para ejecutar una regla:
> make start
Mantener el servidor en funcionamiento
Ahora tiene una instancia de Redis ejecutándose en modo daemon que le permite salir del shell sin detenerlo. Esto todavía no es suficiente. ¿Qué pasa si el proceso se bloquea? ¿Qué pasa si la máquina del servidor se reinicia? Para cubrir estos tienes que crear dos cronjobs .
> export EDITOR=nano
> crontab -e
Agrega las siguientes dos líneas y guarda.
*/5 * * * * make -C ~/webapps/fooredis/ -f ~/webapps/fooredis/Makefile start
@reboot make -C ~/webapps/fooredis/ -f ~/webapps/fooredis/Makefile start
El primero asegura que cada cinco minutos que se ejecuta fooredis. Como se dijo anteriormente, esto no inicia un nuevo proceso si ya se está ejecutando. El segundo garantiza que fooredis se inicie inmediatamente después de que se reinicie la máquina del servidor y mucho antes de que comience la primera regla.
Se podrían usar algunos métodos de delirio más para esto, por ejemplo, para forever . Vea también este hilo de la Comunidad de Webfaction para más información sobre el tema.
Conclusión
Ahora lo tienes. Muchas cosas hechas, pero tal vez vendrán más. Las cosas que le gustaría hacer en el futuro que no se trataron aquí incluyen lo siguiente.
- Establecer una contraseña, evitando que otros usuarios vacíen sus bases de datos. (Ver redis.conf)
- Limitar el uso de memoria (ver redis.conf)
- Registrando el uso y los errores (Ver redis.conf)
- Copia de seguridad de los datos de vez en cuando.
¿Alguna idea, comentario o corrección?
Para resumir la excelente respuesta de Akseli:
assume your user is named "magic_r_user"
cd ~
wget "http://download.redis.io/releases/redis-3.0.0.tar.gz"
tar -xzf redis-3.0.0.tar.gz
mv redis-3.0.0 redis
cd redis
make
make test
create a custom app "listening on port" through the Webfaction management website
assume we named it magic_r_app
assume it was assigned port 18932
cp ~/redis/redis.conf ~/webapps/magic_r_app/
vi ~/webapps/magic_r_app/redis.conf
daemonize yes
pidfile ~/webapps/magic_r_app/redis.pid
port 18932
test it
~/redis/src/redis-server ~/webapps/magic_r_app/redis.conf
~/redis/src/redis-cli -p 18932
ctrl-d
cat ~/webapps/magic_r_app/redis.pid | xargs kill
crontab -e
*/1 * * * * /home/magic_r_user/redis/src/redis-server /home/magic_r_user/webapps/magic_r_app/redis.conf &>> /home/magic_r_user/logs/user/cron.log
don''t forget to set a password!
Para su información, si está instalando redis 2.8.8+
puede obtener un error, referencia indefinida a __sync_add_and_fetch_4
al compilar. Consulte http://www.eschrade.com/page/undefined-reference-to-__sync_add_and_fetch_4/ para obtener información.
He pegado la parte relevante de esa página a continuación en caso de que la página se desconecte alguna vez. Esencialmente necesita exportar la variable CFLAGS y reiniciar el proceso de compilación.
[root@devvm1 redis-2.6.7]# export CFLAGS=-march=i686
[root@devvm1 redis-2.6.7]# make distclean
[root@devvm1 redis-2.6.7]# make