Zum Inhalt springen

Nextcloud/Redis

Aus Foxwiki

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, umredis 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