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