Bagaimana cara mengatur memcached untuk menggunakan soket unix?

12

Meskipun saya bisa menggunakan memcached pada Debian untuk menggunakan port 11211 default, tapi saya mengalami kesulitan besar mengatur soket Unix.

Dari apa yang saya baca, saya tahu bahwa saya perlu membuat memcache.socketdan menambahkan:

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

Ke /etc/memcached.confdan mengomentari port koneksi default dan IP, yaitu

-p 11211 
-l 127.0.0.1

Namun, ketika saya me-restart memcached saya mendapatkan kesalahan server internal di situs Drupal.

Saya mencoba menerapkan soket unix untuk menghindari TCP / IP overhead dan meningkatkan kinerja memcached keseluruhan, namun tidak yakin berapa banyak peningkatan kinerja yang dapat diharapkan dari tweak ini.

Saya menghargai petunjuk Anda atau mungkin mengkonfigurasi untuk menyelesaikan ini.

alfish
sumber
Dengan asumsi memcached berjalan, apakah Anda mengkonfigurasi Drupal untuk menggunakan soket?
cjc
Ya, Drupal telah diatur untuk menggunakan memcached dan berfungsi dengan baik ketika saya menggunakan port 11211.
alfish
Apakah / path / ke / sepenuhnya dapat dibaca / dieksekusi oleh pengguna yang menjalankan Drupal? Maksud saya bukan file socket itu sendiri; pengguna Drupal juga harus dapat turun ke hierarki direktori.
cjc

Jawaban:

12

Anda mungkin menemukan bahwa pengaturan jalur soket tidak berfungsi. Memcached menjatuhkan hak istimewa sebelum membuat soketnya, meskipun setelah itu dituliskan PID-nya. Adalah umum untuk memasukkan socket /var/run(mis. Seperti mysql), tetapi hanya root yang bisa menulis di sana, jadi buat /var/run/memcacheddan gantilah ke siapa-siapa, lalu setel /var/run/memcached/memcached.socksebagai path socket. Menulisnya untuk /tmpbekerja juga, tetapi pada dasarnya sifatnya yang bisa dihancurkan; menempel di /var/runsedikit lebih permanen.

Anda dapat memeriksa apakah itu berfungsi dengan menggunakan netcat untuk terhubung dengannya:

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

Ketikkan saja statspada prompt kosong; jika berhasil Anda akan mendapatkan banyak output.

Sinkron
sumber
1
Ini bekerja untuk saya, daripada jawaban yang lain. Jelas nobodytidak bisa menulis ke folder yang dimiliki root tanpa izin yang sesuai.
Daniel W.
8

Saya percaya soket harus dapat dieksekusi dunia, tidak dapat ditulisi. Jika Anda melihat pesan pemberitahuan PHP yang mengandung errno = 32 Pipa rusak , sesuaikan penutup akses Memcached ke 0755

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

Juga verifikasi bahwa daemon Memcached Drupal memiliki port TCP 0dalam konfigurasi. Port yang tidak disetel akan default ke 11211, dan membingungkan koneksi soket.

$conf += array(
    'memcache_servers' => array(
        'unix:///path/to/memcache.socket:0'  => 'default',
    )
);
emcconville
sumber
Saya percaya topengnya harus 766 atau 666 karena Anda perlu membaca / menulis.
arleslie
6

ditambahkan ke / 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

ditambahkan ke /etc/memcached.conf:

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

Saya membandingkan peningkatan kinerja menggunakan soket unix memcached, itu 33% lebih cepat untuk menggunakan soket unix dalam pengujian saya menggunakan php cli.

Saya menemukan bahwa penting untuk menambahkan pengguna memcache ke grup www-data dan memberikan izin unix socket 775, dengan cara ini baik penangan php dan pengguna memcache dapat menjalankannya.

Anda dapat menemukan tolok ukur dan menulis di sini - meskipun untuk WordPress itu harus berfungsi untuk Drupal karena sangat mungkin merupakan masalah izin.

Mike Andreasen
sumber
0

Catatan jika Anda menggunakan wadah alpine di Kubernetes pod spec dengan probe kesehatan akan terlihat seperti ini:

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

Butuh waktu beberapa saat untuk mengetahui pengaturan yang tepat, dan bagaimana menghubungkan ke soket domain lokal unix melalui busybox.

Greg Bray
sumber