21 December 2011

Установка Redis + Redis PHP + phpRedisAdmin на боевом сервере за 15 минут

NoSQL
Всем уже давно известно, что самые лучшие бинарные файлы — это те, которые были скомпилированы именно на этом компьютере. И, когда вопрос заходит о производительности, то компилирование компонентов на этом компьютере даст свое преимущество в скорости и стабильности.

В данной статье речь пойдет о том, как подготовить Redis, phpredis (С модуль для php) и phpRedisAdmin для работы на боевом сервере.

Для того, чтобы собрать все полноценно, нам нужно иметь на сервере:
  • gcc 4.5.2 (Я компилировал под этой версией, но думаю, что с другими проблем не возникнет)
  • Make 3.81 (Опять же, версия не принципиальна)
  • php5-dev (Версия должна совпадать с версией php)


После того, как мы убедимся, что все зависимости удовлетворены, начинаем собирать все компоненты.
Нам потребуются:
  • Redis 2.4.4 Stable
  • phpredis 2.1.3
  • phpRedisAdmin


Собираем Redis


Для того, чтоб собрать Редис, нам потребуются сами исходники. Получить их можно с github. Поэтому
https://github.com/antirez/redis/zipball/2.4.4 загружаем сразу нужный тег.

$ wget https://github.com/antirez/redis/zipball/2.4.4
$ unzip 2.4.4
$ cd antirez-redis-04bba69


Теперь у нас есть все исходники Redis 2.4.4, осталось их скомпилировать.
Все очень просто
$ make
$ make test


Первой командой мы собрали Redis, второй его проверили на работоспособность.
Make test будет проходить долго (около 2х минут). После теста должна вернуться такая строка "\o/ All tests passed without errors!"

Redis собран, осталось зачистить мусор и унести редис в нужный каталог.
Унесем весь скомпилированный Redis в папку /usr/bin/redis. А чтоб запускать Redis-server, в /usr/bin создадим shell файл redis-server.

Уносим файлы Redis в /usr/bin/redis


Мы все еще остаемся в папке antirez-redis-04bba69, где лежат исходники
$ sudo mkdir /usr/bin/redis
$ sudo cp src/redis-benchmark /usr/bin/redis
$ sudo cp src/redis-check-aof /usr/bin/redis
$ sudo cp src/redis-check-dump /usr/bin/redis
$ sudo cp src/redis-cli /usr/bin/redis
$ sudo cp src/redis-server /usr/bin/redis
$ cd ..
$ rm -rf antirez-redis-04bba69

Мы скопировали все файлы от Redis и удалили папку с исходниками, она нам уже не нужна.
Будьте осторожны с последней командой! sudo для нее не нужен, папка и так в наших владениях.

Теперь нам нужно создать файл для запуска redis-server.

$ sudo vim /usr/bin/redis-server


Вместо vim можете использовать любой другой редактор. Это не принципиально.
В файл вставляем:
cd /usr/bin/redis && ./redis-server redis.conf
Сохраняем, закрываем.

Для этого файла нужно дать право на исполнение.
$ sudo chmod 755 /usr/bin/redis-server


Осталось взять redis.conf
$ cd /usr/bin/redis/
$ sudo wget https://raw.github.com/antirez/redis/unstable/redis.conf
$ sudo vim redis.conf


Redis.conf загружен, осталось его настроить.
Заменяем в файле конфигурации

daemonize no на daemonize yes # Пусть работает как демон
timeout 0 на timeout 30 # В случае баги клиент, который не отсоединяется, навечно зависнет в памяти Redis
loglevel notice на loglevel warning # У нас боевой сервер, минимум отладочных сообщений
Строку 166 нужно расскоментировать и установить пароль к примеру requirepass foobared
Строку 350 комментируем, она не нужна.

Сохраняем, закрываем.

Запуск!


Если все было сделано правильно, то запускаем сервер
$ redis-server
$ telnet localhost 6379


По идее вам должно показать приглашение от Redis
Trying 127.0.1.1…
Connected to localhost.
Escape character is '^]'.

Если вы его получили, значит все отлично, Redis работает.

Тестируем сервер


Теперь мы общаемся с Redis по сокету.
Авторизируемся:
AUTH mypassword


Устанавливаем тестовое значение
SET testkey testvalue
KEYS * # Получаем все ключи
GET testkey # Сервер должен вернуть testvalue
QUIT


Если все прошло успешно, значит сервер работает, и с ним мы заканчиваем. Устанавливаем команду на автозагрузку при старте системы и все.

Redis + PHP5. Компилируем модуль для PHP


Тут тоже все очень просто, так что можно просто следовать командам.
$ cd ~
$ wget https://github.com/nicolasff/phpredis/zipball/2.1.3
$ unzip 2.1.3
$ cd nicolasff-phpredis-43bc590

Тут думаю комментарии не нужны.

Теперь собираем redis.so расширение.
$ phpize
$ ./configure CFLAGS="-O3"
$ make clean all

Теперь в папке modules появился файл redis.so, он-то нам и нужен.

$ sudo cp modules/redis.so /usr/lib/php5/<date>
$ cd ..
$ rm -rf nicolasff-phpredis-43bc590

<date> меняем на имя папки, которое выглядит примерно так: 20090626.

Далее дать информацию php о Redis.so
поэтому
$ sudo vim /etc/php5/apache2/conf.d/redis.ini

и вписываем в него extension=redis.so
По желанию заменяем apache2 на cli, cgi и так далее, в зависимости от того, как у Вас установлен php, и как вы его хотите использовать вместе с Redis.

Теперь рестартим apache2 и в тестовом php файле пишем:
$redis = new Redis();
$redis->connect('localhost:6379');

Если ошибка, что класс Redis не существует, не вылетела, то все отлично.

Проведем benchmark тест непосредственно в php.
try {
    $redis = new Redis();
    $redis->connect('localhost:6379');
} catch(RedisException $e) {
    exit('Connect error');
}

$benchmark = microtime(true);

for($i=0;$i < 80000; $i++)
    $redis->set('key','value');

echo microtime(true) - $benchmark;


У меня появилась информация, что 80000 запросов были обработаны за 2.6 секунд.

На этом с php мы закончили. Далее phpRedisAdmin.

Установка phpRedisAdmin



Установка phpRedisAdmin абсолютно не нужна, но для визуализации данных не помешает.

Качаем из git саму админку.
$ cd /var/www
$ git clone git://github.com/ErikDubbelboer/phpRedisAdmin.git redisadmin
$ cd redisadmin
$ chmod 755 -R /var/www/redisadmin


Мы создаем папку redisadmin в /var/www. Добавляем права на файлы, потому что изначально у меня permission denied на redisadmin.

Не забудьте настроить веб-сервер, чтоб сайт можно было открыть уже из сети.
Но использовать redis admin не безопасно на продакшене, поэтому его нужно как ни как закрыть для всех посторонних глаз паролем.

$ vim config.inc.php

Нужно расскоментировать строку 11 и установить пароль к серверу.

Далее нужно расскоментировать блок с 36 по 46 строку, назначив админский пароль, который будет запрашиваться при входе в phpRedisAdmin

PROFIT!
За 15 минут мы смогли поднять Redis сервер, настроить его для работы с PHP и поднять phpRedisAdmin.
Tags:redisустановка redisredisphp
Hubs: NoSQL
+10
60.3k 149
Comments 17