Понадобилась настройка 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 и смотреть статистику в приятном интерфейсе.