¿Cómo configurar memcached para usar unix socket?

12

Si bien podría usar memcached en Debian para usar el puerto predeterminado 11211, he tenido grandes dificultades para configurar el socket Unix.

Por lo que he leído, sé que necesito crear memcache.sockety agregar:

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

Para /etc/memcached.confy comentar el puerto de conexión predeterminado y la IP, es decir

-p 11211 
-l 127.0.0.1

Sin embargo, cuando reinicio memcached obtengo errores internos del servidor en el sitio de Drupal.

Estoy tratando de implementar sockets Unix para evitar la sobrecarga de TCP / IP y aumentar el rendimiento general de Memcached, sin embargo, no estoy seguro de cuánto aumento de rendimiento se puede esperar de este ajuste.

Agradezco sus sugerencias o posiblemente configuraciones para resolver esto.

Alfish
fuente
Suponiendo que memcached se está ejecutando, ¿configuró Drupal para usar el socket?
cjc
Sí, Drupal se configuró para usar memcached y funciona correctamente cuando uso el puerto 11211.
alfish
¿Es / path / to / totalmente legible / ejecutable por el usuario que ejecuta Drupal? No me refiero al archivo socket mismo; El usuario de Drupal también deberá poder descender de la jerarquía de directorios.
cjc

Respuestas:

12

Puede encontrar que simplemente configurar la ruta del socket no funciona. Memcached elimina los privilegios antes de crear su socket, aunque después de escribir su PID. Es común colocar el zócalo /var/run(por ejemplo, como lo hace mysql), pero solo la raíz puede escribir allí, así que /var/run/memcachedcréelo y no lo conozca a nadie, luego configúrelo /var/run/memcached/memcached.sockcomo la ruta del zócalo. Escribirlo también /tmpfuncionaría, pero por su propia naturaleza eso podría ser destruido; pegarlo /var/runes un poco más permanente.

Puede verificar que esté funcionando usando netcat para conectarse a él:

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

Simplemente escriba statsen el indicador en blanco; si funciona, obtendrás una gran cantidad de resultados.

Synchro
fuente
1
Esto funcionó para mí, en lugar de la otra respuesta. Obviamente nobody, no puedo escribir en una carpeta propiedad de root sin el permiso apropiado.
Daniel W.
8

Creo que el socket deberá ser ejecutable en todo el mundo, no escribible. Si ve un mensaje de aviso PHP que contiene errno = 32 Canalización rota , ajuste la máscara de acceso Memcached a 0755

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

También verifique que el demonio Memcached de Drupal tenga un puerto TCP 0en la configuración. Un puerto no establecido se configurará de manera predeterminada 11211y confundirá la conexión del socket.

$conf += array(
    'memcache_servers' => array(
        'unix:///path/to/memcache.socket:0'  => 'default',
    )
);
Emcconville
fuente
Creo que la máscara debe ser 766 o 666, ya que necesita leer / escribir.
arleslie
6

agregado 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

agregado a /etc/memcached.conf:

-s /var/run/memcached/memcached.sock
-a 0666
Raph
fuente
1

Comparé el aumento de rendimiento del uso de sockets unix de Memcached, es un 33% más rápido usar sockets Unix en mis pruebas con php cli.

Descubrí que es importante agregar el usuario memcache al grupo www-data y otorgar permisos al socket 775 de Unix, de esta manera tanto el controlador php como el usuario memcache pueden ejecutarlo.

Puede encontrar los puntos de referencia y la redacción aquí , aunque es para WordPress, debería funcionar para Drupal, ya que es muy probable que sea un problema de permisos.

Mike Andreasen
fuente
0

Tenga en cuenta que si está utilizando un contenedor alpino en Kubernetes, la especificación de la cápsula con sondas de salud se vería así:

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

Tomó un tiempo descubrir la configuración correcta y cómo conectarse a un socket de dominio local de Unix a través de busybox.

Greg Bray
fuente