Какие шаги необходимо выполнить для настройки базы данных Redis на Webfaction общий хостинг-аккаунт?
Настройка Redis на Webfaction
Ответы (3)
Введение
Из-за особых ограничений среды серверов 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/
Перед установкой посмотрите, какой у вас сервер Linux 32 или 64 бит. Сценарий установки плохо работает с 32-разрядными средами, по крайней мере, на компьютерах Webfaction с CentOS 5. Команда для битов — uname -m
. Если Linux 32-битный, то результат будет i686, если 64-битный, то x86_64. Подробности см. в этом ответе.
> uname -m
i686
Если ваш сервер 64-битный (x86_64), то просто make.
> make
Но если ваш сервер 32-битный (i686), вам придется сделать немного больше. Есть команда make 32bit
но она выдает ошибку. Отредактируйте строку в сценарии установки, чтобы 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. Обычно pid-файлы хранятся в /var/run/, но из-за ограничений среды вы должны выбрать место для них в своем домашнем каталоге. Поскольку причина, объясненная позже в части «Управление сервером», хорошим выбором является размещение pid-файла в том же каталоге, что и исполняемые файлы. Вам не нужно создавать файл самостоятельно, Redis создает его автоматически.
Теперь откройте redis.conf для редактирования.
> cd ~/webapps/fooredis/
> nano redis.conf
Измените конфигурации следующим образом.
daemonize no
->daemonize yes
pidfile /var/run/redis.pid
->pidfile /home/foouser/webapps/fooredis/redis.pid
port 6379
->port 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
or
> cat redis.pid | xargs kill
Управление сервером
Для удобства использования и в качестве подготовительной работы к следующей части сделайте скрипт, помогающий открывать клиент и запускать, перезапускать и останавливать сервер. Простое решение — написать make-файл. При написании make-файла не забывайте использовать табуляции вместо пробелов.
> 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)
- Резервное копирование данных время от времени.
Любые идеи, комментарии или исправления?
Подводя итог отличному ответу Аксели:
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!
К вашему сведению, если вы устанавливаете redis 2.8.8+
, вы можете получить ошибку, неопределенную ссылку на __sync_add_and_fetch_4
при компиляции. См. http://www.eschrade.com/page/undefined-reference-to-__sync_add_and_fetch_4/ для информации.
Я вставил соответствующую часть с этой страницы ниже на случай, если страница когда-либо отключится. По сути, вам нужно экспортировать переменную CFLAGS и перезапустить процесс сборки.
[root@devvm1 redis-2.6.7]# export CFLAGS=-march=i686
[root@devvm1 redis-2.6.7]# make distclean
[root@devvm1 redis-2.6.7]# make