Redis
 sql >> Base de données >  >> NoSQL >> Redis

Configurer Redis sur Webfaction

Présentation

En raison des restrictions d'environnement particulières des serveurs Webfaction, les instructions d'installation ne sont pas aussi simples qu'elles le seraient. Néanmoins, à la fin, vous aurez un serveur Redis entièrement fonctionnel qui reste actif même après un redémarrage. J'ai personnellement installé Redis en suivant la procédure suivante il y a environ six mois et il fonctionne parfaitement depuis. Un petit mot d'avertissement cependant, six mois, ce n'est pas long, surtout parce que le serveur n'a pas été soumis à une utilisation intensive.

Les instructions se composent de cinq parties :installation, test, démarrage du serveur, gestion du serveur et maintien du fonctionnement du serveur.

Installation

Connectez-vous à votre shell Webfaction

ssh [email protected]

Téléchargez la dernière version de Redis à partir du site de téléchargement 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/

Avant de le faire, voyez si votre serveur est Linux 32 ou 64 bits. Le script d'installation ne gère pas bien les environnements 32 bits, du moins sur les machines CentOS 5 de Webfaction. La commande pour les bits est uname -m . Si Linux est 32 bits, le résultat sera i686, si 64 bits alors x86_64. Voir cette réponse pour plus de détails.

> uname -m
i686

Si votre serveur est en 64 bits (x86_64), faites-le tout simplement.

> make

Mais si votre serveur est en 32 bits (i686), vous devez faire quelques petites choses supplémentaires. Il y a une commande make 32bit mais cela produit une erreur. Modifiez une ligne dans le script d'installation pour rendre make 32bit travailler.

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

Changez la ligne 214 de ceci

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

à ça

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

Et enregistrer. Ensuite, lancez le make avec le drapeau 32 bits.

> cd ~/src/redis-2.6.16/  ## Note the dir, no trailing src/
> make 32bit

Les exécutables ont été créés dans le répertoire ~/src/redis-2.6.16/src/ . Les exécutables incluent redis-cli , redis-server , redis-benchmark et redis-sentinel .

Test (facultatif)

Comme le suggère la sortie de l'installation, il serait bon de s'assurer que tout fonctionne comme prévu en exécutant des tests.

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

Malheureusement, le test nécessite l'installation de tlc8.6.0, ce qui n'est pas la valeur par défaut du moins sur la machine web223. Vous devez donc l'installer d'abord, à partir de la source. Voir les notes d'installation Tcl/Tk et les notes de compilation.

> 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

Tester Tcl avec make test prendra du temps et échouera également en raison des restrictions d'environnement de WebFaction. Je vous suggère de sauter ceci.

Maintenant que Tlc est installé, nous pouvons exécuter des tests Redis. Les tests prendront beaucoup de temps et utiliseront temporairement une assez grande quantité de mémoire.

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

Après les tests, vous êtes prêt à continuer.

Démarrer le serveur

Tout d'abord, créez une application personnalisée via le panneau de configuration Webfaction (application personnalisée (écoute sur le port)). Nommez-le par exemple fooredis . Notez que vous n'avez pas besoin de créer un domaine ou un site Web pour l'application si Redis est utilisé uniquement localement, c'est-à-dire à partir du même hôte.

Deuxièmement, notez le numéro de port de socket qui a été donné pour l'application. Soit l'exemple 23015 .

Copiez les exécutables précédemment compilés dans le répertoire de l'application. Vous pouvez choisir de copier tout ou seulement ceux dont vous avez besoin.

> cd ~/webapps/fooredis/
> cp ~/src/redis-2.6.16/src/redis-server .
> cp ~/src/redis-2.6.16/src/redis-cli .

Copiez également l'exemple de fichier de configuration. Vous allez bientôt modifier cela.

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

Maintenant, Redis est déjà exécutable. Il y a cependant des problèmes de couple. Tout d'abord, le port Redis 6379 par défaut est peut-être déjà utilisé. Deuxièmement, même si le port était libre, oui, vous pourriez démarrer le serveur mais il s'arrête au même moment où vous quittez le shell. Pour le premier, le redis.conf doit être édité et pour le second, vous avez besoin d'un démon qui est également résolu en éditant redis.conf.

Redis est capable de s'exécuter en mode démon. Pour cela, vous devez configurer un emplacement où le démon stocke ses identifiants de processus, les PID. Habituellement, les fichiers pid sont stockés dans /var/run/ mais en raison des restrictions de l'environnement, vous devez sélectionner un emplacement pour eux dans votre répertoire personnel. Pour une raison expliquée plus loin dans la partie Gestion du serveur, un bon choix est de mettre le pidfile sous le même répertoire que les exécutables. Vous n'avez pas à créer le fichier vous-même, Redis le crée automatiquement pour vous.

Ouvrez maintenant le fichier redis.conf pour le modifier.

> cd ~/webapps/fooredis/
> nano redis.conf

Modifiez les configurations de la manière suivante.

  • daemonize no -> daemonize yes
  • pidfile /var/run/redis.pid -> pidfile /home/foouser/webapps/fooredis/redis.pid
  • port 6379 -> port 23015

Enfin, démarrez le serveur Redis. Spécifiez le fichier de configuration afin que Redis écoute le bon port et s'exécute en tant que démon.

> cd ~/webapps/fooredis/
> ./redis-server redis.conf
> 

Regardez-le fonctionner.

> 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)
>

Arrêtez le serveur si vous le souhaitez.

> ps -u $USER -o pid,command | grep redis
  718 grep redis
10735 ./redis-server redis.conf
> kill 10735

ou

> cat redis.pid | xargs kill

Gérer le serveur

Pour la facilité d'utilisation et comme travail préparatoire pour la partie suivante, créez un script qui aide à ouvrir le client et à démarrer, redémarrer et arrêter le serveur. Une solution simple consiste à écrire un makefile. Lorsque vous écrivez un makefile, n'oubliez pas d'utiliser des tabulations au lieu d'espaces.

> 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

Les règles sont assez explicites. La particularité de la deuxième règle est qu'en mode démon, l'appel du ./redis-server ne crée pas de nouveau processus s'il y en a un déjà en cours d'exécution.

La troisième règle contient une certaine sagesse tranquille. Si redis.pid n'était pas stocké sous le répertoire de fooredis mais par exemple dans /var/run/redis.pid alors il ne serait pas si facile d'arrêter le serveur. Cela est particulièrement vrai si vous exécutez plusieurs instances Redis simultanément.

Pour exécuter une règle :

> make start

Garder le serveur en marche

Vous avez maintenant une instance de Redis fonctionnant en mode démon qui vous permet de quitter le shell sans l'arrêter. Ce n'est toujours pas suffisant. Que faire si le processus se bloque ? Que se passe-t-il si la machine serveur est redémarrée ? Pour les couvrir, vous devez créer deux cronjobs.

> export EDITOR=nano
> crontab -e

Ajoutez les deux lignes suivantes et enregistrez.

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

Le premier s'assure toutes les cinq minutes que fooredis fonctionne. Comme indiqué ci-dessus, cela ne démarre pas un nouveau processus s'il est déjà en cours d'exécution. La seconde garantit que fooredis est démarré immédiatement après le redémarrage de la machine serveur et bien avant que la première règle n'entre en vigueur.

Certaines méthodes plus délicates pour cela pourraient être utilisées, par exemple pour toujours. Voir aussi ce fil de discussion de la communauté Webfaction pour en savoir plus sur le sujet.

Conclusion

Maintenant vous l'avez. Beaucoup de choses ont été faites mais peut-être que d'autres viendront. Les choses que vous aimeriez faire à l'avenir et qui n'ont pas été couvertes ici sont les suivantes.

  • Définition d'un mot de passe, empêchant les autres utilisateurs de vider vos bases de données. (Voir redis.conf)
  • Limiter l'utilisation de la mémoire (Voir redis.conf)
  • Journaliser l'utilisation et les erreurs (voir redis.conf)
  • Sauvegarder les données de temps en temps.

Des idées, des commentaires ou des corrections ?