Úvod
Kvůli speciálním omezením prostředí serverů Webfaction nejsou pokyny k instalaci tak jednoduché, jak by byly. Nicméně na konci budete mít plně funkční Redis server, který zůstane v provozu i po restartu. Osobně jsem Redis nainstaloval následujícím postupem asi před půl rokem a od té doby běží bezchybně. Ale malé varování, půl roku není dlouhá doba, zejména proto, že server nebyl příliš využíván.
Pokyny se skládají z pěti částí:Instalace, Testování, Spuštění serveru, Správa serveru a Udržování serveru v chodu.
Instalace
Přihlaste se do svého prostředí Webfaction
ssh [email protected]
Stáhněte si nejnovější Redis ze stránky pro stahování 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/
Před provedením se podívejte, zda je váš server Linux 32 nebo 64 bit. Instalační skript nezvládá dobře 32bitová prostředí, alespoň na počítačích CentOS 5 od Webfaction. Příkaz pro bity je uname -m
. Pokud je Linux 32bitový, výsledkem bude i686, pokud je 64bitový, pak x86_64. Podrobnosti naleznete v této odpovědi.
> uname -m
i686
Pokud je váš server 64bitový (x86_64), pak jednoduše vytvořte.
> make
Ale pokud je váš server 32bitový (i686), musíte udělat něco málo navíc. Existuje příkaz make 32bit
ale způsobí to chybu. Upravte řádek v instalačním skriptu tak, aby byl make 32bit
do práce.
> nano ~/src/redis-2.6.16/src/Makefile
Změňte řádek 214 z tohoto
$(MAKE) CFLAGS="-m32" LDFLAGS="-m32"
k tomuto
$(MAKE) CFLAGS="-m32 -march=i686" LDFLAGS="-m32 -march=i686"
a uložit. Poté spusťte make s 32bitovým příznakem.
> cd ~/src/redis-2.6.16/ ## Note the dir, no trailing src/
> make 32bit
Spustitelné soubory byly vytvořeny do adresáře ~/src/redis-2.6.16/src/
. Mezi spustitelné soubory patří redis-cli
, redis-server
, redis-benchmark
a redis-sentinel
.
Testování (volitelné)
Jak naznačuje výstup instalace, bylo by hezké zajistit, aby vše fungovalo podle očekávání spuštěním testů.
Hint: To run 'make test' is a good idea ;)
Bohužel testování vyžaduje instalaci tlc8.6.0, což není výchozí nastavení alespoň na stroji web223. Nejprve jej tedy musíte nainstalovat ze zdroje. Viz poznámky k instalaci Tcl/Tk a poznámky ke kompilaci.
> 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
Testování Tcl pomocí make test
bude nějakou dobu trvat a také selže kvůli omezením prostředí WebFaction. Doporučuji toto přeskočit.
Nyní, když máme nainstalovaný Tlc, můžeme spustit testy Redis. Testy budou trvat dlouho a také dočasně využívají poměrně velké množství paměti.
> cd ~/src/redis-2.6.16/
> make test
Po testech jste připraveni pokračovat.
Spuštění serveru
Nejprve vytvořte vlastní aplikaci prostřednictvím ovládacího panelu Webfaction (Vlastní aplikace (naslouchání na portu)). Pojmenujte to například fooredis . Upozorňujeme, že pokud se Redis používá pouze lokálně, tj. ze stejného hostitele, nemusíte pro aplikaci vytvářet doménu nebo web.
Za druhé, poznamenejte si číslo portu zásuvky, které bylo dané aplikaci. Nechť je příklad 23015 .
Zkopírujte dříve zkompilované spustitelné soubory do adresáře aplikace. Můžete se rozhodnout zkopírovat všechny nebo pouze ty, které potřebujete.
> cd ~/webapps/fooredis/
> cp ~/src/redis-2.6.16/src/redis-server .
> cp ~/src/redis-2.6.16/src/redis-cli .
Zkopírujte také vzorový konfigurační soubor. Brzy to změníte.
> cp ~/src/redis-2.6.16/redis.conf .
Nyní je Redis již spustitelný. Existuje však několik problémů. Nejprve může být výchozí port Redis 6379 již používán. Zadruhé, i kdyby byl port volný, ano, můžete spustit server, ale zastaví se ve stejném okamžiku, kdy opustíte shell. Pro první je nutné upravit redis.conf a pro druhý potřebujete démona, který se také řeší úpravou redis.conf.
Redis je schopen běžet sám v režimu démona. K tomu musíte nastavit místo, kde démon ukládá svá ID procesů, PID. Obvykle jsou pidfily uloženy ve /var/run/, ale kvůli omezením prostředí pro ně musíte vybrat místo ve svém domovském adresáři. Protože důvod je vysvětlen později v části Správa serveru, je dobrou volbou umístit pidfile do stejného adresáře jako spustitelné soubory. Soubor nemusíte vytvářet sami, Redis ho za vás vytvoří automaticky.
Nyní otevřete redis.conf pro úpravy.
> cd ~/webapps/fooredis/
> nano redis.conf
Změňte konfigurace následujícím způsobem.
daemonize no
->daemonize yes
pidfile /var/run/redis.pid
->pidfile /home/foouser/webapps/fooredis/redis.pid
port 6379
->port 23015
Nyní konečně spusťte server Redis. Zadejte soubor conf, aby Redis naslouchal správnému portu a běžel jako démon.
> cd ~/webapps/fooredis/
> ./redis-server redis.conf
>
Podívejte se, jak běží.
> 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)
>
Pokud chcete, zastavte server.
> ps -u $USER -o pid,command | grep redis
718 grep redis
10735 ./redis-server redis.conf
> kill 10735
nebo
> cat redis.pid | xargs kill
Správa serveru
Pro usnadnění použití a jako přípravnou práci na další část vytvořte skript, který pomůže otevřít klienta a spustit, restartovat a zastavit server. Snadným řešením je napsat makefile. Při psaní makefile nezapomeňte použít tabulátory místo mezer.
> 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
Pravidla jsou celkem samozřejmá. Zvláštní na druhém pravidle je, že v režimu démona volání ./redis-server nevytvoří nový proces, pokud již nějaký běží.
Třetí pravidlo má v sobě nějakou tichou moudrost. Pokud by redis.pid nebyl uložen pod adresářem fooredis, ale například do /var/run/redis.pid, nebylo by tak snadné server zastavit. To platí zejména v případě, že spouštíte více instancí Redis současně.
Chcete-li provést pravidlo:
> make start
Zachování provozu serveru
Nyní máte instanci Redis spuštěnou v režimu démona, který vám umožňuje ukončit shell bez jeho zastavení. To je stále málo. Co když se proces zhroutí? Co když se server restartuje? Chcete-li je pokrýt, musíte vytvořit dva cronjoby.
> export EDITOR=nano
> crontab -e
Přidejte následující dva řádky a uložte.
*/5 * * * * make -C ~/webapps/fooredis/ -f ~/webapps/fooredis/Makefile start
@reboot make -C ~/webapps/fooredis/ -f ~/webapps/fooredis/Makefile start
První zajišťuje každých pět minut, že fooredis běží. Jak bylo řečeno výše, nezahájí to nový proces, pokud již běží. Druhý zajišťuje, že se fooredis spustí okamžitě po restartu serveru a dlouho předtím, než se spustí první pravidlo.
K tomu by se daly použít nějaké delikátnější metody, třeba navždy. Další informace o tématu naleznete také v tomto vláknu komunity Webfaction.
Závěr
Teď to máš. Spousta věcí se udělala, ale možná přijde víc. Věci, které byste mohli chtít dělat v budoucnu a které zde nebyly popsány, zahrnují následující.
- Nastavení hesla, které zabrání ostatním uživatelům vyprázdnit vaše databáze. (Viz redis.conf)
- Omezení využití paměti (viz redis.conf)
- Protokolování využití a chyb (viz redis.conf)
- Zálohování dat jednou za čas.
Nějaké nápady, komentáře nebo opravy?