Nextcloud mit Redis als Unix socket geht nicht

Hallo,

es wird ja empfohlen, Redis als Unix socket zu nutzen, wenn alles auf dem selben Server läuft. Das klappt bei mir nicht. Wenn ich es über tcp konfiguriere geht’s.

Für die Nutzung als Unix socket steht in der /etc/redis/redis.conf

port 0
unixsocket /var/run/redis/redis-server.sock
unixsocketperm 770

Redis wurde neu gestartet und die /var/run/redis/redis.sock existiert.

Wenn ich in der config.php von Nextcloud aber versuche, den Socket zu nutzen wie in der NC-Doku beschrieben:

‚memcache.local‘ => ‚\OC\Memcache\APCu‘,
‚memcache.distributed‘ => ‚\OC\Memcache\Redis‘,
‚redis‘ => [
‚host‘ => ‚/var/run/redis/redis.sock‘,
‚port‘ => 0,
],

bekomme ich

Internal Server Error

The server encountered an internal error and was unable to complete your request.
Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report.
More details can be found in the server log.

Im Serverlog (/var/log/apache2/error.log) finde ich dann

PHP Warning: Redis::connect(): connect() failed: No such file or directory in /var/www/madita/web/lib/private/RedisFactory.php on line 92

und service redis-server status

● redis-server.service - Advanced key-value store
Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2020-06-07 17:37:52 CEST; 11min ago
Docs: http://redis.io/documentation,
man:redis-server(1)
Process: 13008 ExecStop=/bin/kill -s TERM $MAINPID (code=exited, status=0/SUCCESS)
Process: 13012 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS)
Main PID: 13032 (redis-server)
Tasks: 4 (limit: 4915)
CGroup: /system.slice/redis-server.service
└─13032 /usr/bin/redis-server 127.0.0.1:0

Jun 07 17:37:52 afs-webserver systemd[1]: Starting Advanced key-value store…
Jun 07 17:37:52 afs-webserver systemd[1]: redis-server.service: Can’t open PID file /var/run/redis/redis-server.pid (yet?) after start: No such file or directory
Jun 07 17:37:52 afs-webserver systemd[1]: Started Advanced key-value store.

Momentan komme ich dem Fehler einfach nicht auf die Schliche.

Funktioniert das bei euch mit dem Unix socket oder nutzt ihr alle die tcp-Variante?

Viele Grüße
Steffen

Auch hier: schau mal in the fred nach Nextcloud / php (fpm) tuning Ich glaube, dort habe ich dokumentiert, was ich für redis als unix socket gemacht habe…
Vg, Tobias

Hallo Tobias,

leider nein, von der Redis Config ist da leider nicht die Rede. Aber verstehe ich dich richtig: Du hast Redis in der NC auch als Unix socket konfiguriert?

Viele Grüße
Steffen

Du hast recht, ich finde es dort auch nicht, also hier meine Redis und nextcloud config dazu:

root@nextcloud:/etc/redis# egrep -v '^#|^$' redis.conf   | head -15
bind 127.0.0.1 ::1
protected-mode yes
port 0
tcp-backlog 511
unixsocket /run/redis/redis.sock
unixsocketperm 770 
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /var/run/redis/redis-server.pid
loglevel notice
logfile /var/log/redis/redis-server.log
databases 16
always-show-logo yes

und nextcloud:

  'memcache.local' => '\\OC\\Memcache\\Redis',
  'filelocking.enabled' => true,
  'memcache.locking' => '\\OC\\Memcache\\Redis',
  'redis' => 
  array (
    'host' => '/run/redis/redis.sock',
    'port' => 0,
    'timeout' => 1.5,
  ),

außerdem: gehört „www-data“ der Gruppe „redis“ an!!!

VG, Tobias

unsinnigerweise sollte bei mir die PIDFILE eigentlich auch noch nach „/run/redis/redis-server.pid“. Aber vllt. kannst du auch einfach alles unter „/var/run“ belassen, weil das eh verlinkt wird.

VG, tobias

Hallo Tobias,

danke, schaue ich mir morgen an.

Viele Grüße
Steffen

Hallo Tobias,

leider funktioniert das bei mir mit deinen Einstellungen noch immer nicht. Gleiches Problem.

Nach dem Restart von Redis steht im Redis-Log in /var/log/redis/redis-server.log:

3271:M 09 Jun 10:28:41.041 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
3271:M 09 Jun 10:28:41.041 # Server initialized
3271:M 09 Jun 10:28:41.041 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add ‚vm.overcommit_memory = 1‘ to /etc/sysctl.conf and then reboot or r$
3271:M 09 Jun 10:28:41.041 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo ne$
3271:M 09 Jun 10:28:41.043 * DB loaded from disk: 0.002 seconds
3271:M 09 Jun 10:28:41.043 * The server is now ready to accept connections at /run/redis/redis-server.sock

Die letzte Meldung klingt trotz der Warnings vielversprechend, aber NC bringt wie oben geschrieben den Internal Server Error.

Meinst du, die Warnings sind das Problem? Kannst du mal bitte schauen, was das Log bei Restart bei dir meldet?

Wo kann ich noch suchen, warum das über Unix Socket bei mir nicht klappt?

Viele Grüße
Steffen

Hallo,

das Problem ist gelöst. In der redis.conf war der Name der Socket Datei redis-server.sock (habe ich nur einkommentiert), in der config.php von NC nur redis.sock wie in der NC Doku angegeben (siehe auch meine gepostete Config oben).

Unglaublich - immer diese Tomaten auf den Augen :smiley:

Viele Grüße
Steffen