Jak skonfigurować memcached do korzystania z gniazda unix?

12

Chociaż mogłem użyć Memcached na Debianie, aby użyć domyślnego portu 11211, ale miałem duże trudności z konfiguracją gniazda Unix.

Z tego, co przeczytałem, wiem, że muszę utworzyć memcache.socketi dodać:

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

Do /etc/memcached.confi skomentować domyślny port połączenia i adres IP, tj

-p 11211 
-l 127.0.0.1

Jednak po ponownym uruchomieniu memcached otrzymuję wewnętrzne błędy serwera w witrynie Drupal.

Próbuję zaimplementować gniazda unix, aby uniknąć narzutu TCP / IP i zwiększyć ogólną wydajność pamięci, ale nie jestem pewien, jakiego wzrostu wydajności można się spodziewać po tym ulepszeniu.

Doceniam twoje wskazówki lub możliwe konfiguracje, aby rozwiązać ten problem.

alfish
źródło
Zakładając, że Memcached działa, czy skonfigurowałeś Drupala do używania gniazda?
cjc
Tak, Drupal został skonfigurowany do używania memcached i działa poprawnie, gdy używam portu 11211.
alfish
Czy / path / to / pełni czytelny / wykonywalny przez użytkownika uruchamiającego Drupal? Nie mam na myśli samego pliku gniazda; użytkownik Drupala będzie musiał także móc opuścić hierarchię katalogów.
cjc

Odpowiedzi:

12

Może się okazać, że samo ustawienie ścieżki gniazda nie działa. Memcached upuszcza uprawnienia, zanim utworzy swoje gniazdo, chociaż po zapisaniu swojego PID. Zwykle umieszcza się gniazdo /var/run(np. Tak jak robi to mysql), ale tylko root może tam pisać, więc stwórz /var/run/memcachedi pokaż nikomu, a następnie ustaw /var/run/memcached/memcached.sockjako ścieżkę gniazda. Napisanie go również /tmpby działało, ale z samej swojej natury mogło zostać zniszczone; wbicie go /var/runjest trochę bardziej trwałe.

Możesz sprawdzić, czy działa, używając NetCata, aby się z nim połączyć:

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

Po prostu wpisz statspusty wiersz; jeśli działa, otrzymasz ładunek wyjściowy.

Synchro
źródło
1
To zadziałało raczej dla mnie niż dla innej odpowiedzi. Oczywiście nobodynie można zapisać do folderu należącego do katalogu głównego bez odpowiedniego uprawnienia.
Daniel W.
8

Wierzę, że gniazdo będzie musiało być wykonywalne na całym świecie, a nie zapisywalne. Jeśli widzisz komunikat z powiadomieniem PHP zawierający errno = 32 Uszkodzona rura , ustaw maskę dostępu Memcached na 0755

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

Sprawdź także, czy demon Drupala Memcached ma 0w konfiguracji port TCP . Nieuzbrojony port domyślnie ustawi 11211i pomyli połączenie z gniazdem.

$conf += array(
    'memcache_servers' => array(
        'unix:///path/to/memcache.socket:0'  => 'default',
    )
);
Emcconville
źródło
Uważam, że maska ​​powinna mieć 766 lub 666, ponieważ potrzebujesz odczytu / zapisu.
arleslie
6

dodano do / 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

dodano do /etc/memcached.conf:

-s /var/run/memcached/memcached.sock
-a 0666
Raph
źródło
1

Porównywałem wzrost wydajności korzystania z gniazd unix memcached, o 33% szybsze jest używanie gniazd unix w moich testach z wykorzystaniem php cli.

Odkryłem, że ważne jest, aby dodać użytkownika memcache do grupy danych www i nadać uprawnienia dla gniazda Unix 775, w ten sposób zarówno program obsługi php, jak i użytkownik memcache mogą go wykonać.

Możesz znaleźć testy porównawcze i napisać tutaj - chociaż dotyczy WordPressa, powinien działać dla Drupala, ponieważ najprawdopodobniej jest to problem z uprawnieniami.

Mike Andreasen
źródło
0

Uwaga: jeśli używasz kontenera alpejskiego w Kubernetes, specyfikacja kapsuły z sondami zdrowia wyglądałaby mniej więcej tak:

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

Zajęło trochę czasu, aby dowiedzieć się, jakie są właściwe ustawienia i jak połączyć się z gniazdem domeny lokalnej unix przez busybox.

Greg Bray
źródło