Назад | Перейти на главную страницу

Как настроить memcached для использования сокета unix?

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

Из того, что я прочитал, я знаю, что мне нужно создать memcache.socket и добавить:

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

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

-p 11211 
-l 127.0.0.1

Однако, когда я перезапускаю memcached, я получаю внутренние ошибки сервера на сайте Drupal.

Я пытаюсь реализовать сокеты unix, чтобы избежать накладных расходов TCP / IP и повысить общую производительность memcached, однако не уверен, сколько прироста производительности можно ожидать от этой настройки.

Я ценю ваши подсказки или возможные конфигурации, чтобы решить эту проблему.

Вы можете обнаружить, что просто установка пути к сокету не работает. Memcached отбрасывает привилегии до того, как он создаст свой сокет, но после того, как он записал свой PID. Обычно розетку вставляют /var/run (например, как это делает mysql), но только root может писать туда, поэтому создайте /var/run/memcached и никому не подавай, затем установите /var/run/memcached/memcached.sock как путь к сокету. Написав это /tmp тоже будет работать, но по самой своей природе может быть испорчено; вставляя это в /var/run немного более постоянный.

Вы можете проверить, что он работает, подключившись к нему с помощью netcat:

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

Просто введите stats при пустой подсказке; если он работает, вы получите массу вывода.

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

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

Также убедитесь, что Drupal Демон Memcached имеет TCP-порт 0 в комплектации. Неустановленный порт по умолчанию будет 11211, и запутаешь подключение сокета.

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

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

Я проверил повышение производительности при использовании сокетов memcached unix, на 33% быстрее использовать сокеты unix в моих тестах с использованием php cli.

Я обнаружил, что важно добавить пользователя memcache в группу www-data и дать разрешения unix socket 775, таким образом, как обработчик php, так и пользователь memcache могут выполнить его.

Вы можете найти тесты и напишите здесь - хотя это для WordPress, он должен работать для Drupal, поскольку это, скорее всего, проблема с разрешениями.

Обратите внимание, что если вы используете контейнер alpine в 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 через busybox.