В результате применения информации, данной в этой статье, вы сможете установить и настроить сервер Memcached и нужное расширение php для взаимодействия с ним, а также сервис анализа и статистики phpMemcachedAdmin
- Как установить сервер Memcached
- Настройка Memcached
- Закрываем Memcached от доступа извне
- Увеличиваем объём рабочей памяти Memcached
- Хранение сессий PHP в Memcached
- Способ для расширения memcache
- Способ для расширения memcacheD
- Проверка phpinfo
- Готовый рабочий конфигурационный файл Memcached
- Установка расширения memcache
- Как проверить работу Memcached
- phpMemcachedAdmin — мониторинг, статистика и управление Memcached
- Установка и настройка phpMemcachedAdmin
- В заключение
Установка будет происходить под Debian с сервером бекенда Apache. Если у вас рабочая связка NGINX + php5-fpm, просто заменяйте в командах
apache2
наphp5-fpm
Рабочий инструментарий: файловый менеджер для подключения по ssh со встроенным редактором Far Manager или putty.
Если у вас сервер на CentOS, вод подробный мануал, как установить Memcached на CentOS
Теперь допустим, у нас на этом хостинге уже есть сайт http://example.com
Для начала, нужно определить, как сконфигурирован PHP (вдруг Memcached уже установлен?)). Для этого в корне сайта временно создадим файл info.php
с кодом
<?php phpinfo(); ?>
Теперь заглянем в него http://example.com/info.php
Если видим, что есть похожая запись, значит, всё в порядке, нужное расширение php установлено.
Если нет, значит, придётся поработать.
Как установить сервер Memcached
Перед установкой нужно обновить репозиторий
apt-get update && apt-get upgrade
Теперь установим memcached и модуль php под него
apt-get install memcached php5-memcache
Идёт установка. После её завершения проверяем, что получилось
netstat -tap | grep memcached
В результате мы увидим что-то навроде
tcp 0 0 *:11211 *:* LISTEN 13053/memcached
Теперь нужно перезагрузить Apache или php-fpm
service apache2 restart
или
service php5-fpm restart
Настройка Memcached
Теперь, когда сервер установлен, его надо поднастроить. Это не сложно и не займёт много времени
Закрываем Memcached от доступа извне
Как вы видите, memcached висит на 11211 порту по умолчанию. Так как в memcached нет встроенных механизмов аутентификации, то выходит, что любой может подсоединиться извне и использовать его в своих целях. Чтобы избежать этого, вы можете либо закрыть порт 11211 с помощью фаервола, либо сконфигурировать memcached-сервер, чтобы он мог использоваться только с локального хоста. Ниже описан последний способ.
-
Открываем конфигурационный файл
vi /etc/memcached.conf
-
Добавляем строку
-l 127.0.0.1
-
Перезагружаем memcached
service memcached restart
или
/etc/init.d/memcached restart
И снова проверяем
netstat -tap | grep memcached
В итоге мы должны увидеть подобное
tcp 0 0 localhost.localdo:11211 *:* LISTEN 13092/memcached
Также, после всех изменений не забудьте перезапустить Apache
service apache2 restart
Увеличиваем объём рабочей памяти Memcached
По умолчанию, в Memcached отведено на использование 64 мегабайта оперативной памяти. Я увеличу до 1024, вы исходите из параметров вашего сервера
- Открываем конфигурационный файл
vi /etc/memcached.conf
- Находим значение
-m 64
- Меняем его на
-m 1024
- Перезапускаем memcached
service memcached restart
Хранение сессий PHP в Memcached
Если одним сервером или кластером Memcached пользуются несколько разных сайтов, то они могут перехватывать сессии друг друга и получать доступ к аккаунтам их пользователей, что представляет собой потенциальную опасность
Можно ускорить php, перенеся хранилище сессий из hdd в оперативную память с помощью memcached
Вы должны знать, какое расширение php вы используете,
memcache
илиmemcached
. Между ними есть разница, а уточнить, что стоит у вас, можно с помощью phpinfo(), тут есть тонкость в настройках, будьте внимательны
Способ для расширения memcache
- Открыть
/etc/php5/mods-available/memcache.ini
- Добавить
session.save_handler = memcache session.save_path = "tcp://127.0.0.1:11211"
- Перезагрузить apache
service apache2 restart
Способ для расширения memcacheD
- Открыть
/etc/php5/mods-available/memcached.ini
- Добавить
session.save_handler = memcached session.save_path = "127.0.0.1:11211"
- Перезагрузить apache
service apache2 restart
Проверка phpinfo
Теперь нужно проверить, что имеем на выходе. Для этого, открываем страницу с phpinfo() и ищем в коде session.save_path
в столбце с локальными значениями. В значении должно быть tcp://127.0.0.1:11211
или 127.0.0.1:11211
. Если значения не поменялись, смотрите конфиг домена в Апаче (например тут: /etc/apache2/vhosts/sheensay/sheensay.ru.conf
), а ищем
php_admin_value session.save_path
Кстати, также вы можете воспользоваться директивой php_value
, чтобы настраивать не весь сервер глобально, а только конкретные сайты. Для этого, вы можете отредактировать .htaccess
в корне вашего сайта
php_value session.save_handler "memcache" php_value session.save_path "tcp://127.0.0.1:11211"
Готовый рабочий конфигурационный файл Memcached
Вы также можете настроить всё под свои потребности, конфигурационный файл содержит подробные комментарии:
# memcached default config file # 2003 - Jay Bonci <[email protected]> # This configuration file is read by the start-memcached script provided as # part of the Debian GNU/Linux distribution. # Run memcached as a daemon. This command is implied, and is not needed for the # daemon to run. See the README.Debian that comes with this package for more # information. -d # Log memcached's output to /var/log/memcached logfile /var/log/memcached.log # Be verbose # -v # Be even more verbose (print client commands as well) # -vv # Start with a cap of 64 megs of memory. It's reasonable, and the daemon default # Note that the daemon will grow to this size, but does not start out holding this much # memory # Объём памяти в мегабайтах, который отведён для кеширования. По умолчанию, 64 мегабайта. #-m 64 -m 1024 # Порт, на котором будет висеть Memcached, по умолчанию 11211 -p 11211 # Run the daemon as root. The start-memcached will default to running as root if no # -u command is present in this config file -u memcache # Specify which IP address to listen on. The default is to listen on all IP addresses # This parameter is one of the only security measures that memcached has, so make sure # it's listening on a firewalled interface. -l 127.0.0.1 # Limit the number of simultaneous incoming connections. The daemon default is 1024 # # -c 1024 # Lock down all paged memory. Consult with the README and homepage before you do this # -k # Return error when memory is exhausted (rather than removing items) # -M # Maximize core file limit # -r
Установка расширения memcache
Ниже пошагово указаны команды, с помощью которых вы сможете установить php-расширение memcache из консоли вручную
apt-get install php5-dev libmemcache-dev pecl download memcache tar xzvf memcache-2.2.6.tgz cd memcache-2.2.6/ phpize && ./configure --enable-memcache && make cp modules/memcache.so /usr/lib/php5/20060613/ echo 'extension=memcache.so' >> /etc/php5/apache2/php.ini
Перезагрузим Apache, чтобы изменения вступили в силу
service apache2 restart
Как проверить работу Memcached
Создадим в корне сайта файлик memcachetest.php и запишем туда следующий код
<?php if (!class_exists("Memcache")) exit("Memcached не установлен"); $memcache = new Memcache; $memcache->connect('localhost', 11211) or exit("Невозможно подключиться к серверу Memcached"); $version = $memcache->getVersion(); echo "Server's version: ".$version."<br/>\n"; $tmp_object = new stdClass; $tmp_object->str_attr = 'test'; $tmp_object->int_attr = 123; $memcache->set('key', $tmp_object, false, 10) or die ("Не получилось оставить запись в Memcached"); echo "Записываем данные в кеш Memcached (данные будут храниться 10 секунд)<br/>\n"; $get_result = $memcache->get('key'); echo "Данные, записанные в Memcached:<br/>\n"; var_dump($get_result); ?>
Теперь осталось проверить результаты: http://example.com/memcachetest.php
Если всё сделали правильно, увидите что-то навроде
phpMemcachedAdmin — мониторинг, статистика и управление Memcached
phpMemcachedAdmin — это программное обеспечение, предоставляющее веб-интерфейс для мониторинга и управления сервисом Memcached на Linux. Позволяет видеть в реальном времени статистику для всех поддерживаемых сервером операций: get, set, delete, increment, decrement, reclaimed, evictions, cas, а также серверную статистику: сеть, позиции, рабочую версию вкупе с чартами и внутренней серверной конфигурацией.
Установка и настройка phpMemcachedAdmin
Тут можно пойти несколькими путями: выделить отдельный домен или поддомен под работу этого сервиса. А можно сделать поддиректорию в рабочем сайте и поставить пароль на неё или настроить ограничение по IP. Я опишу последний способ с установкой пароля на папку как более простой.
Итак, допустим, у нас есть сайт https://sheensay.ru
cd /var/www/sheensay.ru
Создаём директорию и переходим в неё
mkdir phpMemcachedAdmin && cd phpMemcachedAdmin
Скачиваем последнюю версию дистрибутива
wget http://phpmemcacheadmin.googlecode.com/files/phpMemcachedAdmin-1.2.2-r262.tar.gz
Если не скачивается с гуглокода, я сделал архив phpMemcachedAdmin-1.2.2-r262.tar.gz
Распаковываем и удаляем архив с дистрибутивом
tar -xvzf phpMemcachedAdmin-1.2.2-r262.tar.gz && rm -rf phpMemcachedAdmin-1.2.2-r262.tar.gz
Рекурсивно выставляем нужные права доступа в текущей директории
find ./ -type f -exec chmod 0644 {} \; find ./ -type d -exec chmod 0755 {} \;
Создаём .htaccess для авторизации по паролю (в строку 4 вносите свой логин)
AuthType Basic AuthName "Private Area" AuthUserFile .htpasswd Require user memcachedmanager
Создаём .htpasswd
htpasswd -c .htpasswd memcachedmanager
Вводите свой пароль.
На этом всё. Логин на каталог memcachedmanager
, если вы не меняли его. Открываете https://sheensay.ru/phpMemcachedAdmin
(домен меняете на свой), вводите логин/пароль и пользуетесь
В заключение
Рекомендую ознакомиться со статьёй про memcached. В ней раскрыта общая информация о нём и некоторые тонкости работы.
На этом всё. Если что непонятно, задавайте вопросы в комментариях
Свежие комментарии