sql >> Database >  >> NoSQL >> Redis

Redis instellen op Webfaction

Inleiding

Vanwege de speciale omgevingsbeperkingen van Webfaction-servers zijn de installatie-instructies niet zo eenvoudig als ze zouden zijn. Desalniettemin heb je uiteindelijk een volledig functionerende Redis-server die ook na een herstart blijft werken. Ik heb persoonlijk Redis ongeveer een half jaar geleden volgens de volgende procedure geïnstalleerd en sindsdien werkt het probleemloos. Een kleine waarschuwing echter, een half jaar is niet lang, vooral omdat de server niet intensief is gebruikt.

De instructies bestaan ​​uit vijf delen:Installatie, Testen, Server starten, Server beheren en Server draaiende houden.

Installatie

Log in op uw Webfaction-shell

ssh [email protected]

Download de nieuwste Redis van de Redis-downloadsite.

> 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/

Voor het merk, zie is uw server Linux 32 of 64 bit. Het installatiescript kan 32-bits omgevingen niet goed aan, althans niet op de CentOS 5-machines van Webfaction. Het commando voor bits is uname -m . Als Linux 32 bit is, is het resultaat i686, als 64 bit dan x86_64. Zie dit antwoord voor details.

> uname -m
i686

Als je server 64 bit (x86_64) is, maak dan gewoon.

> make

Maar als je server 32 bit (i686) is, dan hoef je weinig extra dingen te doen. Er is een commando make 32bit maar het geeft een fout. Bewerk een regel in het installatiescript om make 32bit . te maken aan het werk.

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

Verander de regel 214 hiervan

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

naar dit

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

en opslaan. Voer vervolgens het merk uit met een 32-bits vlag.

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

De uitvoerbare bestanden zijn gemaakt in de map ~/src/redis-2.6.16/src/ . De uitvoerbare bestanden bevatten redis-cli , redis-server , redis-benchmark en redis-sentinel .

Testen (optioneel)

Zoals de uitvoer van de installatie suggereert, zou het leuk zijn om ervoor te zorgen dat alles werkt zoals verwacht door tests uit te voeren.

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

Helaas moet voor het testen tlc8.6.0 worden geïnstalleerd, wat niet de standaard is, althans niet op de machine web223. U moet het dus eerst vanaf de bron installeren. Zie Tcl/Tk installatie-opmerkingen en compilatie-opmerkingen.

> 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 testen met make test zal tijd kosten en zal ook mislukken vanwege de omgevingsbeperkingen van WebFaction. Ik raad je aan dit over te slaan.

Nu we Tlc hebben geïnstalleerd, kunnen we Redis-tests uitvoeren. De tests zullen lang duren en gebruiken ook tijdelijk een vrij grote hoeveelheid geheugen.

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

Na de tests ben je klaar om verder te gaan.

De server starten

Maak eerst een aangepaste applicatie via Webfaction Control Panel (Custom app (luisteren op poort)). Noem het bijvoorbeeld fooredis . Houd er rekening mee dat u geen domein of website voor de app hoeft te maken als Redis alleen lokaal wordt gebruikt, d.w.z. van dezelfde host.

Ten tweede, maak een notitie over het socketpoortnummer dat voor de app is gegeven. Laat het voorbeeld zijn 23015 .

Kopieer de eerder gecompileerde uitvoerbare bestanden naar de map van de app. Je kunt ervoor kiezen om alle of alleen degene die je nodig hebt te kopiëren.

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

Kopieer ook het voorbeeldconfiguratiebestand. U zult dat binnenkort aanpassen.

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

Nu is Redis al uitvoerbaar. Er zijn wel een paar problemen. Ten eerste is de standaard Redis-poort 6379 mogelijk al in gebruik. Ten tweede, zelfs als de poort vrij was, zou je de server kunnen starten, maar hij stopt op hetzelfde moment dat je de shell verlaat. Voor de eerste moet de redis.conf worden bewerkt en voor de tweede heb je een daemon nodig die ook wordt opgelost door redis.conf te bewerken.

Redis kan zichzelf uitvoeren in de daemon-modus. Daarvoor moet je een plaats instellen waar de daemon zijn proces-ID's, PID's, opslaat. Gewoonlijk worden pid-bestanden opgeslagen in /var/run/, maar vanwege de omgevingsbeperkingen moet u er een plaats voor selecteren in uw thuismap. Omdat een reden verderop in het deel De server beheren wordt uitgelegd, is het een goede keuze om het pid-bestand in dezelfde map te plaatsen als de uitvoerbare bestanden. U hoeft het bestand niet zelf aan te maken, Redis maakt het automatisch voor u aan.

Open nu de redis.conf om te bewerken.

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

Wijzig de configuraties op de volgende manier.

  • daemonize no -> daemonize yes
  • pidfile /var/run/redis.pid -> pidfile /home/foouser/webapps/fooredis/redis.pid
  • port 6379 -> port 23015

Start nu eindelijk de Redis-server. Specificeer het conf-bestand zodat Redis naar de juiste poort luistert en als een daemon draait.

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

Zie het draaien.

> 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)
>

Stop de server als je wilt.

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

of

> cat redis.pid | xargs kill

De server beheren

Maak voor het gebruiksgemak en als voorbereidend werk voor het volgende deel een script dat helpt bij het openen van de client en het starten, herstarten en stoppen van de server. Een makkelijke oplossing is om een ​​makefile te schrijven. Denk er bij het schrijven van een makefile aan tabs te gebruiken in plaats van spaties.

> 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

De regels zijn vrij duidelijk. Het bijzondere van de tweede regel is dat in de daemon-modus, het aanroepen van de ./redis-server geen nieuw proces aanmaakt als er al een actief is.

De derde regel heeft wat stille wijsheid in zich. Als redis.pid niet was opgeslagen onder de directory van fooredis maar bijvoorbeeld naar /var/run/redis.pid, dan zou het niet zo eenvoudig zijn om de server te stoppen. Dit is met name het geval als u meerdere Redis-instanties tegelijkertijd uitvoert.

Om een ​​regel uit te voeren:

> make start

De server draaiende houden

Je hebt nu een exemplaar van Redis in de daemon-modus waarmee je de shell kunt afsluiten zonder hem te stoppen. Dit is nog niet genoeg. Wat als het proces crasht? Wat als de servermachine opnieuw wordt opgestart? Om deze te dekken moet je twee cronjobs maken.

> export EDITOR=nano
> crontab -e

Voeg de volgende twee regels toe en sla op.

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

De eerste zorgt ervoor dat elke vijf minuten fooredis draait. Zoals hierboven vermeld, wordt hiermee geen nieuw proces gestart als er al een actief is. De tweede zorgt ervoor dat fooredis onmiddellijk wordt gestart nadat de servermachine opnieuw is opgestart en lang voordat de eerste regel van kracht wordt.

Hiervoor zouden wat meer gedelegeerde methoden kunnen worden gebruikt, bijvoorbeeld forever. Zie ook deze Webfaction Community-thread voor meer over het onderwerp.

Conclusie

Nu heb je het. Veel gedaan, maar misschien komt er nog meer. Dingen die u in de toekomst misschien leuk vindt om te doen en die hier niet aan bod kwamen, zijn onder meer de volgende.

  • Een wachtwoord instellen om te voorkomen dat andere gebruikers uw databases leegmaken. (Zie redis.conf)
  • Het geheugengebruik beperken (zie redis.conf)
  • Het gebruik en fouten loggen (Zie redis.conf)
  • Af en toe een back-up van de gegevens maken.

Ideeën, opmerkingen of correcties?



  1. How-to:gebruik de Apache HBase REST-interface, deel 1

  2. Grafiek DB's vs. Document DB's vs. Triplestores

  3. Wat is de beste manier om datums op te slaan in MongoDB?

  4. redis + gevent - Slechte prestaties - wat doe ik verkeerd?