Zum Inhalt springen

Nextcloud/Redis: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
K Textersetzung - „ TCP“ durch „ TCP
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 13: Zeile 13:
Sie können mit <code>ps ax</code> überprüfen, ob der Redis-Daemon läuft
Sie können mit <code>ps ax</code> überprüfen, ob der Redis-Daemon läuft
  ps ax | grep redis
  ps ax | grep redis
  22203 ? Ssl   0:00 /usr/bin/redis-server 127.0.0.1:6379
  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 <code>config.php</code> ein und aktualisieren Sie Ihre Nextcloud-Admin-Seite
Starten Sie Ihren Webserver neu, fügen Sie die entsprechenden Einträge in Ihre <code>config.php</code> ein und aktualisieren Sie Ihre Nextcloud-Admin-Seite


Zeile 36: Zeile 36:
  'memcache.local' =>'\OC\Memcache\Redis' ,
  'memcache.local' =>'\OC\Memcache\Redis' ,
  'redis' => [
  'redis' => [
    // 'host'     => see connection parameters below
  // 'host'   => see connection parameters below
    // 'port'     => see connection parameters below
  // 'port'   => see connection parameters below
  'user'         => 'nextcloud',
  'user'     => 'nextcloud',
  'password'     => 'password',
  'password'   => 'password',
  'dbindex'       => 0,
  'dbindex'   => 0,
  'timeout'       => 1.5,
  'timeout'   => 1.5,
  'read_timeout' => 1.5,
  'read_timeout' => 1.5,
  ],
  ],
Die folgenden Optionen können bei der Verwendung eines Redis-Clusters konfiguriert werden (alle außer <code>Seeds</code> sind optional)
Die folgenden Optionen können bei der Verwendung eines Redis-Clusters konfiguriert werden (alle außer <code>Seeds</code> sind optional)
Zeile 49: Zeile 49:
  'memcache.local' =>'\OC\Memcache\Redis' ,
  'memcache.local' =>'\OC\Memcache\Redis' ,
  'redis.cluster' => [
  'redis.cluster' => [
    'seeds' => [ // provide some/all of the cluster servers to bootstrap discovery, port required
  'seeds' => [ // provide some/all of the cluster servers to bootstrap discovery, port required
      'cache-cluster:7000',
    'cache-cluster:7000',
      'cache-cluster:7001',
    'cache-cluster:7001',
      'cache-cluster:7002',
    'cache-cluster:7002',
      'cache-cluster:7003',
    'cache-cluster:7003',
      'cache-cluster:7004',
    'cache-cluster:7004',
      'cache-cluster:7005'
    'cache-cluster:7005'
    ],
  ],
    'failover_mode'   => \RedisCluster::FAILOVER_ERROR,
  'failover_mode' => \RedisCluster::FAILOVER_ERROR,
    'timeout'         => 0.0,
  'timeout'     => 0.0,
    'read_timeout'   => 0.0,
  'read_timeout' => 0.0,
    'user'           => 'nextcloud',
  'user'     => 'nextcloud',
    'password'       => 'password',
  'password'   => 'password',
    'dbindex'         => 0,
  'dbindex'     => 0,
  ],
  ],
Hinweis
Hinweis
Zeile 69: Zeile 69:
* Es ist jedoch nicht erforderlich, alle Server aufzulisten: Wenn beispielsweise alle Server über denselben DNS-Namen lastverteilt sind, ist nur dieser Servername 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 ===
=== Verbindung über [[TCP]] ===
Um eine Verbindung zu einem entfernten oder lokalen Redis-Server über TCP herzustellen, verwenden Sie
Um eine Verbindung zu einem entfernten oder lokalen Redis-Server über [[TCP]] herzustellen, verwenden Sie
  'redis' => [
  'redis' => [
    'host' => 'redis-host.example.com',
  'host' => 'redis-host.example.com',
    'port' => 6379,
  'port' => 6379,
  ],
  ],


=== Verbindung über TLS ===
=== Verbindung über TLS ===
Um eine Verbindung über TCP over TLS herzustellen, fügen Sie die folgende Konfiguration hinzu
Um eine Verbindung über [[TCP]] over TLS herzustellen, fügen Sie die folgende Konfiguration hinzu
  'redis' => [
  'redis' => [
    'host' => 'tls://127.0.0.1',
  'host' => 'tls://127.0.0.1',
    'port' => 6379,
  'port' => 6379,
    'ssl_context' => [
  'ssl_context' => [
      'local_cert' => '/certs/redis.crt',
    'local_cert' => '/certs/redis.crt',
      'local_pk' => '/certs/redis.key',
    'local_pk' => '/certs/redis.key',
      'cafile' => '/certs/ca.crt',
    'cafile' => '/certs/ca.crt',
      'verify_peer_name' => false,
    'verify_peer_name' => false,
    ],
  ],
  ],
  ],


=== TLS-Verbindung mit Redis-Cluster ===
=== TLS-Verbindung mit Redis-Cluster ===
Um eine Verbindung über TCP over TLS herzustellen, fügen Sie die folgende Konfiguration hinzu
Um eine Verbindung über [[TCP]] over TLS herzustellen, fügen Sie die folgende Konfiguration hinzu
  'redis.cluster' => [
  'redis.cluster' => [
    'seeds' => [ // provide some/all of the cluster servers to bootstrap discovery, port required
  'seeds' => [ // provide some/all of the cluster servers to bootstrap discovery, port required
      'cache-cluster:7000',
    'cache-cluster:7000',
      'cache-cluster:7001',
    'cache-cluster:7001',
    ],
  ],
    'ssl_context' => [
  'ssl_context' => [
      'local_cert' => '/certs/redis.crt',
    'local_cert' => '/certs/redis.crt',
      'local_pk' => '/certs/redis.key',
    'local_pk' => '/certs/redis.key',
      'cafile' => '/certs/ca.crt',
    'cafile' => '/certs/ca.crt',
      'verify_peer_name' => false,
    'verify_peer_name' => false,
    ],
  ],
  ],
  ],


Zeile 107: Zeile 107:
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 Beispielkonfiguration<code>config.php</code>
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 Beispielkonfiguration<code>config.php</code>
  'redis' => [
  'redis' => [
    'host'     => '/run/redis/redis-server.sock',
  'host'   => '/run/redis/redis-server.sock',
    'port'     => 0,
  'port'   => 0,
  ],
  ],



Aktuelle Version vom 4. Juli 2026, 11:58 Uhr

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