Einführung
Aufgrund der speziellen Umgebungseinschränkungen von Webfaction-Servern sind die Installationsanweisungen nicht so einfach, wie sie es wären. Nichtsdestotrotz haben Sie am Ende einen voll funktionsfähigen Redis-Server, der auch nach einem Neustart bestehen bleibt. Ich persönlich habe Redis vor etwa einem halben Jahr nach folgendem Verfahren installiert und es läuft seitdem einwandfrei. Aber eine kleine Warnung, ein halbes Jahr ist keine lange Zeit, besonders weil die Server nicht stark beansprucht wurden.
Die Anleitung besteht aus fünf Teilen:Installation, Testen, Server starten, Server verwalten und Server am Laufen halten.
Installation
Melden Sie sich bei Ihrer Webfaction-Shell an
ssh [email protected]
Laden Sie das neueste Redis von der Redis-Download-Site herunter.
> 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/
Sehen Sie vor dem Erstellen, ob Ihr Server Linux 32 oder 64 Bit ist. Das Installationsskript kommt mit 32-Bit-Umgebungen nicht gut zurecht, zumindest nicht auf CentOS-5-Rechnern von Webfaction. Der Befehl für Bits ist uname -m
. Wenn Linux 32 Bit ist, ist das Ergebnis i686, wenn 64 Bit, dann x86_64. Einzelheiten finden Sie in dieser Antwort.
> uname -m
i686
Wenn Ihr Server 64 Bit (x86_64) ist, dann machen Sie einfach.
> make
Aber wenn Ihr Server 32 Bit (i686) ist, müssen Sie ein paar zusätzliche Dinge tun. Es gibt einen Befehl make 32bit
aber es erzeugt einen Fehler. Bearbeiten Sie eine Zeile im Installationsskript, um make 32bit
zu erstellen zu arbeiten.
> nano ~/src/redis-2.6.16/src/Makefile
Ändern Sie hiervon die Zeile 214
$(MAKE) CFLAGS="-m32" LDFLAGS="-m32"
dazu
$(MAKE) CFLAGS="-m32 -march=i686" LDFLAGS="-m32 -march=i686"
und speichern. Führen Sie dann make mit 32-Bit-Flag aus.
> cd ~/src/redis-2.6.16/ ## Note the dir, no trailing src/
> make 32bit
Die ausführbaren Dateien wurden im Verzeichnis ~/src/redis-2.6.16/src/
erstellt . Zu den ausführbaren Dateien gehört redis-cli
, redis-server
, redis-benchmark
und redis-sentinel
.
Testen (optional)
Wie die Ausgabe der Installation vermuten lässt, wäre es schön, durch Ausführen von Tests sicherzustellen, dass alles wie erwartet funktioniert.
Hint: To run 'make test' is a good idea ;)
Leider erfordert das Testen die Installation von tlc8.6.0, was zumindest auf der Maschine web223 nicht der Standard ist. Sie müssen es also zuerst von der Quelle installieren. Siehe Tcl/Tk-Installationshinweise und Kompilierungshinweise.
> 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
Testen von Tcl mit make test
wird einige Zeit dauern und auch aufgrund der Umgebungseinschränkungen von WebFaction fehlschlagen. Ich schlage vor, Sie überspringen dies.
Nachdem wir Tlc installiert haben, können wir Redis-Tests ausführen. Die Tests werden sehr lange dauern und zeitweise auch recht viel Speicherplatz beanspruchen.
> cd ~/src/redis-2.6.16/
> make test
Nach den Tests können Sie fortfahren.
Server starten
Erstellen Sie zunächst eine benutzerdefinierte Anwendung über das Webfaction Control Panel (Benutzerdefinierte App (auf Port lauschend)). Nennen Sie es zum Beispiel fooredis . Beachten Sie, dass Sie keine Domain oder Website für die App erstellen müssen, wenn Redis nur lokal verwendet wird, d. h. vom selben Host.
Zweitens notieren Sie sich die Socket-Port-Nummer, die für die App angegeben wurde. Lassen Sie das Beispiel 23015 sein .
Kopieren Sie die zuvor kompilierten ausführbaren Dateien in das Verzeichnis der App. Sie können wählen, ob Sie alle oder nur die benötigten kopieren möchten.
> cd ~/webapps/fooredis/
> cp ~/src/redis-2.6.16/src/redis-server .
> cp ~/src/redis-2.6.16/src/redis-cli .
Kopieren Sie auch die Beispielkonfigurationsdatei. Sie werden das bald ändern.
> cp ~/src/redis-2.6.16/redis.conf .
Jetzt ist Redis bereits lauffähig. Es gibt jedoch einige Probleme. Zunächst könnte der standardmäßige Redis-Port 6379 bereits verwendet werden. Zweitens, selbst wenn der Port frei wäre, ja, Sie könnten den Server starten, aber er hört auf zu laufen, sobald Sie die Shell verlassen. Für das erste muss die redis.conf editiert werden und für das zweite braucht man einen Daemon, der ebenfalls durch Editieren der redis.conf gelöst wird.
Redis kann sich selbst im Daemon-Modus ausführen. Dazu müssen Sie einen Ort einrichten, an dem der Daemon seine Prozess-IDs, PIDs, speichert. Normalerweise werden PID-Dateien in /var/run/ gespeichert, aber aufgrund der Umgebungsbeschränkungen müssen Sie einen Platz für sie in Ihrem Home-Verzeichnis auswählen. Aus einem später im Abschnitt Verwalten des Servers erläuterten Grund ist es eine gute Wahl, die PID-Datei im selben Verzeichnis wie die ausführbaren Dateien abzulegen. Sie müssen die Datei nicht selbst erstellen, Redis erstellt sie automatisch für Sie.
Öffnen Sie nun die redis.conf zum Bearbeiten.
> cd ~/webapps/fooredis/
> nano redis.conf
Ändern Sie die Konfigurationen wie folgt.
daemonize no
->daemonize yes
pidfile /var/run/redis.pid
->pidfile /home/foouser/webapps/fooredis/redis.pid
port 6379
->port 23015
Starten Sie nun endlich den Redis-Server. Geben Sie die conf-Datei an, damit Redis den richtigen Port abhört und als Daemon ausgeführt wird.
> cd ~/webapps/fooredis/
> ./redis-server redis.conf
>
Sehen Sie, wie es läuft.
> 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)
>
Stoppen Sie den Server, wenn Sie möchten.
> ps -u $USER -o pid,command | grep redis
718 grep redis
10735 ./redis-server redis.conf
> kill 10735
oder
> cat redis.pid | xargs kill
Verwalten des Servers
Erstellen Sie zur einfacheren Verwendung und als Vorbereitungsarbeit für den nächsten Teil ein Skript, das hilft, den Client zu öffnen und den Server zu starten, neu zu starten und zu stoppen. Eine einfache Lösung besteht darin, ein Makefile zu schreiben. Denken Sie beim Schreiben eines Makefiles daran, Tabulatoren anstelle von Leerzeichen zu verwenden.
> 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
Die Regeln sind ziemlich selbsterklärend. Das Besondere an der zweiten Regel ist, dass im Daemon-Modus beim Aufrufen des ./redis-Servers kein neuer Prozess erstellt wird, wenn bereits einer läuft.
Die dritte Regel enthält eine stille Weisheit. Wenn redis.pid nicht im Verzeichnis von fooredis gespeichert wäre, sondern beispielsweise in /var/run/redis.pid, dann wäre es nicht so einfach, den Server zu stoppen. Dies gilt insbesondere, wenn Sie mehrere Redis-Instanzen gleichzeitig ausführen.
So führen Sie eine Regel aus:
> make start
Den Server am Laufen halten
Sie haben jetzt eine Instanz von Redis, die im Daemon-Modus ausgeführt wird, sodass Sie die Shell beenden können, ohne sie anzuhalten. Das reicht noch nicht. Was ist, wenn der Prozess abstürzt? Was ist, wenn der Servercomputer neu gestartet wird? Um diese abzudecken müssen Sie zwei Cronjobs erstellen.
> export EDITOR=nano
> crontab -e
Fügen Sie die folgenden zwei Zeilen hinzu und speichern Sie.
*/5 * * * * make -C ~/webapps/fooredis/ -f ~/webapps/fooredis/Makefile start
@reboot make -C ~/webapps/fooredis/ -f ~/webapps/fooredis/Makefile start
Der erste stellt sicher, dass fooredis alle fünf Minuten läuft. Wie oben gesagt, startet dies keinen neuen Prozess, wenn bereits einer läuft. Die zweite stellt sicher, dass fooredis sofort nach dem Neustart des Servers gestartet wird und lange bevor die erste Regel eintritt.
Einige feinere Methoden dafür könnten verwendet werden, zum Beispiel für immer. Weitere Informationen zu diesem Thema finden Sie auch in diesem Webfaction-Community-Thread.
Schlussfolgerung
Jetzt haben Sie es. Viele Dinge getan, aber vielleicht kommen noch mehr. Zu den Dingen, die Sie in Zukunft gerne tun würden und die hier nicht behandelt wurden, gehören die folgenden.
- Festlegen eines Passworts, um zu verhindern, dass andere Benutzer Ihre Datenbanken leeren. (Siehe redis.conf)
- Beschränkung der Speichernutzung (Siehe redis.conf)
- Protokollierung der Nutzung und Fehler (Siehe redis.conf)
- Die Daten von Zeit zu Zeit sichern.
Irgendwelche Ideen, Kommentare oder Korrekturen?