Хотя я мог использовать 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.