Einführung
Redis ist ein Open-Source-Schlüsselwert-Cache- und Speichersystem, das aufgrund seiner erweiterten Unterstützung für verschiedene Datentypen, wie z. B. Hashes, Listen, Mengen und Bitmaps, auch als Datenstrukturserver bezeichnet wird. Es unterstützt auch Clustering, wodurch es häufig für hochverfügbare und skalierbare Umgebungen verwendet wird.
In diesem Tutorial erfahren Sie, wie Sie einen externen Redis-Server installieren und konfigurieren, der als Sitzungshandler für eine PHP-Anwendung unter Ubuntu 14.04 verwendet wird.
Der Session-Handler ist für das Speichern und Abrufen von in Sessions gespeicherten Daten verantwortlich. Standardmäßig verwendet PHP hierfür * files *. Ein externer Session-Handler kann verwendet werden, um scalable PHP surroundings hinter einer https://www.digitalocean.com/community/ zu erstellen. Tutorials / Einführung in die Konzepte von Haproxy und Load Balancing [Load Balancer], in denen alle Anwendungsknoten eine Verbindung zu einem zentralen Server herstellen, um Sitzungsinformationen auszutauschen.
Voraussetzungen
In diesem Tutorial werden wir mit zwei unterschiedlichen Servern arbeiten. Aus Sicherheits- und Leistungsgründen ist es wichtig, dass sich beide Droplets im selben Datencenter befinden (https://www.digitalocean.com/community/tutorials/how-to-set-up-and-use-digitalocean-private-networking). [ private networking] aktiviert. Folgendes benötigen Sie:
-
Ein PHP-Webserver mit LAMP oder https: //www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-14-04[LEMP] unter Ubuntu 14.04 - wir verweisen auf diesen Server als * web *
-
Ein zweiter, sauberer Ubuntu 14.04-Server, auf dem Redis installiert wird - wir bezeichnen diesen Server als * redis *
Sie benötigen als regulärer Benutzer mit sudo permission einen ordnungsgemäßen SSH-Zugriff auf beide Server.
Schritt 1 - Installieren Sie den Redis Server
Als erstes müssen wir den Redis-Server auf unserem * redis * Droplet zum Laufen bringen.
Wir werden den regulären Ubuntu-Paketmanager mit einem vertrauenswürdigen PPA-Repository verwenden, das von Chris Lea bereitgestellt wird. Dies ist notwendig, um sicherzustellen, dass wir die neueste stabile Version von Redis erhalten.
Fügen Sie zunächst das PPA-Repository hinzu, indem Sie Folgendes ausführen:
sudo add-apt-repository ppa:chris-lea/redis-server
Drücken Sie + ENTER
zur Bestätigung.
Jetzt müssen Sie den Paketmanager-Cache aktualisieren:
sudo apt-get update
Zum Schluss installieren wir Redis, indem wir Folgendes ausführen:
sudo apt-get install redis-server
Redis sollte jetzt auf Ihrem Server installiert sein. Führen Sie den folgenden Befehl aus, um die Installation zu testen:
redis-cli ping
Dadurch wird eine Verbindung zu einer Redis-Instanz hergestellt, die auf * localhost * an Port * 6379 * ausgeführt wird. Sie sollten ein * PONG * als Antwort erhalten.
Schritt 2 - Konfigurieren Sie Redis so, dass externe Verbindungen akzeptiert werden
Standardmäßig erlaubt Redis nur Verbindungen zu + localhost +
, was im Grunde bedeutet, dass Sie nur auf den Server zugreifen können, auf dem Redis installiert ist. Diese Konfiguration muss geändert werden, damit Verbindungen von anderen Servern im selben privaten Netzwerk wie der * redis * -Server zugelassen werden.
Als erstes müssen wir die IP-Adresse des privaten Netzwerks des Redis-Rechners herausfinden. Die folgenden Schritte sollten auf dem * redis * -Server ausgeführt werden.
Führen Sie "+ ifconfig +" aus, um Informationen zu Ihren Netzwerkschnittstellen zu erhalten:
sudo ifconfig
Sie sollten eine Ausgabe ähnlich der folgenden erhalten:
Output eth0 Link encap:Ethernet HWaddr 04:01:63:7e:a4:01
inet addr:188.166.77.33 Bcast:188.166.127.255 Mask:255.255.192.0
inet6 addr: fe80::601:63ff:fe7e:a401/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3497 errors:0 dropped:0 overruns:0 frame:0
TX packets:3554 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4895060 (4.8 MB) TX bytes:619070 (619.0 KB)
eth1 Link encap:Ethernet HWaddr 04:01:63:7e:a4:02
inet addr: Bcast:10.133.255.255 Mask:255.255.0.0
inet6 addr: fe80::601:63ff:fe7e:a402/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:648 (648.0 B) TX bytes:578 (578.0 B)
Suchen Sie nach dem der * eth1 * -Schnittstelle zugewiesenen + inet_addr +
. In diesem Fall ist es "+ 10.133.14.9 +" - dies ist die IP-Adresse, die wir später verwenden werden, um vom * Web * -Server eine Verbindung zum * Redis * -Server herzustellen.
Öffnen Sie mit Ihrem bevorzugten Befehlszeileneditor die Datei "+ / etc / redis / redis.conf " und suchen Sie nach der Zeile, die die " bind +" - Definition enthält. Sie sollten Ihre * private Netzwerk-IP-Adresse * wie folgt in die Zeile einfügen:
sudo vim /etc/redis/redis.conf
/etc/redis/redis.conf
bind localhost
Wenn Sie "+ 127.0.0.1 " anstelle von " localhost +" sehen, ist das in Ordnung. Fügen Sie einfach Ihre private IP-Adresse hinzu, nachdem diese bereits vorhanden ist.
Jetzt müssen Sie nur noch den Redis-Dienst neu starten, um die Änderungen zu übernehmen:
sudo service redis-server restart
Mit dieser Änderung kann jeder Server innerhalb desselben privaten Netzwerks auch eine Verbindung zu dieser Redis-Instanz herstellen.
Schritt 3 - Legen Sie ein Passwort für den Redis Server fest
Um Ihrer Redis-Installation eine zusätzliche Sicherheitsebene hinzuzufügen, sollten Sie ein Kennwort für den Zugriff auf die Serverdaten festlegen. Wir werden die gleiche Konfigurationsdatei aus dem vorherigen Schritt bearbeiten, + / etc / redis / redis.conf +
:
sudo vim /etc/redis/redis.conf
Kommentieren Sie nun die Zeile aus, die "+ requirepass +" enthält, und legen Sie ein sicheres Kennwort fest:
/etc/redis/redis.conf
requirepass
Starten Sie den Redis-Dienst neu, damit die Änderungen wirksam werden:
sudo service redis-server restart
Schritt 4 - Testen Sie die Verbindung und Authentifizierung von Redis
Um zu testen, ob alle Ihre Änderungen wie erwartet funktioniert haben, stellen Sie auf dem * redis * -Maschine eine Verbindung zum Redis-Dienst her:
redis-cli -h
Output10.133.14.9:6379>
Wenn Sie ein Passwort definiert haben und nun versuchen, auf die Daten zuzugreifen, sollten Sie einen AUTH-Fehler erhalten:
keys *
Output(error) NOAUTH Authentication required.
Um sich zu authentifizieren, müssen Sie nur den Befehl "+ AUTH " ausführen und das gleiche Passwort eingeben, das Sie in der Datei " / etc / redis / redis.conf +" definiert haben:
AUTH yourverycomplexpasswordhere
Sie sollten ein * OK * als Antwort erhalten. Wenn Sie jetzt laufen:
keys *
Die Ausgabe sollte ungefähr so aussehen:
Output(empty list or set)
Diese Ausgabe bedeutet lediglich, dass Ihr Redis-Server leer ist. Dies ist genau das, was wir erwartet haben, da der * web * -Server noch nicht so konfiguriert ist, dass er diesen Redis-Server als Sitzungshandler verwendet.
Lassen Sie diese SSH-Sitzung geöffnet und mit "+ redis-cli " verbunden, während wir die nächsten Schritte ausführen. Wir kehren zur Eingabeaufforderung " redis-cli +" zurück, um zu überprüfen, ob die Sitzungsdaten ordnungsgemäß gespeichert wurden, nachdem wir die Änderungen vorgenommen haben notwendige Änderungen am * web * server.
Schritt 5 - Installieren Sie die Redis-Erweiterung auf dem Webserver
Die nächsten Schritte sollten auf dem * Web * -Server ausgeführt werden. Wir müssen die PHP-Redis-Erweiterung installieren, sonst kann PHP keine Verbindung zum Redis-Server herstellen.
Aktualisieren Sie zunächst Ihren Paketmanager-Cache, indem Sie Folgendes ausführen:
sudo apt-get update
Dann installiere das + php5-redis +
Paket:
sudo apt-get install php5-redis
Ihr Webserver sollte nun eine Verbindung zu Redis herstellen können.
Schritt 6 - Legen Sie Redis als Standard-Sitzungshandler auf dem Webserver fest
Jetzt müssen wir die Datei "+ php.ini" auf dem * web * -Server bearbeiten, um den Standard-Session-Handler für PHP zu ändern. Der Speicherort dieser Datei hängt von Ihrem aktuellen Stapel ab. Für einen * LAMP * -Stack unter Ubuntu 14.04 ist dies normalerweise + / etc / php5 / apache2 / php.ini
. Für einen * LEMP * -Stack unter Ubuntu 14.04 lautet der Pfad normalerweise + / etc / php5 / fpm / php.ini +
.
Wenn Sie sich nicht sicher sind, wo sich Ihre Hauptdatei "+ php.ini" befindet, können Sie dies mit der Funktion "+ phpinfo () " herausfinden. Fügen Sie einfach den folgenden Code in eine Datei mit dem Namen " info.php +" in Ihrem Web-Stammverzeichnis ein:
<?php
phpinfo();
Wenn Sie über Ihren Browser auf das Skript zugreifen, suchen Sie die Zeile mit der geladenen Konfigurationsdatei. Dort sollten Sie den genauen Speicherort der geladenen Hauptdatei + php.ini +
finden.
Öffnen Sie Ihre "+ php.ini" -Datei und suchen Sie nach der Zeile, die "+ session.save_handler" enthält. Der Standardwert ist "+ files ". Sie sollten es in " redis +" ändern.
In * LAMP * -Umgebungen:
sudo vim /etc/php5/apache2/php.ini
In * LEMP * -Umgebungen:
sudo vim /etc/php5/fpm/php.ini
/etc/php5/fpm/php.ini
session.save_handler = redis
Jetzt sollten Sie die Zeile finden, die "+ session.save_path " enthält. Kommentieren Sie es aus und ändern Sie den Wert so, dass er die Redis-Verbindungszeichenfolge enthält. Der Inhalt sollte diesem Format in einer Zeile folgen: ` tcp: // IPADDRESS: PORT? Auth = REDISPASSWORD +`
/etc/php5/fpm/php.ini
session.save_path = "tcp://?auth="
Speichern Sie die Datei und starten Sie den * php * -Dienst neu.
In * LAMP * -Umgebungen:
sudo service apache2 restart
In * LEMP * -Umgebungen:
sudo service php5-fpm restart
Schritt 7 - Redis Session Handling testen
Um sicherzustellen, dass Ihre Sitzungen jetzt von Redis verarbeitet werden, benötigen Sie ein PHP-Skript oder eine PHP-Anwendung, die Informationen zu Sitzungen speichert. Wir werden ein einfaches Skript verwenden, das einen Zähler implementiert - jedes Mal, wenn Sie die Seite neu laden, wird die gedruckte Nummer erhöht.
Erstellen Sie eine Datei mit dem Namen "+ test.php +" auf dem * web * -Server und platzieren Sie sie in Ihrem Dokumentenstammordner:
sudo vim test.php
/usr/share/nginx/html/test.php
<?php
//simple counter to test sessions. should increment on each page reload.
session_start();
$count = isset($_SESSION['count']) ? $_SESSION['count'] : 1;
echo $count;
$_SESSION['count'] = ++$count;
Zeigen Sie mit Ihrem Browser auf "+ http: /// test.php +", um auf das Skript zuzugreifen. Es sollte die Zahl jedes Mal erhöhen, wenn Sie die Seite neu laden.
Jetzt sollten Sie Sitzungsinformationen auf dem Redis-Server gespeichert haben. Um dies zu überprüfen, kehren Sie zu Ihrer SSH-Sitzung auf dem * redis * -Computer zurück, auf dem wir zuvor mit + redis-cli +
eine Verbindung zum Redis-Service hergestellt haben. Rufen Sie den Inhalt erneut mit + Tasten * +
ab:
keys *
Und Sie sollten eine Ausgabe ähnlich der folgenden erhalten:
Output1) "PHPREDIS_SESSION:j9rsgtde6st2rqb6lu5u6f4h83"
Dies zeigt, dass die Sitzungsinformationen auf dem Redis-Server gespeichert werden. Auf ähnliche Weise können Sie weitere Webserver mit dem Redis-Server verbinden.
Fazit
Redis ist ein leistungsstarker und schneller Schlüsselwertspeicherdienst, der auch als Sitzungshandler für PHP verwendet werden kann und skalierbare PHP-Umgebungen ermöglicht, indem ein verteiltes System für die Sitzungsspeicherung bereitgestellt wird. Weitere Informationen zum Skalieren von PHP-Anwendungen finden Sie in diesem Artikel: Horizontally Scaling PHP Applications.