sql >> Base de Datos >  >> NoSQL >> Redis

Configuración de Redis en Webfaction

Introducción

Debido a las restricciones ambientales 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 en pleno funcionamiento que permanece activo incluso después de reiniciar. Personalmente instalé Redis mediante el siguiente procedimiento hace aproximadamente medio año y ha estado funcionando sin problemas desde entonces. Sin embargo, una pequeña 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 funcionamiento.

Instalación

Inicie sesión en su shell de Webfaction

ssh [email protected]

Descargue el último Redis del sitio de descargas 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 realizarlo, mira si tu servidor es Linux de 32 o 64 bits. 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 es de 64 bits, x86_64. Vea esta respuesta 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 algunas cosas adicionales. Hay un comando make 32bit pero da error. Edite una línea en el script de instalación para hacer make 32bit para trabajar.

> nano ~/src/redis-2.6.16/src/Makefile

Cambia la línea 214 de esta

$(MAKE) CFLAGS="-m32" LDFLAGS="-m32"

a esto

$(MAKE) CFLAGS="-m32 -march=i686" LDFLAGS="-m32 -march=i686"

y guardar. Luego ejecute el indicador make con 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 sugiere el resultado de la instalación, sería bueno asegurarse de que todo funcione como se espera mediante la ejecución de pruebas.

Hint: To run 'make test' is a good idea ;)

Desafortunadamente, la prueba requiere que se instale tlc8.6.0, que no es el predeterminado al menos en la máquina web223. Por lo tanto, debe instalarlo primero, desde la fuente. Consulte las notas de instalación y las notas de compilación de Tcl/Tk.

> 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

Probando Tcl con make test tomará tiempo y también fallará debido a las restricciones ambientales de WebFaction. Te sugiero que te saltes esto.

Ahora que tenemos Tlc instalado, podemos ejecutar pruebas de Redis. Las pruebas llevarán mucho tiempo y también utilizan temporalmente una gran cantidad de memoria.

> cd ~/src/redis-2.6.16/
> make test

Después de las pruebas, está listo para continuar.

Inicio del 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.

En segundo lugar, tome nota del número de puerto del socket que se proporcionó para la aplicación. Sea el ejemplo 23015 .

Copie los ejecutables compilados previamente en el directorio de la aplicación. Puede optar por 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 lo modificarás.

> cp ~/src/redis-2.6.16/redis.conf .

Ahora Redis ya es ejecutable. Aunque hay problemas de pareja. Primero, es posible que el puerto Redis predeterminado 6379 ya esté en uso. En segundo lugar, incluso si el puerto estuviera 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 redis.conf y para el segundo se necesita un demonio que también se soluciona editando redis.conf.

Redis puede ejecutarse solo en el modo daemon. Para eso, debe configurar un lugar donde el demonio almacene sus ID de proceso, PID. Por lo general, los archivos pid 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 explicada más adelante en la parte Administrar el servidor, una buena opción es colocar el archivo pid en el mismo directorio que los ejecutables. No es necesario que cree el archivo usted mismo, Redis lo crea automáticamente.

Ahora abra el archivo redis.conf para editarlo.

> 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 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 funcionando.

> 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

Administrar el servidor

Para facilitar el uso y como trabajo preparatorio para la siguiente parte, cree un script que ayude a abrir el cliente e iniciar, reiniciar y detener el servidor. Una solución fácil es escribir un archivo MAKE. Cuando escriba un archivo MAKE, recuerde usar tabulaciones 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 servidor ./redis no crea un nuevo proceso si ya hay uno ejecutándose.

La tercera regla tiene cierta sabiduría tranquila. Si redis.pid no se almacenó en el directorio de fooredis sino, 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 al mismo tiempo.

Para ejecutar una regla:

> make start

Mantener el servidor funcionando

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 falla? ¿Qué pasa si la máquina del servidor se reinicia? Para cubrir estos, debe crear dos cronjobs.

> export EDITOR=nano
> crontab -e

Agregue las siguientes dos líneas y guarde.

*/5 * * * * make -C ~/webapps/fooredis/ -f ~/webapps/fooredis/Makefile start
@reboot make -C ~/webapps/fooredis/ -f ~/webapps/fooredis/Makefile start

El primero asegura cada cinco minutos que fooredis está funcionando. Como se dijo anteriormente, esto no inicia un nuevo proceso si uno ya se está ejecutando. La segunda garantiza que fooredis se inicie inmediatamente después de que se reinicie la máquina del servidor y mucho antes de que se active la primera regla.

Se podrían usar algunos métodos más delicados para esto, por ejemplo, para siempre. Consulte también este hilo de la comunidad Webfaction para obtener más información sobre el tema.

Conclusión

Ahora lo tienes. Se han hecho muchas cosas, pero tal vez vengan 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 la memoria (Ver redis.conf)
  • Registrar el uso y los errores (Ver redis.conf)
  • Hacer una copia de seguridad de los datos de vez en cuando.

¿Alguna idea, comentario o corrección?