Nextcloud/Memory caching: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
Sie können die Leistung Ihres Nextcloud-Servers mit Memory Caching erheblich verbessern. Dabei werden häufig angefragte Objekte im Speicher abgelegt, um sie schneller abrufen zu können. Es gibt zwei Arten von Caches, die Sie verwenden können: einen PHP-Opcode-Cache, der allgemein als ''Opcache'' bezeichnet wird, und einen Daten-Cache für Ihren Webserver, der allgemein als "Memcache" bezeichnet wird.
Sie können die Leistung Ihres Nextcloud-Servers mit Memory Caching erheblich verbessern
* Dabei werden häufig angefragte Objekte im Speicher abgelegt, um sie schneller abrufen zu können
* Es gibt zwei Arten von Caches, die Sie verwenden können: einen PHP-Opcode-Cache, der allgemein als ''Opcache'' bezeichnet wird, und einen Daten-Cache für Ihren Webserver, der allgemein als "Memcache" bezeichnet wird


Hinweis
Hinweis


Wenn Sie keinen lokalen Memcache installieren und aktivieren, sehen Sie eine Warnung auf Ihrer Nextcloud-Verwaltungsseite. '''Ein Memcache ist nicht erforderlich. Sie können die Warnung ignorieren, wenn Sie dies wünschen.''' Wenn Sie in Ihrer <code>config.php</code> nur einen verteilten Cache<code>(memcache.distributed</code>) und keinen lokalen Cache<code>(memcache.local</code>) aktivieren, werden Sie die Cache-Warnung trotzdem sehen.
Wenn Sie keinen lokalen Memcache installieren und aktivieren, sehen Sie eine Warnung auf Ihrer Nextcloud-Verwaltungsseite. '''Ein Memcache ist nicht erforderlich
* Sie können die Warnung ignorieren, wenn Sie dies wünschen.''' Wenn Sie in Ihrer <code>config.php</code> nur einen verteilten Cache<code>(memcache.distributed</code>) und keinen lokalen Cache<code>(memcache.local</code>) aktivieren, werden Sie die Cache-Warnung trotzdem sehen


Ein '''PHP-Opcache''' speichert kompilierte PHP-Skripte, so dass sie nicht bei jedem Aufruf neu kompiliert werden müssen. PHP bündelt den Zend OPcache seit Version 5.5 im Kern, so dass Sie keinen Opcache manuell installieren müssen.
Ein '''PHP-Opcache''' speichert kompilierte PHP-Skripte, so dass sie nicht bei jedem Aufruf neu kompiliert werden müssen
* PHP bündelt den Zend OPcache seit Version 5.5 im Kern, so dass Sie keinen Opcache manuell installieren müssen


Das '''Datencaching''' wird vom Benutzer bereitgestellt. Nextcloud unterstützt mehrere Speicher-Caching-Backends, so dass Sie die Art von Memcache wählen können, die Ihren Bedürfnissen am besten entspricht. Die unterstützten Caching-Backends sind:
Das '''Datencaching''' wird vom Benutzer bereitgestellt
* Nextcloud unterstützt mehrere Speicher-Caching-Backends, so dass Sie die Art von Memcache wählen können, die Ihren Bedürfnissen am besten entspricht
* Die unterstützten Caching-Backends sind


{|
{|
Zeile 17: Zeile 23:
|}
|}


Datencaches oder Memcaches müssen in Nextcloud explizit konfiguriert werden, indem Sie den gewünschten Cache installieren und aktivieren und dann den entsprechenden Eintrag in der<code>config.php</code> hinzufügen (siehe Konfigurationsparameter für einen Überblick über alle möglichen Konfigurationsparameter).
Datencaches oder Memcaches müssen in Nextcloud explizit konfiguriert werden, indem Sie den gewünschten Cache installieren und aktivieren und dann den entsprechenden Eintrag in der<code>config.php</code> hinzufügen (siehe Konfigurationsparameter für einen Überblick über alle möglichen Konfigurationsparameter)


== Empfehlungen ==
== Empfehlungen ==
Sie können sowohl einen lokalen als auch einen verteilten Cache verwenden. Empfohlene Caches sind APCu und Redis. Nachdem Sie den von Ihnen gewählten Memcache (Daten-Cache) installiert und aktiviert haben, überprüfen Sie, ob er aktiv ist, indem Sie die PHP-Version und -Informationen ausführen.
Sie können sowohl einen lokalen als auch einen verteilten Cache verwenden
* Empfohlene Caches sind APCu und Redis
* Nachdem Sie den von Ihnen gewählten Memcache (Daten-Cache) installiert und aktiviert haben, überprüfen Sie, ob er aktiv ist, indem Sie die PHP-Version und -Informationen ausführen


; Hinweis
; Hinweis
: Spezifische Optionen für die Cache-Konfiguration finden Sie im entsprechenden Abschnitt weiter unten.
: Spezifische Optionen für die Cache-Konfiguration finden Sie im entsprechenden Abschnitt weiter unten


=== Kleiner Server ===
=== Kleiner Server ===
Verwenden Sie nur APCu:
Verwenden Sie nur APCu
  'memcache.local' => '\OC\Memcache\APCu',
  'memcache.local' => '\OC\Memcache\APCu',


=== Organisationen mit Einzel-server ===
=== Organisationen mit Einzel-server ===
Verwenden Sie Redis für alles außer dem lokalen Memcache:
Verwenden Sie Redis für alles außer dem lokalen Memcache
  'memcache.local' => '\OC\Memcache\APCu',
  'memcache.local' => '\OC\Memcache\APCu',
  'memcache.distributed' => '\OC\Memcache\Redis',
  'memcache.distributed' => '\OC\Memcache\Redis',
Zeile 40: Zeile 48:


=== Organisationen mit gebündeltensetups ===
=== Organisationen mit gebündeltensetups ===
Verwenden Sie APCu für den lokalen Cache und entweder Redis-Cluster ...:
Verwenden Sie APCu für den lokalen Cache und entweder Redis-Cluster ...
  'memcache.local' => '\OC\Memcache\APCu',
  'memcache.local' => '\OC\Memcache\APCu',
  'memcache.distributed' => '\OC\Memcache\Redis',
  'memcache.distributed' => '\OC\Memcache\Redis',
Zeile 50: Zeile 58:
     ],
     ],
   ],
   ],
... oder Memcached-Cluster ...:
..
* oder Memcached-Cluster ...
  'memcache.local' => '\OC\Memcache\APCu',
  'memcache.local' => '\OC\Memcache\APCu',
  'memcache.distributed' => '\OC\Memcache\Memcached',
  'memcache.distributed' => '\OC\Memcache\Memcached',
Zeile 58: Zeile 67:
     [ 'server2.example.com', 11211 ],
     [ 'server2.example.com', 11211 ],
   ],
   ],
... für verteilte und sperrende Caches.
..
* für verteilte und sperrende Caches


; Hinweis
; Hinweis
: Wenn Sie mehrere Webserver betreiben und in Ihrer <code>config.php</code> einen verteilten Cache<code>(memcache.distributed</code>) oder einen File-Locking-Provider<code>(memcache.locking</code>) aktivieren, müssen Sie sicherstellen, dass sie sich auf denselben memcache-Server/Cluster beziehen und nicht auf <code>localhost</code> oder einen Unix-Socket.
: Wenn Sie mehrere Webserver betreiben und in Ihrer <code>config.php</code> einen verteilten Cache<code>(memcache.distributed</code>) oder einen File-Locking-Provider<code>(memcache.locking</code>) aktivieren, müssen Sie sicherstellen, dass sie sich auf denselben memcache-Server/Cluster beziehen und nicht auf <code>localhost</code> oder einen Unix-Socket


=== Redis vs. APCu ===
=== Redis vs
; Hinweise zu Redis vs. APCu zum Thema Speichercaching
* APCu ===
* APCu ist beim lokalen Caching schneller als Redis.
; Hinweise zu Redis vs
* Wenn Sie genügend Speicher haben, verwenden Sie APCu für das Memory Caching und Redis für das File Locking.
* APCu zum Thema Speichercaching
* Wenn Sie wenig Speicherplatz haben, verwenden Sie Redis für beides.
* APCu ist beim lokalen Caching schneller als Redis
* Wenn Sie genügend Speicher haben, verwenden Sie APCu für das Memory Caching und Redis für das File Locking
* Wenn Sie wenig Speicherplatz haben, verwenden Sie Redis für beides


== APCu ==
== APCu ==
APCu ist ein Daten-Cache, der in den meisten Linux-Distributionen verfügbar ist. Auf Red Hat/CentOS/Fedora-Systemen installieren Sie<code>php-pecl-apcu</code>. Auf Debian/Ubuntu/Mint-Systemen installieren Sie <code>php-apcu</code>.
APCu ist ein Daten-Cache, der in den meisten Linux-Distributionen verfügbar ist
* Auf Red Hat/CentOS/Fedora-Systemen installieren Sie<code>php-pecl-apcu</code>
* Auf Debian/Ubuntu/Mint-Systemen installieren Sie <code>php-apcu</code>


Nachdem Sie Ihren Webserver neu gestartet haben, fügen Sie diese Zeile in Ihre <code>config.php-Datei</code> ein:
Nachdem Sie Ihren Webserver neu gestartet haben, fügen Sie diese Zeile in Ihre <code>config.php-Datei</code> ein
  'memcache.local' => '\OC\Memcache\APCu',
  'memcache.local' => '\OC\Memcache\APCu',
Aktualisieren Sie Ihre Nextcloud-Verwaltungsseite, und die Cache-Warnung sollte verschwinden.
Aktualisieren Sie Ihre Nextcloud-Verwaltungsseite, und die Cache-Warnung sollte verschwinden


; Warnung
; Warnung
: APCu ist standardmäßig im CLI deaktiviert, was zu Problemen mit den Cron-Jobs von nextcloud führen kann. Bitte stellen Sie sicher, dass Sie <code>apc.enable_cli</code> in Ihrer <code>php.ini-Konfigurationsdatei</code>auf <code>1</code> setzen oder fügen Sie <code>--define apc.enable_cli=1</code> an den Cron-Job-Aufruf an.
: APCu ist standardmäßig im CLI deaktiviert, was zu Problemen mit den Cron-Jobs von nextcloud führen kann
* Bitte stellen Sie sicher, dass Sie <code>apc.enable_cli</code> in Ihrer <code>php.ini-Konfigurationsdatei</code>auf <code>1</code> setzen oder fügen Sie <code>--define apc.enable_cli=1</code> an den Cron-Job-Aufruf an


== 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.
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.
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 <code>redis-server</code> und <code>php-redis</code>. Das Installationsprogramm startet automatisch <code>redis-server</code> und konfiguriert es so, dass es beim Start gestartet wird.
Unter Debian/Ubuntu/Mint installieren Sie <code>redis-server</code> und <code>php-redis</code>
* Das Installationsprogramm startet automatisch <code>redis-server</code> und konfiguriert es so, dass es beim Start gestartet wird


Unter CentOS und Fedora installieren Sie <code>redis</code> und <code>php-pecl-redis</code>. Es wird nicht automatisch gestartet, daher müssen Sie Ihren Dienstmanager verwenden, um<code>redis</code> zu starten und es beim Booten als Daemon zu starten.
Unter CentOS und Fedora installieren Sie <code>redis</code> und <code>php-pecl-redis</code>
* Es wird nicht automatisch gestartet, daher müssen Sie Ihren Dienstmanager verwenden, um<code>redis</code> zu starten und es beim Booten als Daemon zu starten


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


=== Redis-Konfiguration in Nextcloud (config.php) ===
=== Redis-Konfiguration in Nextcloud (config.php) ===
Um die beste Leistung zu erzielen, verwenden Sie Redis für die Dateisperrung, indem Sie dies hinzufügen:
Um die beste Leistung zu erzielen, verwenden Sie Redis für die Dateisperrung, indem Sie dies hinzufügen
  'memcache.locking' => '\OC\Memcache\Redis',
  'memcache.locking' => '\OC\Memcache\Redis',
Außerdem sollten Sie Redis für den verteilten Server-Cache verwenden:
Außerdem sollten Sie Redis für den verteilten Server-Cache verwenden
  'memcache.distributed' => '\OC\Memcache\Redis',
  '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):
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',
  'memcache.local' => '\OC\Memcache\Redis',


; Warnung
; 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.
: 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 <code>redis-</code> oder die <code>redis.cluster-Konfiguration</code> in <code>config.php</code> angeben.
Wenn Sie Redis für eine der oben genannten Cache-Einstellungen verwenden, müssen Sie außerdem entweder die <code>redis-</code> oder die <code>redis.cluster-Konfiguration</code> in <code>config.php</code> angeben


Die folgenden Optionen können konfiguriert werden, wenn ein einzelner Redis-Server verwendet wird (alle außer <code>Host</code> und <code>Port</code> sind optional). Für die beiden letzteren siehe die nächsten Abschnitte):
Die folgenden Optionen können konfiguriert werden, wenn ein einzelner Redis-Server verwendet wird (alle außer <code>Host</code> und <code>Port</code> sind optional)
* Für die beiden letzteren siehe die nächsten Abschnitte)
  'memcache.locking' => '\OC\Memcache\Redis',
  'memcache.locking' => '\OC\Memcache\Redis',
  'memcache.distributed' => '\OC\Memcache\Redis',
  'memcache.distributed' => '\OC\Memcache\Redis',
Zeile 119: Zeile 139:
   '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)
  'memcache.locking' => '\OC\Memcache\Redis',
  'memcache.locking' => '\OC\Memcache\Redis',
  'memcache.distributed' => '\OC\Memcache\Redis',
  'memcache.distributed' => '\OC\Memcache\Redis',
Zeile 141: Zeile 161:
Hinweis
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.
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 ===
=== 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',
Zeile 151: Zeile 172:


=== 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',
Zeile 164: Zeile 185:


=== 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
Zeile 179: Zeile 200:


=== Verbindung über UNIX-Socket ===
=== 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 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',
Zeile 185: Zeile 206:
  ],
  ],


Nur die Variablen "host" und "port" sind erforderlich, die anderen sind optional.
Nur die Variablen "host" und "port" sind erforderlich, die anderen sind optional


Aktualisieren Sie die redis-Konfiguration in <code>/etc/redis/redis.conf</code> entsprechend: Entfernen Sie die Unix-Socket-Optionen und stellen Sie sicher, dass die Einstellungen für "socket" und "port" mit Ihrer Nextcloud-Konfiguration übereinstimmen.
Aktualisieren Sie die redis-Konfiguration in <code>/etc/redis/redis.conf</code> 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:
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
  usermod -a -G redis www-data
Und ändern Sie die <code>unixsocketperm</code> der <code>redis.conf</code> entsprechend:
Und ändern Sie die <code>unixsocketperm</code> der <code>redis.conf</code> entsprechend
  unixsocketperm 770
  unixsocketperm 770
Möglicherweise müssen Sie Apache und Redis neu starten, damit die Änderungen wirksam werden:
Möglicherweise müssen Sie Apache und Redis neu starten, damit die Änderungen wirksam werden
  systemctl restart apache2
  systemctl restart apache2
  systemctl restart redis-server
  systemctl restart redis-server
Redis ist sehr konfigurierbar; lesen Sie die Redis-Dokumentation, um mehr zu erfahren.
Redis ist sehr konfigurierbar; lesen Sie die Redis-Dokumentation, um mehr zu erfahren


=== Verwendung der Redis-Sitzunghandler ===
=== 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 <code>php.ini-Datei</code> können Sie Sitzungsstörungen verhindern, wenn Sie Redis als Sitzungshandler verwenden:
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 <code>php.ini-Datei</code> können Sie Sitzungsstörungen verhindern, wenn Sie Redis als Sitzungshandler verwenden
  redis.session.locking_enabled=1
  redis.session.locking_enabled=1
  redis.session.lock_retries=-1
  redis.session.lock_retries=-1
Zeile 206: Zeile 234:


== Memcached ==
== Memcached ==
Memcached ist ein zuverlässiger Oldtimer für die gemeinsame Zwischenspeicherung auf verteilten Servern und funktioniert gut mit Nextcloud, mit einer Ausnahme: Es ist nicht für die Verwendung mit Transactional File Lockinggeeignet, da es keine Sperren speichert und Daten jederzeit aus dem Cache verschwinden können (Redis ist der beste Memcache dafür).
Memcached ist ein zuverlässiger Oldtimer für die gemeinsame Zwischenspeicherung auf verteilten Servern und funktioniert gut mit Nextcloud, mit einer Ausnahme: Es ist nicht für die Verwendung mit Transactional File Lockinggeeignet, da es keine Sperren speichert und Daten jederzeit aus dem Cache verschwinden können (Redis ist der beste Memcache dafür)


Hinweis
Hinweis


Stellen Sie sicher, dass Sie das PHP-Modul '''memcached''' installieren und nicht memcache, wie in den folgenden Beispielen. Nextcloud unterstützt nur das PHP-Modul '''memcached'''.
Stellen Sie sicher, dass Sie das PHP-Modul '''memcached''' installieren und nicht memcache, wie in den folgenden Beispielen
* Nextcloud unterstützt nur das PHP-Modul '''memcached'''


Die Einrichtung von Memcached ist einfach. Unter Debian/Ubuntu/Mint installieren Sie <code>memcached</code> und<code>php-memcached</code>. Das Installationsprogramm wird <code>memcached</code> automatisch starten und so konfigurieren, dass es beim Start gestartet wird.
Die Einrichtung von Memcached ist einfach
* Unter Debian/Ubuntu/Mint installieren Sie <code>memcached</code> und<code>php-memcached</code>
* Das Installationsprogramm wird <code>memcached</code> automatisch starten und so konfigurieren, dass es beim Start gestartet wird


Unter Red Hat/CentOS/Fedora installieren Sie <code>memcached</code> und<code>php-pecl-memcached</code>. Es wird nicht automatisch gestartet, so dass Sie Ihren Dienstmanager verwenden müssen, um <code>memcached</code> zu starten und es beim Booten als Daemon zu starten.
Unter Red Hat/CentOS/Fedora installieren Sie <code>memcached</code> und<code>php-pecl-memcached</code>
* Es wird nicht automatisch gestartet, so dass Sie Ihren Dienstmanager verwenden müssen, um <code>memcached</code> zu starten und es beim Booten als Daemon zu starten


Sie können mit <code>ps ax</code> überprüfen, ob der Memcached-Daemon läuft:
Sie können mit <code>ps ax</code> überprüfen, ob der Memcached-Daemon läuft
  ps ax | grep memcached
  ps ax | grep memcached
  19563 ? Sl 0:02 /usr/bin/memcached -m 64 -p 11211 -u memcache -l
  19563 ? Sl 0:02 /usr/bin/memcached -m 64 -p 11211 -u memcache -l
  127.0.0.1
  127.0.0.1
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


=== Memcached-Konfiguration in Nextcloud (config.php)  ===
=== Memcached-Konfiguration in Nextcloud (config.php)  ===
Dieses Beispiel verwendet APCu für den lokalen Cache, Memcached als verteilten Memcache und listet alle Server im gemeinsamen Cache-Pool mit ihren Portnummern auf:
Dieses Beispiel verwendet APCu für den lokalen Cache, Memcached als verteilten Memcache und listet alle Server im gemeinsamen Cache-Pool mit ihren Portnummern auf
  'memcache.local' => '\OC\Memcache\APCu',
  'memcache.local' => '\OC\Memcache\APCu',
  'memcache.distributed' => '\OC\Memcache\Memcached',
  'memcache.distributed' => '\OC\Memcache\Memcached',
Zeile 234: Zeile 266:


== Cache-Verzeichnislocation ==
== Cache-Verzeichnislocation ==
Das Cache-Verzeichnis ist standardmäßig <code>data/$user/cache</code>, wobei <code>$user</code> der aktuelle Benutzer ist. Sie können die Direktive <code>"cache_path"</code> in <code>config.php</code>(siehe Konfigurationsparameter) verwenden, um einen anderen Speicherort auszuwählen.
Das Cache-Verzeichnis ist standardmäßig <code>data/$user/cache</code>, wobei <code>$user</code> der aktuelle Benutzer ist
* Sie können die Direktive <code>"cache_path"</code> in <code>config.php</code>(siehe Konfigurationsparameter) verwenden, um einen anderen Speicherort auszuwählen

Version vom 15. Juni 2024, 09:26 Uhr

Sie können die Leistung Ihres Nextcloud-Servers mit Memory Caching erheblich verbessern

  • Dabei werden häufig angefragte Objekte im Speicher abgelegt, um sie schneller abrufen zu können
  • Es gibt zwei Arten von Caches, die Sie verwenden können: einen PHP-Opcode-Cache, der allgemein als Opcache bezeichnet wird, und einen Daten-Cache für Ihren Webserver, der allgemein als "Memcache" bezeichnet wird

Hinweis

Wenn Sie keinen lokalen Memcache installieren und aktivieren, sehen Sie eine Warnung auf Ihrer Nextcloud-Verwaltungsseite. Ein Memcache ist nicht erforderlich

  • Sie können die Warnung ignorieren, wenn Sie dies wünschen. Wenn Sie in Ihrer config.php nur einen verteilten Cache(memcache.distributed) und keinen lokalen Cache(memcache.local) aktivieren, werden Sie die Cache-Warnung trotzdem sehen

Ein PHP-Opcache speichert kompilierte PHP-Skripte, so dass sie nicht bei jedem Aufruf neu kompiliert werden müssen

  • PHP bündelt den Zend OPcache seit Version 5.5 im Kern, so dass Sie keinen Opcache manuell installieren müssen

Das Datencaching wird vom Benutzer bereitgestellt

  • Nextcloud unterstützt mehrere Speicher-Caching-Backends, so dass Sie die Art von Memcache wählen können, die Ihren Bedürfnissen am besten entspricht
  • Die unterstützten Caching-Backends sind
APCu, APCu 4.0.6 und höher erforderlich Ein lokaler Cache für Systeme
Redis, PHP-Modul 2.2.6 und höher erforderlich Für lokales und verteiltes Caching sowie transaktionale Dateisperren
Memcached Für die verteilte Zwischenspeicherung

Datencaches oder Memcaches müssen in Nextcloud explizit konfiguriert werden, indem Sie den gewünschten Cache installieren und aktivieren und dann den entsprechenden Eintrag in derconfig.php hinzufügen (siehe Konfigurationsparameter für einen Überblick über alle möglichen Konfigurationsparameter)

Empfehlungen

Sie können sowohl einen lokalen als auch einen verteilten Cache verwenden

  • Empfohlene Caches sind APCu und Redis
  • Nachdem Sie den von Ihnen gewählten Memcache (Daten-Cache) installiert und aktiviert haben, überprüfen Sie, ob er aktiv ist, indem Sie die PHP-Version und -Informationen ausführen
Hinweis
Spezifische Optionen für die Cache-Konfiguration finden Sie im entsprechenden Abschnitt weiter unten

Kleiner Server

Verwenden Sie nur APCu

'memcache.local' => '\OC\Memcache\APCu',

Organisationen mit Einzel-server

Verwenden Sie Redis für alles außer dem lokalen Memcache

'memcache.local' => '\OC\Memcache\APCu',
'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => [
     'host' => 'localhost',
     'port' => 6379,
],

Organisationen mit gebündeltensetups

Verwenden Sie APCu für den lokalen Cache und entweder Redis-Cluster ...

'memcache.local' => '\OC\Memcache\APCu',
'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis.cluster' => [
    'seeds' => [ // provide some/all of the cluster servers to bootstrap discovery, port required
       'cache-cluster:7000',
       'cache-cluster:7001',
    ],
 ],

..

  • oder Memcached-Cluster ...
'memcache.local' => '\OC\Memcache\APCu',
'memcache.distributed' => '\OC\Memcache\Memcached',
'memcache.locking' => '\OC\Memcache\Memcached',
'memcached_servers' => [
    [ 'server1.example.com', 11211 ],
    [ 'server2.example.com', 11211 ],
 ],

..

  • für verteilte und sperrende Caches
Hinweis
Wenn Sie mehrere Webserver betreiben und in Ihrer config.php einen verteilten Cache(memcache.distributed) oder einen File-Locking-Provider(memcache.locking) aktivieren, müssen Sie sicherstellen, dass sie sich auf denselben memcache-Server/Cluster beziehen und nicht auf localhost oder einen Unix-Socket

=== Redis vs

  • APCu ===
Hinweise zu Redis vs
  • APCu zum Thema Speichercaching
  • APCu ist beim lokalen Caching schneller als Redis
  • Wenn Sie genügend Speicher haben, verwenden Sie APCu für das Memory Caching und Redis für das File Locking
  • Wenn Sie wenig Speicherplatz haben, verwenden Sie Redis für beides

APCu

APCu ist ein Daten-Cache, der in den meisten Linux-Distributionen verfügbar ist

  • Auf Red Hat/CentOS/Fedora-Systemen installieren Siephp-pecl-apcu
  • Auf Debian/Ubuntu/Mint-Systemen installieren Sie php-apcu

Nachdem Sie Ihren Webserver neu gestartet haben, fügen Sie diese Zeile in Ihre config.php-Datei ein

'memcache.local' => '\OC\Memcache\APCu',

Aktualisieren Sie Ihre Nextcloud-Verwaltungsseite, und die Cache-Warnung sollte verschwinden

Warnung
APCu ist standardmäßig im CLI deaktiviert, was zu Problemen mit den Cron-Jobs von nextcloud führen kann
  • Bitte stellen Sie sicher, dass Sie apc.enable_cli in Ihrer php.ini-Konfigurationsdateiauf 1 setzen oder fügen Sie --define apc.enable_cli=1 an den Cron-Job-Aufruf an

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

Memcached

Memcached ist ein zuverlässiger Oldtimer für die gemeinsame Zwischenspeicherung auf verteilten Servern und funktioniert gut mit Nextcloud, mit einer Ausnahme: Es ist nicht für die Verwendung mit Transactional File Lockinggeeignet, da es keine Sperren speichert und Daten jederzeit aus dem Cache verschwinden können (Redis ist der beste Memcache dafür)

Hinweis

Stellen Sie sicher, dass Sie das PHP-Modul memcached installieren und nicht memcache, wie in den folgenden Beispielen

  • Nextcloud unterstützt nur das PHP-Modul memcached

Die Einrichtung von Memcached ist einfach

  • Unter Debian/Ubuntu/Mint installieren Sie memcached undphp-memcached
  • Das Installationsprogramm wird memcached automatisch starten und so konfigurieren, dass es beim Start gestartet wird

Unter Red Hat/CentOS/Fedora installieren Sie memcached undphp-pecl-memcached

  • Es wird nicht automatisch gestartet, so dass Sie Ihren Dienstmanager verwenden müssen, um memcached zu starten und es beim Booten als Daemon zu starten

Sie können mit ps ax überprüfen, ob der Memcached-Daemon läuft

ps ax | grep memcached
19563 ? Sl 0:02 /usr/bin/memcached -m 64 -p 11211 -u memcache -l
127.0.0.1

Starten Sie Ihren Webserver neu, fügen Sie die entsprechenden Einträge in Ihreconfig.php ein und aktualisieren Sie Ihre Nextcloud-Admin-Seite

Memcached-Konfiguration in Nextcloud (config.php)

Dieses Beispiel verwendet APCu für den lokalen Cache, Memcached als verteilten Memcache und listet alle Server im gemeinsamen Cache-Pool mit ihren Portnummern auf

'memcache.local' => '\OC\Memcache\APCu',
'memcache.distributed' => '\OC\Memcache\Memcached',
'memcache.locking' => '\OC\Memcache\Memcached',
'memcached_servers' => [
     [ 'server0.example.com', 11211 ],
     [ 'server1.example.com', 11211 ],
     [ 'server2.example.com', 11211 ],
 ],

Cache-Verzeichnislocation

Das Cache-Verzeichnis ist standardmäßig data/$user/cache, wobei $user der aktuelle Benutzer ist

  • Sie können die Direktive "cache_path" in config.php(siehe Konfigurationsparameter) verwenden, um einen anderen Speicherort auszuwählen