Redis
 sql >> база данни >  >> NoSQL >> Redis

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

Въведение

Поради ограниченията на специалната среда на сървърите на 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-битовите среди, поне на машините CentOS 5 на Webfaction. Командата за битове е uname -m . Ако Linux е 32-битов резултатът ще бъде i686, ако 64-битов, тогава x86_64. Вижте този отговор за подробности.

> uname -m
i686

Ако вашият сървър е 64 битов (x86_64), просто направете.

> 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/, но поради ограниченията на средата трябва да изберете място за тях във вашата домашна директория. Тъй като причина, обяснена по-късно в частта Управление на сървъра, добър избор е да поставите pidfile в същата директория като изпълнимите файлове. Не е нужно да създавате файла сами, 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

или

> 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-сървъра не създава нов процес, ако вече има работещ.

Третото правило съдържа известна мъдрост. Ако redis.pid не беше съхранен в директорията на fooredis, а например в /var/run/redis.pid, тогава нямаше да е толкова лесно да спрете сървъра. Това е особено вярно, ако стартирате няколко копия на Redis едновременно.

За да изпълните правило:

> make start

Поддържане на сървъра да работи

Вече имате екземпляр на Redis, работещ в режим на демон, който ви позволява да излезете от обвивката, без да я спирате. Това все още не е достатъчно. Ами ако процесът се срине? Ами ако сървърната машина се рестартира? За да ги покриете, трябва да създадете два cronjob.

> 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 се стартира веднага след рестартиране на сървърната машина и много преди първото правило да започне.

Могат да се използват някои по-деликатни методи за това, например завинаги. Вижте също тази тема на общността на Webfaction за повече информация по темата.

Заключение

Сега го имате. Свършени са много неща, но може би ще дойдат още. Нещата, които може да искате да правите в бъдеще, които не бяха разгледани тук, включват следното.

  • Задаване на парола, предотвратяване на други потребители да изтриват вашите бази данни. (Вижте redis.conf)
  • Ограничаване на използването на паметта (вижте redis.conf)
  • Регистриране на употребата и грешките (вижте redis.conf)
  • Архивиране на данните от време на време.

Някакви идеи, коментари или корекции?



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Защо Redis SortedSet използва Skip List вместо Balanced Tree?

  2. redis-сървър в ubuntu14.04:Адресът за свързване, който вече се използва

  3. Spring RedisConnectionFactory с транзакция, която не връща връзката към пула и след това се блокира при изчерпване

  4. как да получа всички ключове и стойности в redis в javascript?

  5. Как да се свърже отново Redis клиент след рестартиране/мащабиране на Redis сървър