Como configurar o memcached para usar o soquete unix?

12

Embora eu pudesse usar o memcached no Debian para usar a porta 11211 padrão, mas tive muita dificuldade em configurar o soquete Unix.

Pelo que li, sei que preciso criar um memcache.sockete adicionar:

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

Para /etc/memcached.confcomentar e comentar a porta de conexão e o IP padrão, ou seja,

-p 11211 
-l 127.0.0.1

No entanto, quando reinicio o memcached, recebo erros internos do servidor no site Drupal.

Estou tentando implementar soquetes unix para evitar sobrecarga de TCP / IP e aumentar o desempenho geral do cache de memórias, mas não tenho certeza de quanto ganho de desempenho se pode esperar desse ajuste.

Agradeço suas dicas ou, possivelmente, configurações para resolver isso.

alfish
fonte
Supondo que o memcached esteja em execução, você configurou o Drupal para usar o soquete?
CJC
Sim, Drupal foi configurado para uso memcached e funciona corretamente quando eu usar a porta 11211.
alfish
O / path / to / totalmente legível / executável pelo usuário que está executando o Drupal? Não quero dizer o próprio arquivo de soquete; o usuário Drupal também precisará poder descer a hierarquia de diretórios.
Cjc 29/09/12

Respostas:

12

Você pode achar que apenas definir o caminho do soquete não funciona. O Memcached remove privilégios antes de criar seu soquete, embora depois de escrever seu PID. É comum colocar o soquete /var/run(por exemplo, como o mysql faz), mas somente o root pode escrever nele, então crie /var/run/memcachede mostre a ninguém, e então defina /var/run/memcached/memcached.sockcomo o caminho do soquete. Escrever para /tmpisso também funcionaria, mas por sua própria natureza, isso poderia ser destruído; colocá-lo /var/runé um pouco mais permanente.

Você pode verificar se está funcionando usando o netcat para se conectar a ele:

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

Basta digitar statsno prompt em branco; se estiver funcionando, você terá uma carga de saída.

Synchro
fonte
1
Isso funcionou para mim, e não a outra resposta. Obviamente, nobodynão é possível gravar em uma pasta pertencente à raiz sem a permissão apropriada.
10274 Daniel W.
8

Acredito que o soquete precisará ser executável mundialmente, não gravável. Se você estiver vendo uma mensagem de aviso do PHP contendo errno = 32 pipe quebrado , ajuste a máscara de acesso do Memcached para 0755

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

Verifique também se o daemon Memcached do Drupal possui uma porta TCP 0na configuração. Uma porta não configurada será padrão 11211e confundirá a conexão do soquete.

$conf += array(
    'memcache_servers' => array(
        'unix:///path/to/memcache.socket:0'  => 'default',
    )
);
emcconville
fonte
Acredito que a máscara deve ser 766 ou 666 conforme a necessidade de leitura / gravação.
arleslie
6

adicionado 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

adicionado ao /etc/memcached.conf:

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

Comparei o aumento de desempenho do uso de soquetes unix memcached, é 33% mais rápido usar soquetes unix nos meus testes usando o php cli.

Eu descobri que é importante adicionar o usuário do memcache ao grupo www-data e dar permissões ao soquete 775 do unix, dessa forma, tanto o manipulador do php quanto o usuário do memcache podem executá-lo.

Você pode encontrar as referências e os artigos aqui - embora seja para o WordPress, ele funcione para o Drupal, pois é muito provável que seja um problema de permissão.

Mike Andreasen
fonte
0

Observe que se você estiver usando um contêiner alpino no Kubernetes, a especificação do pod com testes de integridade seria algo como isto:

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

Demorou um pouco para descobrir as configurações corretas e como conectar-se a um soquete de domínio local unix via busybox.

Greg Bray
fonte