memcached

Понадобилась настройка memcached (memcache) на 2 сервера. Задача оказалась не такой тривиальной. С доступом на localhost, где демон слушает по умолчанию, проблем не было. Однако на удаленный сервер достучаться не получалось. Сервера оба debian.
Возможно этот пост актуален только для меня и проблем может не возникать.
Домашняя страница проекта на code.google.

Для начала установка. Тут все просто:

Взято с мануала по memcached на php.net. Хотя при установке туда не заглядывал.
После установки можно проверить слушается ли теперь порт 11211.

Так же можно проверить настройки конфига.

После изменений конфига делаем:

Примеры выше взяты с Хабра.

В коде php используется очень просто. В данном случае у меня создается класс CACHE с singlton, приведен кусок.

И тут то и выяснилось, что на второй сервер обращения не доходят. Элементарная подмена в конфиге адреса прослушивания ничего не дала (-l *.*.*.*).
Диагностику помогут провести следующие ф-ии:

1. Показать есть ли процесс memcached

Тут мы видим, что процесс есть и запущен на нужном адресе. Памяти выделено 1000мб, пользователь nobody. 127.0.0.1 тут оказался лишним, memcached не поддерживает несколько ip.
2. Показать слушаемые порты

Точно слушает.
3. Включить вывод ошибок в php. :) Ошибок не было.
4. Догадка о закрытом порте. Если не установлено, то ставим nmap. Проверяем localhost или ip.

Можно еще так проверить. Если нет соединения, то закрыт.

Выдаст список открытых портов. В моем списке 11211 не оказалось. “Вот в чем собака зарыта”. :)
5. Смотрим iptables.

Собственно есть еще много ключей, -nat например, но этого хватит. Выдаст список установленных для этого фаерволла правил. Еще можно так:

Если без перенаправления, то в консоли выведутся правила. Через эту команду можно организовать сохранение настроек, т.к. после перезагрузки они сбросятся.

Далее порт 11211 надо открыть, но только для одного IP адреса.
Тут мне пригодились следующие ф-ии:
1. Показать нумерованный список правил и удалить правило по номеру

2. закрыть все входящие, для которых нет правил на открытие

Еще примеры:
открыть все исходящие порты
iptables -P OUTPUT ACCEPT
открыть порт 80 для всех входящих соединений
iptables -A INPUT –dport 80 -j ACCEPT
открыть 22 и 5432 порты только для конкретного IP
iptables -A INPUT -m multiport –dports 22,5432 -s IP_ADDRESS -j ACCEPT

Так же не забудьте открыть другие нужные порты для нужных ИП.

Более подробная настройка iptables в этом посте, с примерами скриптов.

Еще можно подкрутить сессии в php.ini на использование с memcached.

Для мониторинга была установлена утилита phpmemcachedadmin. В ней можно создать стек ваших серверов с memcached и смотреть статистику в приятном интерфейсе.

Люблю развиваться и изучать что-то новое. Недавно был покорен PDO, и сделан на его основе драйвер бд (не окончательная версия) и его синглтон реализация. После я решил простую реализацию шаблонизатора типа

перевести на Smarty и использовать так же его возможности кеширования. Это отняло у меня день жизни.

Читать далее