You are here: Home Howtos & Tutorials Debian Redis unter Debian 6.0 "Squeeze" Howto

Redis unter Debian 6.0 "Squeeze" Howto

Einleitung

Während typische SQL-Datenbanken wie MySQL, PostgreSQL, Oracle u.a. immer ihre Daseinsberechtigung beibehalten werden, existiert dennoch eine Vielzahl von Fällen, in den eher ein Key-Value-Store zur persistenten Speicherung der Daten geeigneter ist. Oft werden Key-Value-Stores auch als NoSQL-Datenbanken bezeichnet. In den meisten Fällen schliessen sich MySQL-Datenbanken und Key-Value.Stores in einem Projekt nicht aus, sondern ergänzen sich zu einer sehr mächtigen Infrastruktur. Während traditionelle SQL-Datenbanken einen Fokus auf Strukturierung und relationale Abbildung der Daten legen, sind Key-Value-Stores insbesondere dort interessant, wo große Datenmengen zu verarbeiten sind. Ein großer Vorteil von Key-Value-Stores ist das Fehlen von Schemata und die Skalierbarkeit der Architektur.

Neben Google’s BigTable, Facebook’s Cassandra, LinkedIn’s Voldemort, Hadoop, CouchDB, Tokyo Cabinet u.a. erfreut sich gerade Redis als Key-Value-Store einer starken Beliebtheit seitens der Entwickler. Redis’ Datenmodell entspricht dem eines typischen Key-Value-Stores: es handelt sich um ein Dictionary, in dem die entsprechenden Schlüssel auf die dazugehörigen Werte gemappt werden.

Im Gegensatz zu vielen anderen Key-Value-Stores bzw. NoSQL-Datenbanken müssen die Werte nicht zwangsläufig Strings sein. Redis kann die folgenden Datenstrukturen als Values verwalten:

  • Listen von Strings
  • Mengen von Strings (Sammlung von sich nicht wiederholenden, unsortierten Elementen)
  • sortierte Mengen (Sammlung von sich nicht wiederholenden, sortierten Elementen)
  • Hashes, bei den die Schlüssel Strings sind und die Werte entweder Strings oder Integer

Zudem bietet Redis ein weiteres Feature, das insbesondere in größeren Systemumgebungen zum Einsatz kommt: die Replizierung. Redis unterstützt eine sogenannte Master-Slave Replizierung, d.h. alle Daten eine Redis Master-Servers können auf beliebig vielen Slave-Servern repliziert werden.

Redis selbst wird mit einer hohen Dynamik entwickelt und ist zum jetzigen Zeitpunkt in der Version 2.4.8 erhältlich (Stand: März 2012). Leider ist die bei Debian GNU/Linux 6.0 “Squeeze” mitgelieferte Version bereits stark veraltet (Version 1.2.6). Von daher möchte ich in diesem Howto beschreiben, wie eine aktuelle Version von Redis auf einem Debian “Squeeze” System installiert und konfiguriert werden kann.

Installation der benötigten Pakete

Redis benötigt wenige Abhängigkeiten. Die Pakete, die von dem Key-Value-Store verwendet werden, installieren wir mittels:

# aptitude install tcl8.5

Anlegen eine Systembenutzers redis

Jeder Dienst sollte auf einem Linux- bzw. Unix-Server unter einer eigenen UID und damit nicht bspw. als Root betrieben werden. Von daher erstellen wir im Folgenden einen neuen Systemuser redis und eine gleichnamige Gruppe mittels:

# groupadd redis
# useradd -g redis redis

Installation von Redis

Ich werde im Folgenden die Installation von Redis aus dem Quellcode heraus erläutern. Dazu laden wir zunächst die Sourcen des Projekts herunter:

# cd /usr/local/src
# wget http://redis.googlecode.com/files/redis-2.4.8.tar.gz

Anmerkung: wie bereits oben beschrieben, schreitet die Entwicklung von Redis stetig voran. Von daher ist es wichtig, dass wir an dieser Stelle die aktuellste Version von Redis verwenden.

Anschließend entpacken wir das Quellcode-Archiv:

# tar xzvf redis-2.4.8.tar.gz

... und kompilieren Redis mittels make:

# cd /usr/local/src/redis-2.4.8/src
# make
# make install

Nachdem wir Redis installiert haben, führen wir einmal den mitgelieferten Test aus:

# make test

Dieser Durchlauf kann einige Zeit in Anspruch nehmen, wobei wir jederzeit darüber informiert werden, welcher Test gerade ausgeführt wird. Am Ende eines erfolgreichen Testdurchlaufs sollten wir ein entsprechendes Feedback erhalten:

All tests passed without errors!

Konfiguration von Redis

Eine wichtige Konfigurationsoption, die Redis mitgeteilt werden sollte, ist die Handhabung von Requests, die u.U. mehr Speicher allozieren wollen, als tatsächlich zur Verfügung steht. Um den sogenannten Memory Overcommit zu aktivieren, setzen wir die folgende Kernelkonfiguration in der Konfigurationsdatei /etc/sysctl.conf fest:

vm.overcommit_memory=1

Damit diese Option aktiv wird, müssen wir entweder den physikalischen Server neustarten, damit beim Booten die neue Kerneloption greift, oder aber wir setzen diese manuell mittels:

# sysctl vm.overcommit_memory=1

Wir können mittels des folgenden Kommandos überprüfen, ob der Memory Overcommit richtig gesetzt wurde:

# cat /proc/sys/vm/overcommit_memory
1

Die eigentliche Konfiguration von Redis führen wir in der Konfigurationsdatei /usr/local/etc/redis/redis.conf durch. Dazu legen wir zunächst das Verzeichnis an:

# mkdir -p /usr/local/etc/redis

... und anschließend die Konfigurationsdatei /usr/local/etc/redis/redis.conf selbst. Als Einsteig kopieren wir die im Quellcode-Archiv enthaltene Demo-Konfiguration dorthin:

# cp /usr/local/src/redis-2.4.8/redis.conf /usr/local/etc/redis

Wir können an dieser Stelle die Beispielkonfiguration soweit übernehmen, da diese Grundkonfiguration für die ersten Projekte gut geeignet ist. Das Einzige, was wir jedoch ändern müssen ist, dass Redis als Daemon gestartet wird, da wir später ein Init-Skript verwenden werden. Dazu passen wir in der obigen Konfigurationsdatei /usr/local/etc/redis/redis.conf die Zeile 17 an:

daemonize yes

Starten von Redis

Zum einen können wir den Redis-Server manuell starten mittels:

# /usr/local/bin/redis-server

Für den Produktivbetrieb sollte jedoch ein entsprechendes Init-Skript erstellt werden. In diesem Fall legen wir ein solches Init-Skript unter /etc/init.d/redis-server an:

#! /bin/sh
### BEGIN INIT INFO
# Provides:		redis-server
# Required-Start:	$syslog $remote_fs
# Required-Stop:	$syslog $remote_fs
# Should-Start:		$local_fs
# Should-Stop:		$local_fs
# Default-Start:	2 3 4 5
# Default-Stop:		0 1 6
# Short-Description:	redis-server - Persistent key-value db
# Description:		redis-server - Persistent key-value db
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/bin/redis-server
DAEMON_ARGS=/usr/local/etc/redis/redis.conf
NAME=redis-server
DESC=redis-server
PIDFILE=/var/run/redis.pid

test -x $DAEMON || exit 0
test -x $DAEMONBOOTSTRAP || exit 0

set -e

case "$1" in
  start)
	echo -n "Starting $DESC: "
	touch $PIDFILE
	chown redis:redis $PIDFILE
	if start-stop-daemon --start --quiet --umask 007 --pidfile $PIDFILE --chuid redis:redis --exec $DAEMON -- $DAEMON_ARGS
	then
		echo "$NAME."
	else
		echo "failed"
	fi
	;;
  stop)
	echo -n "Stopping $DESC: "
	if start-stop-daemon --stop --retry 10 --quiet --oknodo --pidfile $PIDFILE --exec $DAEMON
	then
		echo "$NAME."
	else
		echo "failed"
	fi
	rm -f $PIDFILE
	;;

  restart|force-reload)
	${0} stop
	${0} start
	;;
  *)
	echo "Usage: /etc/init.d/$NAME {start|stop|restart|force-reload}" >&2
	exit 1
	;;
esac

exit 0

Anschließend machen wir das Skript ausführbar:

# chmod a+x /etc/init.d/redis-server

... und fügen den Start von Redis dem Default-Initlevel hinzu:

# update-rc.d redis-server defaults

Anschließend können wir den Redis-Server manuell starten mittels:

# /etc/init.d/redis-server start

Nun sollten wir den Redis-Server via localhost:6379 erreichen können.

Document Actions

Comments (0)

comments powered by Disqus
  • Office. Asconix Systems • Große Elbstraße 47 • D-22767 Hamburg • Germany E-Mail. info@asconix.com • Phone. +49 40 609 410 650 • Fax. +49 40 609 410 659


  • Impressum
  • Datenschutz
  • Übersicht