Nextcloud/Redis
Redis
Redis ist ein hervorragender moderner Memcache für verteiltes Caching und als Key-Value-Speicher für Transactional File Locking, da er garantiert, dass zwischengespeicherte Objekte so lange verfügbar sind, wie sie benötigt werden
Das PHP-Modul Redis muss Version 2.2.6+ sein
- Wenn Sie eine Linux-Distribution verwenden, in der die unterstützten Versionen dieses Moduls nicht enthalten sind oder Redis überhaupt nicht enthalten ist, lesen Sie Memcached
Unter Debian/Ubuntu/Mint installieren Sie redis-server und php-redis
- Das Installationsprogramm startet automatisch
redis-serverund konfiguriert es so, dass es beim Start gestartet wird
Unter CentOS und Fedora installieren Sie redis und php-pecl-redis
- Es wird nicht automatisch gestartet, daher müssen Sie Ihren Dienstmanager verwenden, um
rediszu starten und es beim Booten als Daemon zu starten
Sie können mit ps ax überprüfen, ob der Redis-Daemon läuft
ps ax | grep redis 22203 ? Ssl 0:00 /usr/bin/redis-server 127.0.0.1:6379
Starten Sie Ihren Webserver neu, fügen Sie die entsprechenden Einträge in Ihre config.php ein und aktualisieren Sie Ihre Nextcloud-Admin-Seite
Redis-Konfiguration in Nextcloud (config.php)
Um die beste Leistung zu erzielen, verwenden Sie Redis für die Dateisperrung, indem Sie dies hinzufügen
'memcache.locking' => '\OC\Memcache\Redis',
Außerdem sollten Sie Redis für den verteilten Server-Cache verwenden
'memcache.distributed' => '\OC\Memcache\Redis',
Außerdem könnten Sie Redis für den lokalen Cache verwenden, was aber nicht empfohlen wird (siehe Warnung unten)
'memcache.local' => '\OC\Memcache\Redis',
- Warnung
- Die Verwendung von Redis als lokaler Cache auf einem Multi-Server-System kann zu Problemen führen
- Außerdem sollte APCu (siehe Abschnitt oben) selbst bei einer Ein-Server-Konfiguration schneller sein
Wenn Sie Redis für eine der oben genannten Cache-Einstellungen verwenden, müssen Sie außerdem entweder die redis- oder die redis.cluster-Konfiguration in config.php angeben
Die folgenden Optionen können konfiguriert werden, wenn ein einzelner Redis-Server verwendet wird (alle außer Host und Port sind optional)
- Für die beiden letzteren siehe die nächsten Abschnitte)
'memcache.locking' => '\OC\Memcache\Redis', 'memcache.distributed' => '\OC\Memcache\Redis', 'memcache.local' =>'\OC\Memcache\Redis' , 'redis' => [ // 'host' => see connection parameters below // 'port' => see connection parameters below 'user' => 'nextcloud', 'password' => 'password', 'dbindex' => 0, 'timeout' => 1.5, 'read_timeout' => 1.5, ],
Die folgenden Optionen können bei der Verwendung eines Redis-Clusters konfiguriert werden (alle außer Seeds sind optional)
'memcache.locking' => '\OC\Memcache\Redis',
'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.local' =>'\OC\Memcache\Redis' ,
'redis.cluster' => [
'seeds' => [ // provide some/all of the cluster servers to bootstrap discovery, port required
'cache-cluster:7000',
'cache-cluster:7001',
'cache-cluster:7002',
'cache-cluster:7003',
'cache-cluster:7004',
'cache-cluster:7005'
],
'failover_mode' => \RedisCluster::FAILOVER_ERROR,
'timeout' => 0.0,
'read_timeout' => 0.0,
'user' => 'nextcloud',
'password' => 'password',
'dbindex' => 0,
],
Hinweis
Der Port ist als Teil der Server-URL erforderlich
- Es ist jedoch nicht erforderlich, alle Server aufzulisten: Wenn beispielsweise alle Server über denselben DNS-Namen lastverteilt sind, ist nur dieser Servername erforderlich
Verbindung über TCP
Um eine Verbindung zu einem entfernten oder lokalen Redis-Server über TCP herzustellen, verwenden Sie
'redis' => [ 'host' => 'redis-host.example.com', 'port' => 6379, ],
Verbindung über TLS
Um eine Verbindung über TCP over TLS herzustellen, fügen Sie die folgende Konfiguration hinzu
'redis' => [
'host' => 'tls://127.0.0.1',
'port' => 6379,
'ssl_context' => [
'local_cert' => '/certs/redis.crt',
'local_pk' => '/certs/redis.key',
'cafile' => '/certs/ca.crt',
'verify_peer_name' => false,
],
],
TLS-Verbindung mit Redis-Cluster
Um eine Verbindung über TCP over TLS herzustellen, fügen Sie die folgende Konfiguration hinzu
'redis.cluster' => [
'seeds' => [ // provide some/all of the cluster servers to bootstrap discovery, port required
'cache-cluster:7000',
'cache-cluster:7001',
],
'ssl_context' => [
'local_cert' => '/certs/redis.crt',
'local_pk' => '/certs/redis.key',
'cafile' => '/certs/ca.crt',
'verify_peer_name' => false,
],
],
Verbindung über UNIX-Socket
Wenn Sie eine Verbindung zu Redis herstellen möchten, die so konfiguriert ist, dass sie auf einem Unix-Socket lauscht (was empfohlen wird, wenn Redis auf demselben System wie Nextcloud läuft), verwenden Sie diese Beispielkonfigurationconfig.php
'redis' => [ 'host' => '/run/redis/redis-server.sock', 'port' => 0, ],
Nur die Variablen "host" und "port" sind erforderlich, die anderen sind optional
Aktualisieren Sie die redis-Konfiguration in /etc/redis/redis.conf entsprechend: Entfernen Sie die Unix-Socket-Optionen und stellen Sie sicher, dass die Einstellungen für "socket" und "port" mit Ihrer Nextcloud-Konfiguration übereinstimmen
Stellen Sie sicher, dass Sie die richtigen Berechtigungen für redis.sock setzen, damit Ihr Webserver darauf lesen und schreiben kann
- Dazu müssen Sie normalerweise den Webserver-Benutzer zur redis-Gruppe hinzufügen
usermod -a -G redis www-data
Und ändern Sie die unixsocketperm der redis.conf entsprechend
unixsocketperm 770
Möglicherweise müssen Sie Apache und Redis neu starten, damit die Änderungen wirksam werden
systemctl restart apache2 systemctl restart redis-server
Redis ist sehr konfigurierbar; lesen Sie die Redis-Dokumentation, um mehr zu erfahren
Verwendung der Redis-Sitzunghandler
Wenn Sie Redis zum Sperren und/oder Zwischenspeichern verwenden, möchten Sie Redis vielleicht auch für die Sitzungsverwaltung nutzen
- Redis kann für die zentrale Sitzungsverwaltung über mehrere Nextcloud-Anwendungsserver hinweg verwendet werden, im Gegensatz zum Standard Handler
- Wenn Sie den Redis-Handler verwenden, MÜSSEN Sie jedoch sicherstellen, dass die Sitzungssperre aktiviert ist
- Zum jetzigen Zeitpunkt aktiviert der Redis Session Handler standardmäßig KEIN Session Locking, was in einigen Nextcloud-Applikationen, die stark von Session Writes Gebrauch machen, wie z.B
- Talk, zu Session Corruption führen kann
- Darüber hinaus gibt der Redis-Session-Handler derzeit keinen Fehler zurück, wenn die Anwendung keine Sperre erhält, selbst wenn das Session Locking aktiviert ist
- Durch Hinzufügen der folgenden Einstellungen in Ihrer
php.ini-Dateikönnen Sie Sitzungsstörungen verhindern, wenn Sie Redis als Sitzungshandler verwenden
redis.session.locking_enabled=1 redis.session.lock_retries=-1 redis.session.lock_wait_time=10000
Weitere Informationen zur Konfiguration des phpredis Session Handlers finden Sie auf derPhpRedis GitHub Seite