Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Redis auf Webfaction einrichten

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?