Хранение PHP-сессий в Memcached на сервере CentOS
Centos, VPS | Комментировать запись
Что такое Memcached?
Memcached – это программа, хранящая в оперативной памяти небольшие отрывки произвольных данных (строк, объектов) из результатов обращений к базе данных, вызовов API или визуализации страниц в формате «ключ-значение».
Зачем хранить сессии в Memcached?
Вместо файлов Memcached будет хранить в памяти сессии. Поскольку запуск из памяти занимает меньше времени, чем чтение файла, сайт будет работать лучше, а время загрузки сократится.
Требования
Чтобы следовать данному руководству, на сервере должен быть установлен и запущен PHP 5. Для этого читайте руководство «Установка LAMP stack (Linux, Apache, MySQL, PHP) на CentOS 7».
Кроме того, нужно установить репозиторий EPEL, поскольку программа Memcached не доступна в стандартных репозиториях.
rpm -Uvh http://mirrors.kernel.org/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
Также рекомендуется обновить пакеты системы до последней доступной версии (но это не обязательно):
yum update
Установка Memcached
Итак, выполнив все предварительные требования, можно приступать к установке Memcached. Это очень просто сделать при помощи менеджера пакетов yum:
yum install memcached
Завершив установку Memcached, откройте конфигурационный файл Memcached в текстовом редакторе vi:
vi /etc/sysconfig/memcached
Файл содержит:
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""
Программа Memcached не защищена паролем или именем пользователя, потому любой пользователь может получить доступ к ней через порт 11211. Чтобы предотвратить это, нужно разрешить доступ к программе только данному VPS; для этого внесите некоторые опции в раздел OPTIONS=:
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1"
Размер кэша (раздел cachesize) по умолчанию равен 64MB. Как только Memcached достигнет этого предела, программа удалит более старые данные, чтобы освободить место для новых. В целом, 64MBбудет вполне достаточно (если только сайт не очень объемен).
Теперь запустите Memcached:
/etc/init.d/memcached start
По умолчанию Memcached не запускается при загрузке сервера, потому нужно автоматизировать запуск программы:
chkconfig --levels 235 memcached on
Установка расширения PHP Memcached
На данном этапе нужно установить несколько дополнительных программ. Для начала установите development tools – инструменты разработки, которые понадобятся для компилирования исходного кода:
yum groupinstall "Development Tools"
Затем нужно установить еще несколько программ; первые две понадобятся для сборки расширения, а последние две – для запуска/установки PHP-расширения.
yum install zlib-devel libmemcached-devel php-pear php-pecl-memcached
Теперь нужно установить расширение PHP Memcached при помощи только что установленной библиотеки PECL (PHP Extension Community Library).
pecl install -f memcached-1.0.0
Редактирование файла php.ini
Последнее, что нужно сделать, – это настроить PHP для использования Memcached в качестве обработчика сессии. Для этого откройте /etc/php.ini в текстовом редакторе vi:
vi /etc/php.ini
Найдите раздел [Session], который выглядит так:
[Session]
; Handler used to store/retrieve data.
; http://www.php.net/manual/en/session.configuration.php#ini.session.save-handler
session.save_handler = files
И измените его следующим образом:
[Session]
; Handler used to store/retrieve data.
; http://www.php.net/manual/en/session.configuration.php#ini.session.save-handler
session.save_handler = memcached
session.save_path = "127.0.0.1:11211"
Как видите, значение session_handler было изменено на memcached; также был указан путь к локальному хосту (порт 11211, на котором работает Memcached). Теперь нужно перезапустить Apache, чтобы активировать изменения, внесенные в файл php.ini.
service httpd restart
Теперь все сессии буду храниться в Memcached, а не в файлах.
Внимание! На данном этапе может появиться следующая ошибка:
Starting httpd: httpd: apr_sockaddr_info_get() failed for memcached
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
Ее можно исправить путем редактирования конфигураций apache:
vi /etc/httpd/conf/httpd.conf
Здесь нужно раскомментировать строку ServerName:
ServerName localhost
Итоги
Memcached идеально справляется с хранением интенсивных запросов, которые не должны выполняться для каждой отображаемой страницы не в реальном времени, а в указанных приращениях времени (т.е. каждые 10 минут). Чтобы получить больше информации о работе Memcached, читайте руководства:
Tags: CentOS, Linux, Memcached, PHP, VPS