AddThis Smart Layers

четверг, 21 марта 2013 г.

Установка и настройка Redis кеширования в Magento

Честно говоря я довольно долго присматривался к нему, изучал сравнительные характеристики.
И вот все в нем хорошо. Кроме одного - установки и настройки. Ну блин, как подумаю об этом, у меня тут же перед глазами эта картинка
Установка и настройка Redis


В конце концов решился. Как всегда на ночь глядя :-)


Оказался не так страшен черт, как его малют. А точнее, все дело в правильных мануалах.
Одного такого правильного я не нашел, поэтому скомпилирую его для себя здесь.

Ну, понеслась...

Для начала соберем все необходимые ссылки

Собственно сам сервер Redis
PhpRedis API
Расширение Cm_Cache_Backend_Redis для Magento

Делаем все из под root в ssh

# wget http://redis.googlecode.com/files/redis-2.6.11.tar.gz
Актуальную ссылку на текущую версию дистрибутива берем сверху

# tar xzf redis-2.6.11.tar.gz
# cd redis-2.6

Примечание: если устанавливаем на 32-х битную систему, необходимо предварительно изменить одну строчку в файле src/Makefile
В данной версии, это 214 строка.
В оригинале это выглядит так:
$(MAKE) CFLAGS="-m32" LDFLAGS="-m32"

а мы сделаем вот так:
$(MAKE) CFLAGS="-m32 -march=i686" LDFLAGS="-m32 -march=i686"

Затем переносим файлы сервера из папки src в папку /usr/local/bin/
# cd src
# cp redis-server /usr/local/bin/
# cp redis-cli /usr/local/bin/

Теперь создадим папки для конфигов
# mkdir /etc/redis
# mkdir /var/redis
# mkdir /var/redis/6379
Папку 6379 так назвали потому что сервер Redis использует порт 6379

Далее, копируем скрипты инициализации и конфига
# cp ../utils/redis_init_script /etc/init.d/redis_6379
# cp ../redis.conf /etc/redis/6379.conf

Правим файл конфига
# nano /etc/redis/6379.conf

Нужно найти следующие настройки:
daemonize yes
pidfile /var/run/redis_6379.pid
logfile /var/log/redis_6379.log
dir /var/redis/6379
maxmemory 134217728 (значение памяти должно быть в байтах. я пока что назначил 128Mb)

На этом с установкой и настройкой сервера Redis пока что закончили. Переходим к следующему этапу - установке и настройке phpRedis.

Я знаю, что я не продвинутый чувак и не устанавливаю на своих серверах git и modman чтобы тянуть нужные мне дистры прямо из GitHub. Я все больше по старинке качаю из всяких репозиториев и уже на месте компилирую. Вот так мне удобнее.

# cd ~
# wget https://github.com/nicolasff/phpredis/archive/master.zip
# unzip master.zip
# cd phpredis-master
# phpize
# ./configure
# make && make install

Скорее всего файл модуля не пропишется в конфигурационном файле php.ini, поэтому мы его ручками пропишем сами

# grep -q "redis.so" /usr/local/lib/php.ini || echo 'extension=redis.so' >> /usr/local/lib/php.ini

Проверка на всякий случай
# for i in `grep ^extension_dir /usr/local/lib/php.ini | awk {'print $3'} | cut -d\" -f2` ;do ls -lah $i/redis* ;done

Так как работаю я с серверами под управлением cPanel, то создам файлик скрипта, который будет добавлять дополнительно установленные модули в php.ini после перекомпиляции при помощи easyapache.
Если таких модулей несколько, то потом уже ручками буду в этот файлик добавлять нужные строки.

На деле же, сколько раз перекомпилировал apache+php, ни разу ничего не херилось. Но на всякий пожарный пускай будет.

# for i in `grep ^extension_dir /usr/local/lib/php.ini | awk {'print $3'} | cut -d\" -f2` ;do cp $i/redis.so /root ;done
# for i in `grep ^extension_dir /usr/local/lib/php.ini | awk {'print $3'} | cut -d\" -f2` ;do echo -e '#!/bin/bash\ncp /root/redis.so' "$i\ngrep -q 'redis.so' /usr/local/lib/php.ini || echo 'extension=redis.so' >> /usr/local/lib/php.ini\n/etc/init.d/httpd restart" > /usr/local/cpanel/scripts/posteasyapache ;done
# chmod +x /usr/local/cpanel/scripts/posteasyapache

Перезапускаем apache и снова небольшая проверка
# php -i | grep -i redis

Теперь едем дальше, устанавливаем модуль Cm_Cache_Backend_Redis

Модуль устанавливается непосредственно в систему Magento, поэтому ssh здесь уже не нужен, можно и через FTP все сделать.

Я скачал весь репо отсюда.
Из архива достаем папку Cm_Cache_Backend_Redis/Cm/Cache/Backend/ со всем ее содержимым и заливаем ее в app/code/community/
Должно получиться так:
/app/code/community/Cm/Cache/Backend/

Также, копируем папку /lib/Credis/ в соответствующую ей папку /lib в Magento

Теперь отдельно качаем файл Client.php
И закидываем его в эту папку
Должно получиться так
/lib/Credis/Client.php

Все готово, можно менять настройки кеширования в файле /app/etc/local.xml

Сразу же после <session_save><![CDATA[]]></session_save>
Добавляем

<cache>
<backend>Cm_Cache_Backend_Redis</backend>
<backend_options>
<server>127.0.0.1</server> <!-- or absolute path to unix socket -->
<port>6379</port>
<persistent></persistent> <!-- Specify a unique string like "cache-db0" to enable persistent connections. -->
<database>0</database>
<password></password>
<force_standalone>0</force_standalone>  <!-- 0 for phpredis, 1 for standalone PHP -->
<connect_retries>1</connect_retries>    <!-- Reduces errors due to random connection failures -->
<read_timeout>10</read_timeout>         <!-- Set read timeout duration -->
<automatic_cleaning_factor>0</automatic_cleaning_factor> <!-- Disabled by default -->
<compress_data>1</compress_data>  <!-- 0-9 for compression level, recommended: 0 or 1 -->
<compress_tags>1</compress_tags>  <!-- 0-9 for compression level, recommended: 0 or 1 -->
<compress_threshold>20480</compress_threshold>  <!-- Strings below this size will not be compressed -->
<compression_lib>gzip</compression_lib> <!-- Supports gzip, lzf and snappy -->
</backend_options>
</cache>

Наиболее актуальный конфиг можно всегда посмотреть здесь.

Не забыть очистить старые кеши и сессии в папках
/var/session
/var/cache

Перезапустить apache до кучи.
После этого можно запускать Redis
# /etc/init.d/redis_6379 start

Вот, собственно и все :-) Ну, на самом деле почти все. Потому что если уж быть маньяком кеша и скорости, то быть им до конца. А это значит, что нужно установить еще один модуль для кеширования самих сессий Magento внутри Redis.

Но, тут и так слишком много букв получилось. Напишу об этом в другом посте. Заодно проверю что лучше, хранить сессии в Memcached или же в Redis.

Комментариев нет :

Отправить комментарий