Хранение PHP-сессий в Memcached на сервере CentOS

Что такое 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: , , , ,

Добавить комментарий