Come configurare memcached per usare unix socket?


12

Mentre potrei usare memcached su Debian per usare la porta 11211 predefinita, ma ho avuto grosse difficoltà a configurare il socket Unix.

Da quello che ho letto, so che devo creare un memcache.sockete aggiungere:

-s /path/to/memcache.socket
-a 0766

Per /etc/memcached.confcommentare la porta di connessione e l'IP predefiniti, ad es

-p 11211 
-l 127.0.0.1

Tuttavia, quando riavvio memcached ottengo errori del server interno sul sito Drupal.

Sto cercando di implementare socket unix per evitare il sovraccarico TCP / IP e aumentare le prestazioni complessive memcached, tuttavia non sono sicuro di quanto guadagno ci si può aspettare da questo tweak.

Apprezzo i tuoi suggerimenti o eventualmente configurazioni per risolvere questo problema.


Supponendo che memcached sia in esecuzione, hai configurato Drupal per utilizzare il socket?
cjc,

Sì, Drupal è stato impostato per utilizzare memcached e funziona correttamente quando utilizzo la porta 11211.
Alfish,

Il / path / to / completamente leggibile / eseguibile dall'utente che esegue Drupal? Non intendo il file socket stesso; l'utente Drupal dovrà anche essere in grado di discendere la gerarchia di directory.
cjc,

Risposte:


12

È possibile che l'impostazione del percorso del socket non funzioni. Memcached rilascia i privilegi prima di creare il suo socket, anche se dopo aver scritto il suo PID. È comune inserire il socket /var/run(ad esempio come fa mysql), ma solo root può scrivere lì, quindi /var/run/memcachedcrealo e chown a nessuno, quindi impostalo /var/run/memcached/memcached.sockcome percorso del socket. Anche scriverlo /tmpfunzionerebbe, ma per sua stessa natura potrebbe essere spazzato via; attaccarlo /var/runè un po 'più permanente.

Puoi verificare che funzioni usando netcat per connetterti ad esso:

nc -U /var/run/memcached/memcached.sock

Basta digitare statsal prompt vuoto; se funziona otterrai un carico di output.


1
Questo ha funzionato per me, piuttosto che per l'altra risposta. Ovviamente nobodynon è possibile scrivere in una cartella di proprietà root senza l'autorizzazione appropriata.
Daniel W.

8

Credo che il socket dovrà essere eseguibile a livello mondiale, non scrivibile. Se visualizzi un messaggio di avviso PHP contenente errno = 32 Broken pipe , regola la maschera di accesso Memcached su 0755

-s /path/to/memcache.socket
-a 0755

Verifica anche che il demone Memcached di Drupal abbia la porta TCP 0nella configurazione. Una porta non impostata verrà impostata 11211e confonderà automaticamente la connessione socket.

$conf += array(
    'memcache_servers' => array(
        'unix:///path/to/memcache.socket:0'  => 'default',
    )
);

Credo che la maschera dovrebbe essere 766 o 666 in quanto è necessario leggere / scrivere.
Arleslie,

6

aggiunto a / etc / default / memcached:

[ ENABLE_MEMCACHED = yes ] && install -d -o memcache -g www-data -m 0770 /var/run/memcached
# or use setfacl and whatever user/group you want
true # because set -e in init-scripts

aggiunto a /etc/memcached.conf:

-s /var/run/memcached/memcached.sock
-a 0666

1

Ho analizzato il miglioramento delle prestazioni dell'utilizzo di socket unix memcached, è più veloce del 33% utilizzare i socket unix nei miei test usando php cli.

Ho scoperto che è importante aggiungere l'utente memcache al gruppo www-data e concedere al socket unix 775 autorizzazioni, in questo modo sia il gestore php che l'utente memcache possono eseguirlo.

Puoi trovare i benchmark e scrivere qui - anche se è per WordPress dovrebbe funzionare per Drupal in quanto è molto probabile che sia un problema di autorizzazioni.


0

Nota se stai usando un container alpino in Kubernetes, le specifiche del pod con le sonde di salute saranno simili a queste:

spec:
  containers:
    - name: memcached
      image: memcached:1.5-alpine
      imagePullPolicy: "IfNotPresent"
      command:
      - memcached
      - --unix-socket=/tmp/memcached.sock
      - --unix-mask=0766
      - -m 64
      - -o modern
      - -v
...
      livenessProbe:
        exec:
          command:
          - /bin/sh
          - -c
          - 'echo "stats slabs" | nc local:/tmp/memcached.sock'
        initialDelaySeconds: 30
        timeoutSeconds: 5
      readinessProbe:
        exec:
          command:
          - /bin/sh
          - -c
          - 'echo "stats slabs" | nc local:/tmp/memcached.sock'
        initialDelaySeconds: 5
        timeoutSeconds: 1

Ci sono voluti un po 'per capire le giuste impostazioni e come connettersi a un socket di dominio locale unix tramite busybox.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.