Подтвердить что ты не робот

Настройка Redis на Webfaction

Каковы шаги, необходимые для настройки Redis на Webfaction общедоступная учетная запись хостинга?

4b9b3361

Ответ 1

Введение

Из-за особых ограничений среды серверов Webfaction инструкции по установке не так просты, как они были бы. Тем не менее, в конечном итоге у вас будет полностью функционирующий сервер Redis, который остается даже после перезагрузки. Я лично установил Redis в следующем порядке примерно полгода назад, и с тех пор он работает безупречно. Небольшое слово предупреждения, хотя, полгода не долгое время, особенно потому, что сервер не был тяжело использован.

Инструкции состоят из пяти частей: установка, тестирование, запуск сервера, управление сервером и ведение сервера.

Установка

Войдите в свою оболочку Webfaction

ssh [email protected]

Загрузите последнюю версию Redis из сайт загрузки Redis.

> mkdir -p ~/src/
> cd ~/src/
> wget http://download.redis.io/releases/redis-2.6.16.tar.gz
> tar -xzf redis-2.6.16.tar.gz
> cd redis-2.6.16/

Перед make, см. ваш сервер Linux 32 или 64 бит. Установка script не поддерживает 32-разрядные среды, по крайней мере, на машинах Webfaction CentOS 5. Команда для бит - uname -m. Если Linux 32 бит, результатом будет i686, если 64 бит, то x86_64. Подробнее см. .

> uname -m
i686

Если ваш сервер 64-разрядный (x86_64), просто выполните команду.

> make

Но если ваш сервер 32-битный (i686), вы должны делать немного лишних вещей. Существует команда make 32bit, но она вызывает ошибку. Измените строку в установке script, чтобы сделать make 32bit работать.

> nano ~/src/redis-2.6.16/src/Makefile

Измените строку 214 из этого

$(MAKE) CFLAGS="-m32" LDFLAGS="-m32"

к этому

$(MAKE) CFLAGS="-m32 -march=i686" LDFLAGS="-m32 -march=i686"

и сохраните. Затем запустите make с 32-битным флагом.

> cd ~/src/redis-2.6.16/  ## Note the dir, no trailing src/
> make 32bit

Исполняемые файлы были созданы в каталог ~/src/redis-2.6.16/src/. Исполняемые файлы включают redis-cli, redis-server, redis-benchmark и redis-sentinel.

Тестирование (необязательно)

Как показывает вывод установки, было бы хорошо убедиться, что все работает так, как ожидалось, путем запуска тестов.

Hint: To run 'make test' is a good idea ;)

К сожалению, для тестирования требуется установить tlc8.6.0, который по умолчанию не установлен по умолчанию на web223. Поэтому вы должны установить его сначала, из источника. См. примечания по установке Tcl/Tk и компиляция примечаний.

> cd ~/src/
> wget http://prdownloads.sourceforge.net/tcl/tcl8.6.0-src.tar.gz
> tar -xzf tcl8.6.0-src.tar.gz
> cd tcl8.6.0-src/unix/
> ./configure --prefix=$HOME
> make
> make test # Optional, see notes below
> make install

Тестирование Tcl с помощью make test потребует времени, а также из-за ограничений среды WebFaction. Я предлагаю вам пропустить это.

Теперь, когда мы установили Tlc, мы можем запустить тесты Redis. Тестирование займет много времени, а также временно использует довольно большой объем памяти.

> cd ~/src/redis-2.6.16/
> make test

После тестов вы готовы продолжить.

Запуск сервера

Сначала создайте собственное приложение через панель управления Webfaction (пользовательское приложение (прослушивание на порту)). Назовите его, например, fooredis. Обратите внимание, что вам не нужно создавать домен или веб-сайт для приложения, если Redis используется только локально, то есть с одного и того же хоста.

Во-вторых, обратите внимание на номер порта сокета, который был указан для приложения. Пусть пример равен 23015.

Скопируйте ранее скомпилированные исполняемые файлы в каталог приложения. Вы можете копировать все или только те, которые вам нужны.

> cd ~/webapps/fooredis/
> cp ~/src/redis-2.6.16/src/redis-server .
> cp ~/src/redis-2.6.16/src/redis-cli .

Скопируйте также пример файла конфигурации. Вы скоро измените это.

> cp ~/src/redis-2.6.16/redis.conf .

Теперь Redis уже запущен. Однако есть пара проблем. Сначала порт Redis по умолчанию 6379 может быть уже использован. Во-вторых, даже если порт свободен, да, вы можете запустить сервер, но он перестает работать в тот же момент, когда вы выходите из оболочки. Для первого нужно отредактировать redis.conf, а для второго вам понадобится демон, который также решается путем редактирования redis.conf.

Redis может запускать себя в режиме демона. Для этого вам нужно настроить место, где демон хранит свои идентификаторы процесса, PID. Обычно pidfiles хранятся в /var/run/, но из-за ограничений среды вы должны выбрать место для них в своем домашнем каталоге. Поскольку причина объясняется позже в разделе "Управление сервером", хорошим выбором является поместить файл pidfile в тот же каталог, что и исполняемые файлы. Вам не нужно создавать файл самостоятельно, Redis автоматически создает его для вас.

Теперь откройте редактор redis.conf для редактирования.

> cd ~/webapps/fooredis/
> nano redis.conf

Измените конфигурации следующим образом.

  • daemonize nodaemonize yes
  • pidfile /var/run/redis.pidpidfile /home/foouser/webapps/fooredis/redis.pid
  • port 6379port 23015

Теперь, наконец, запустите сервер Redis. Укажите conf файл, чтобы Redis прослушивал правильный порт и запускался как демон.

> cd ~/webapps/fooredis/
> ./redis-server redis.conf
> 

Посмотрите, как работает.

> cd ~/webapps/fooredis/
> ./redis-cli -p 23015
redis 127.0.0.1:23015> SET myfeeling Phew.
OK
redis 127.0.0.1:23015> GET myfeeling
"Phew."
redis 127.0.0.1:23015> (ctrl-d)
>

Остановите сервер, если хотите.

> ps -u $USER -o pid,command | grep redis
  718 grep redis
10735 ./redis-server redis.conf
> kill 10735

или

> cat redis.pid | xargs kill

Управление сервером

Для удобства использования и в качестве подготовительной работы для следующей части создайте script, который поможет открыть клиент и запустить, перезапустить и остановить сервер. Простое решение - написать make файл. При написании файла makefile не забудьте использовать вкладки вместо пробелов.

> cd ~/webapps/fooredis/
> nano Makefile

# Redis Makefile
client cli:
    ./redis-cli -p 23015

start restart:
    ./redis-server redis.conf

stop:
    cat redis.pid | xargs kill

Правила совершенно понятны. Особенностью второго правила является то, что в режиме демона вызов. /redis -server не создает новый процесс, если он уже запущен.

В третьем правиле царит тихая мудрость. Если redis.pid не был сохранен в каталоге fooredis, но, например, в /var/run/redis.pid, остановить сервер было бы не так просто. Это особенно верно, если вы одновременно запускаете несколько экземпляров Redis.

Чтобы выполнить правило:

> make start

Сохранение работы сервера

Теперь у вас есть экземпляр Redis, работающий в режиме демона, который позволяет вам выйти из оболочки без ее остановки. Этого еще недостаточно. Что делать, если процесс выходит из строя? Что делать, если серверная машина перезагружена? Чтобы их охватить, вам нужно создать два cronjobs.

> export EDITOR=nano
> crontab -e

Добавьте следующие две строки и сохраните.

*/5 * * * * make -C ~/webapps/fooredis/ -f ~/webapps/fooredis/Makefile start
@reboot make -C ~/webapps/fooredis/ -f ~/webapps/fooredis/Makefile start

Первая из них обеспечивает каждые пять минут работы fooredis. Как сказано выше, это не запускает новый процесс, если он уже запущен. Второй способ гарантирует, что fooredis запускается сразу после перезагрузки серверной машины и задолго до того, как начнется первое правило.

Для этого могут использоваться несколько других методов деления, например forever. Смотрите также этот поток сообщества Webfaction для получения дополнительной информации о теме.

Заключение

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

  • Установка пароля, запрещающего другим пользователям очищать ваши базы данных. (См. Redis.conf)
  • Ограничение использования памяти (см. redis.conf)
  • Регистрация использования и ошибок (см. redis.conf)
  • Резервное копирование данных раз в то время.

Любые идеи, комментарии или исправления?

Ответ 2

Подводя итог Аксели:

assume your user is named "magic_r_user"

cd ~
wget "http://download.redis.io/releases/redis-3.0.0.tar.gz"
tar -xzf redis-3.0.0.tar.gz
mv redis-3.0.0 redis
cd redis
make
make test
create a custom app "listening on port" through the Webfaction management website
    assume we named it magic_r_app
    assume it was assigned port 18932
cp ~/redis/redis.conf ~/webapps/magic_r_app/
vi ~/webapps/magic_r_app/redis.conf
    daemonize yes   
    pidfile ~/webapps/magic_r_app/redis.pid
    port 18932
test it
    ~/redis/src/redis-server ~/webapps/magic_r_app/redis.conf
    ~/redis/src/redis-cli -p 18932
    ctrl-d
    cat ~/webapps/magic_r_app/redis.pid | xargs kill
crontab -e
    */1 * * * * /home/magic_r_user/redis/src/redis-server /home/magic_r_user/webapps/magic_r_app/redis.conf &>> /home/magic_r_user/logs/user/cron.log
don't forget to set a password!

Ответ 3

FYI, если вы устанавливаете redis 2.8.8+, вы можете получить ошибку, undefined ссылку на __sync_add_and_fetch_4 при компиляции. Подробнее см. http://www.eschrade.com/page/undefined-reference-to-__sync_add_and_fetch_4/.

Я вставил соответствующую часть с этой страницы ниже, если страница когда-либо выходит в автономный режим. По сути вам нужно экспортировать переменную CFLAGS и перезапустить процесс сборки.

[[email protected] redis-2.6.7]# export CFLAGS=-march=i686
[[email protected] redis-2.6.7]# make distclean
[[email protected] redis-2.6.7]# make