Одновременная работа memcached через сокет и порт

Известно, что одновременная работа 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;
  }
}

Директивы stream-модуля

В этом случае все. Но рассмотрим еще

Вариант с двумя инстансами 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

Порядок. И этот вариант мне нравится больше

Все

Александр Черных

системный администратор

0