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-server
und 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
redis
zu 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-Datei
kö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