Як налаштувати memcached для використання unix socket?


12

Хоча я міг використовувати memcached на Debian, щоб використовувати порт 11211 за замовчуванням, але у мене виникли великі труднощі з налаштуванням сокета Unix.

З прочитаного я знаю, що мені потрібно створити memcache.socketі додати:

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

Щоб /etc/memcached.confкоментувати порт підключення та IP за замовчуванням, тобто

-p 11211 
-l 127.0.0.1

Однак, коли я перезавантажую пам’яті, я отримую внутрішні помилки сервера на сайті Drupal.

Я намагаюся реалізувати unix-сокети, щоб уникнути накладних витрат TCP / IP і збільшити загальну продуктивність, що зберігається, проте не впевнений, наскільки підвищену продуктивність можна очікувати від цього виправлення.

Я вдячний за ваші підказки чи, можливо, конфігурацію для вирішення цього питання.


Припустимо, що memcached працює, ви налаштували Drupal на використання сокета?
cjc

Так, Drupal був налаштований на використання пам'яті і працює належним чином, коли я використовую порт 11211.
alfish

Чи / шлях / до / повністю читабельний / виконується користувачем під керуванням Drupal? Я не маю на увазі сам файл сокета; Користувач Drupal також повинен мати можливість скидати ієрархію каталогів.
cjc

Відповіді:


12

Ви можете виявити, що просто встановити шлях сокета не працює. Memcached скидає привілеї до того, як він створить свій сокет, хоча після того, як буде записаний його PID. Зазвичай вводити сокет /var/run(наприклад, як це робиться mysql), але там може писати тільки корінь, тому створюйте /var/run/memcachedта не замовчуйте його нікому, а потім встановлюйте /var/run/memcached/memcached.sockяк шлях сокета. Написання на це /tmpтеж спрацювало б, але за своєю суттю це могло б потрапити у сміття; приклеювати його /var/runтрохи постійніше.

Ви можете перевірити його роботу, використовуючи netcat для підключення до нього:

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

Просто введіть statsу порожньому запиті; якщо це працює, ви отримаєте навантаження на вихід.


1
Це працювало для мене, а не інша відповідь. Очевидно, nobodyне можна записати в папку, що належить root, без відповідного дозволу.
Даніель В.

8

Я вважаю, що розетка повинна бути виконуваною у світі, а не для запису. Якщо ви бачите повідомлення про повідомлення PHP, що містить errno = 32 Зламана труба , відрегулюйте маску доступу Memcached на 0755

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

Також переконайтесь, що в демонстраційного демона Drupal є порт TCP 0в конфігурації. Відключений порт за замовчуванням встановить 11211і сплутає з'єднання з сокетом.

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

Я вважаю, що маска повинна бути 766 або 666, як вам потрібно читати / писати.
arleslie

6

додано в / 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

додано до /etc/memcached.conf:

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

1

Я визначив підвищення продуктивності використання memcached unix-сокетів, на 33% швидше використовувати unix-сокети у своїх тестах, використовуючи php cli.

Я виявив, що важливо додати користувача memcache до групи даних www та надати дозволу unix 775 для дозволу, таким чином і php обробник, і користувач memcache можуть виконати це.

Ви можете знайти орієнтири та дописи тут - хоча це для WordPress, він повинен працювати для Drupal, оскільки це, швидше за все, проблема з дозволом.


0

Зверніть увагу, якщо ви використовуєте альпійський контейнер у Kubernetes, специфікація стручків із зондами для здоров’я виглядатиме приблизно так:

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

Знадобився певний час, щоб визначити правильні настройки та як підключитися до unix-локального сокета домену через busbox.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.