158 lines
5.7 KiB
TeX
158 lines
5.7 KiB
TeX
|
% Copyright (c) 2004-2010 Evolix <info@evolix.fr>
|
|||
|
% Permission is granted to copy, distribute and/or modify this document
|
|||
|
% under the terms of the GNU Free Documentation License, Version 1.2
|
|||
|
% or any later version published by the Free Software Foundation;
|
|||
|
% with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
|
|||
|
% A copy of the license is included at http://www.gcolpart.com/howto/fdl.html
|
|||
|
|
|||
|
\chapter{Redis}
|
|||
|
|
|||
|
Site officiel: \url{http://redis.io/}
|
|||
|
|
|||
|
\section{Pr<EFBFBD>sentation}
|
|||
|
|
|||
|
Redis est un jeune projet (premi<6D>re version sortie en 2009) de syst<73>me de
|
|||
|
gestion de bases de donn<6E>es no-SQL (\emph{Not Only SQL}) de type cl<63>-valeur. Il
|
|||
|
est <20>crit en C et son but est d'<27>tre hautement performant.\\
|
|||
|
Les donn<6E>es stock<63>es peuvent <20>tre des chaines de caract<63>res, tableaux, listes,
|
|||
|
etc\dots
|
|||
|
|
|||
|
Une caract<63>ristique notable de Redis est que tout est stock<63> dans la RAM. Des
|
|||
|
syncrhonisations sont faites de mani<6E>re r<>guli<6C>re sur le disque afin de rendre
|
|||
|
les donn<6E>es persistantes.
|
|||
|
|
|||
|
\section{Installation}
|
|||
|
|
|||
|
Sous Debian Squeeze, la version 1.2.6 est pr<70>sente dans les d<>p<EFBFBD>ts, et peut
|
|||
|
<EFBFBD>tre install<6C>e simplement:
|
|||
|
\begin{verbatim}
|
|||
|
# aptitude install redis-server
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Cependant, il peut <20>tre utile d'avoir une version plus r<>cente, et on peut
|
|||
|
utiliser un backport du paquet qui fourni la version 2.4.2. Pour cela, si ce
|
|||
|
n'est pas le cas, il faut ajouter le d<>p<EFBFBD>t backport au \texttt{sources.list}:
|
|||
|
\begin{verbatim}
|
|||
|
deb http://backports.debian.org/debian-backports squeeze-backports main
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Pour s'assurer d'avoir les mises <20> jour ult<6C>rieures sur le paquet
|
|||
|
\texttt{redis-server}, il est n<>cessaire de rajouter dans le fichier
|
|||
|
\texttt{/etc/apt/preferences.d/redis}:
|
|||
|
\begin{verbatim}Package: redis-server
|
|||
|
Pin: release a=squeeze-backports
|
|||
|
Pin-Priority: 999
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
\section{Configuration}
|
|||
|
|
|||
|
La configuration de Redis se fait dans le fichier
|
|||
|
\texttt{/etc/redis/redis.conf}, dont voici un exemple:
|
|||
|
\begin{verbatim}
|
|||
|
daemonize yes
|
|||
|
pidfile /var/run/redis.pid
|
|||
|
port 6379
|
|||
|
unixsocket /var/run/redis/redis.sock
|
|||
|
bind 127.0.0.1
|
|||
|
timeout 300
|
|||
|
loglevel notice
|
|||
|
logfile /var/log/redis/redis-server.log
|
|||
|
databases 16
|
|||
|
save 900 1
|
|||
|
save 300 10
|
|||
|
save 60 10000
|
|||
|
dbfilename dump.rdb
|
|||
|
dir /var/lib/redis
|
|||
|
#requirepass <password>
|
|||
|
maxclients 128
|
|||
|
maxmemory 104857600
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
\section{S<EFBFBD>curit<EFBFBD>}
|
|||
|
|
|||
|
Il faut bien faire attention <20> restreindre l'acc<63>s aux donn<6E>es stock<63>es dans les
|
|||
|
bases de donn<6E>es Redis. Par d<>faut, aucune authentification n'est configur<75>e.
|
|||
|
|
|||
|
Redis peut <20>tre configur<75> pour <20>couter soit sur un socket r<>seau (par d<>faut
|
|||
|
\texttt{127.0.0.1:6379}) soit via un socket unix. Dans le second cas, il est
|
|||
|
ais<EFBFBD> de positionner les bons droits unix sur le socket pour restreindre l'acc<63>s
|
|||
|
<EFBFBD> tout le monde. Pour cette raison, il est pr<70>f<EFBFBD>rable de faire <20>couter Redis sur
|
|||
|
un socket unix.\\
|
|||
|
Si le choix ne peut se poser et que Redis doit obligatoirement <20>couter sur un
|
|||
|
socket r<>seau (en local ou non), il est important de configurer une
|
|||
|
authentification sur les bases de donn<6E>es.
|
|||
|
|
|||
|
Redis impl<70>mente une couche d'authentification extr<74>mement minimaliste: pas de
|
|||
|
gestion de comptes, mais un unique mot de passe d<>fini en clair dans le fichier
|
|||
|
de configuration de Redis. Il sera alors n<>cessaire, apr<70>s chaque connexion <20> la
|
|||
|
base, d'ex<65>cuter la commande Redis \texttt{AUTH} suivie du mot de passe.
|
|||
|
|
|||
|
<EFBFBD>tant donn<6E> que Redis est capable de trait<69> un nombre tr<74>s <20>lev<65> de requ<71>tes par
|
|||
|
seconde, les attaques par brute-force se font plus rapide et il est donc
|
|||
|
conseill<EFBFBD> de d<>finir un mot de passe tr<74>s long.
|
|||
|
|
|||
|
\section{Utilisation}
|
|||
|
|
|||
|
Voici un aper<65>u de l'utilisation de Redis:
|
|||
|
\begin{itemize}
|
|||
|
\item Connexion au serveur (via un socket unix):
|
|||
|
\begin{verbatim}$ redis-cli -s /var/run/redis/redis.sock\end{verbatim}
|
|||
|
\item Ajout d'une entr<74>e:
|
|||
|
\begin{verbatim}redis> set foo 3
|
|||
|
OK\end{verbatim}
|
|||
|
\item Ajout de plusieurs entr<74>e:
|
|||
|
\begin{verbatim}redis> mset un 1 deux 2 trois 3 quatre 4
|
|||
|
OK\end{verbatim}
|
|||
|
\item R<>cup<75>ration d'une entr<74>e:
|
|||
|
\begin{verbatim}redis> get foo
|
|||
|
(nil)\end{verbatim}
|
|||
|
\item Listage des cl<63>:
|
|||
|
\begin{verbatim}redis> keys *
|
|||
|
1) "un"
|
|||
|
2) "foo"
|
|||
|
3) "deux"
|
|||
|
4) "trois"
|
|||
|
5) "quatre"\end{verbatim}
|
|||
|
\item R<>cup<75>ration des entr<74>es qui contiennent \emph{r}:
|
|||
|
\begin{verbatim}redis> *keys *r*
|
|||
|
1) "quatre"
|
|||
|
2) "trois"\end{verbatim}
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
\section{Sauvegardes}
|
|||
|
|
|||
|
Redis sauvegarde r<>guli<6C>rement le contenu de sa base de donn<6E>e (en RAM) sur le
|
|||
|
disque, dans le seul fichier \texttt{/var/lib/redis/dump.rdb} (par d<>faut). Il
|
|||
|
suffit donc de copier ce fichier pour en faire une sauvegarde.
|
|||
|
|
|||
|
La restauration consiste <20> <20>teindre Redis, copier le fichier sauvegard<72> <20> son
|
|||
|
bon emplacement, et red<65>marrer Redis.
|
|||
|
|
|||
|
\section{R<EFBFBD>plication}
|
|||
|
|
|||
|
\subsection{Fonctionnement}
|
|||
|
|
|||
|
Redis supporte la r<>plication master-slaves, avec quelques caract<63>ristiques
|
|||
|
int<EFBFBD>ressantes: un master peut avoir plusieurs slave, et un slave peut <20>tre
|
|||
|
master d'un autre slave (ce qui permet de faire de la r<>plication
|
|||
|
cascad<EFBFBD>e).
|
|||
|
|
|||
|
Apr<EFBFBD>s <20>a mise en place, la r<>plication se passe en deux temps. Premi<6D>rement, le
|
|||
|
master va envoyer l'int<6E>gralit<69> de sa base de donn<6E>es au(x) slave(s). Les
|
|||
|
donn<EFBFBD>es seront alors cr<63><72>s sur le disque, puis charg<72> en m<>moire. Une fois que
|
|||
|
les donn<6E>es sont identiques entre le master et le(s) slave(s), le master
|
|||
|
transmet au(x) slave(s) les modifications qui sont effectu<74>es. Les commandes
|
|||
|
transmises sont les m<>mes que pour interagir avec le master.
|
|||
|
|
|||
|
\subsection{Configuration}
|
|||
|
|
|||
|
La mise en place de la r<>plication est extr<74>mement simple: il suffit de rajouter
|
|||
|
la directive \texttt{slaveof <IP> <port>} dans la configuration de Redis, en
|
|||
|
prenant bien s<>r soin d'adapter l'IP et le port du master.
|
|||
|
|
|||
|
Si le master demande une authentification (ce qui devrait <20>tre le cas si il est
|
|||
|
correctement configur<75>), il faut ajouter la directive \texttt{masterauth
|
|||
|
<password>}, avec le mot de passe du master.
|
|||
|
|
|||
|
|