Известно, что одновременная работа memcached через сокет и порт с одним инстансом невозможна. Однако выход есть
Вариант с nginx
Этот вариант подойдет тем, кто уже использует nginx. Однако нужна версия не меньше 1.9.0
Для начала сконфигурируем работу memcached через сокет. В моем случае в файле конфигурации /etc/conf.d/memcached указано следующее
MEMCACHED_BINARY="/usr/bin/memcached" MEMUSAGE="512" MEMCACHED_RUNAS="memcached" MAXCONN="4096" PIDBASE="/var/run/memcached/memcached" SOCKET="/tmp/memcached.sock" SOCKET_MASK="0666" MISC_OPTS=""
Запускаем и проверяем
rc-service memcached start
ps ax | grep memcached
13521 ? Ssl 25:07 /usr/bin/memcached -d -s /tmp/memcached.sock -a 0666 -m 512 -c 4096 -u memcached -P /var/run/memcached/memcached.pid
Порядок. Перейдем к настройке nginx’а. Воспользуемся возможностью проксирования
stream { upstream memcached { server unix:/tmp/memcached.sock; } server { listen 127.0.0.1:11211; proxy_pass memcached; } }
В этом случае все. Но рассмотрим еще
Вариант с двумя инстансами memcached
Предполагается, что memcached установлен и работает через сокет. В gentoo, в папке /etc/conf.d нужно сделать два файла конфигурации, один для работы memcached через сокет, другой — через порт. Поэтому текущий конфигурационный файл (см. выше) оставляем как есть, только переименуем его
mv memcached memcached.sock
Файл конфигурации с портом назовем memcached.port и его содержание следующее
MEMCACHED_BINARY="/usr/bin/memcached" MEMUSAGE="512" MEMCACHED_RUNAS="memcached" MAXCONN="4096" LISTENON="127.0.0.1" PORT="11211" UDPPORT="0" PIDBASE="/var/run/memcached/memcached" MISC_OPTS=""
В папке /etc/init.d создаем симлинки на стартовый скрипт memcached
ln -s memcached memcached.port ln -s memcached memcached.sock
Запускаем и смотрим, что получилось
rc-service memcached.port start rc-service memcached.sock start ps ax | grep memcached
7288 ? Ssl 0:00 /usr/bin/memcached -d -p 11211 -U 0 -l 127.0.0.1 -m 192 -c 1024 -u memcached -P /var/run/memcached/memcached.port.pid
8097 ? Ssl 0:00 /usr/bin/memcached -d -s /tmp/memcached.sock -a 1666 -m 192 -c 1024 -u memcached -P /var/run/memcached/memcached.sock.pid
Порядок. И этот вариант мне нравится больше
Все

- Системный администратор с 2000 года
- Участник Хабр Q&A и cyberforum
- Кейсы