Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Konfigurowanie Redis na Webfaction

Wprowadzenie

Ze względu na specjalne ograniczenia środowiskowe serwerów Webfaction, instrukcje instalacji nie są tak proste, jak byłyby. Niemniej jednak na końcu będziesz mieć w pełni działający serwer Redis, który działa nawet po ponownym uruchomieniu. Osobiście zainstalowałem Redis zgodnie z następującą procedurą około pół roku temu i od tego czasu działa bezbłędnie. Jednak małe słowo ostrzeżenia, pół roku to niedługo, zwłaszcza że serwer nie był intensywnie używany.

Instrukcja składa się z pięciu części:instalacji, testowania, uruchamiania serwera, zarządzania serwerem i utrzymywania działania serwera.

Instalacja

Zaloguj się do swojej powłoki Webfaction

ssh [email protected]

Pobierz najnowszy Redis ze strony pobierania 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/

Przed wykonaniem zobacz, czy twój serwer Linux 32 lub 64 bit. Skrypt instalacyjny nie radzi sobie dobrze ze środowiskami 32-bitowymi, przynajmniej na komputerach Webfaction CentOS 5. Polecenie dla bitów to uname -m . Jeśli Linux jest 32-bitowy, wynikiem będzie i686, jeśli 64-bitowy, to x86_64. Zobacz tę odpowiedź, aby uzyskać szczegółowe informacje.

> uname -m
i686

Jeśli twój serwer jest 64-bitowy (x86_64), po prostu zrób.

> make

Ale jeśli twój serwer jest 32-bitowy (i686), musisz zrobić trochę dodatkowych rzeczy. Jest polecenie make 32bit ale powoduje błąd. Edytuj linię w skrypcie instalacyjnym, aby make 32bit do pracy.

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

Zmień linię 214 z tego

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

do tego

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

i zapisz. Następnie uruchom make z flagą 32bit.

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

Pliki wykonywalne zostały utworzone w katalogu ~/src/redis-2.6.16/src/ . Pliki wykonywalne obejmują redis-cli , redis-server , redis-benchmark i redis-sentinel .

Testowanie (opcjonalnie)

Jak sugeruje wynik instalacji, dobrze byłoby upewnić się, że wszystko działa zgodnie z oczekiwaniami, uruchamiając testy.

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

Niestety testowanie wymaga zainstalowania tlc8.6.0, co nie jest domyślne, przynajmniej na maszynie web223. Więc musisz go najpierw zainstalować ze źródła. Zobacz uwagi dotyczące instalacji Tcl/Tk i uwagi dotyczące kompilacji.

> 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

Testowanie Tcl za pomocą make test zajmie trochę czasu i zakończy się niepowodzeniem ze względu na ograniczenia środowiska WebFaction. Proponuję pominąć to.

Teraz, gdy mamy zainstalowany Tlc, możemy uruchomić testy Redis. Testy zajmą dużo czasu, a także tymczasowo wykorzystają dość dużą ilość pamięci.

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

Po zakończeniu testów możesz kontynuować.

Uruchamianie serwera

Najpierw utwórz niestandardową aplikację za pomocą Panelu sterowania Webfaction (Aplikacja niestandardowa (nasłuchiwanie na porcie)). Nazwij go na przykład fooredis . Pamiętaj, że nie musisz tworzyć domeny ani strony internetowej dla aplikacji, jeśli Redis jest używany tylko lokalnie, tj. Z tego samego hosta.

Po drugie, zanotuj numer portu gniazda, który został podany dla aplikacji. Niech przykładem będzie 23015 .

Skopiuj wcześniej skompilowane pliki wykonywalne do katalogu aplikacji. Możesz skopiować wszystkie lub tylko te, których potrzebujesz.

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

Skopiuj również przykładowy plik konfiguracyjny. Wkrótce to zmienisz.

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

Teraz Redis można już uruchomić. Jest jednak kilka problemów. Po pierwsze, domyślny port Redis 6379 może być już używany. Po drugie, nawet jeśli port był wolny, tak, możesz uruchomić serwer, ale przestaje on działać w tym samym momencie, w którym wychodzisz z powłoki. W przypadku pierwszego należy edytować plik redis.conf, a w przypadku drugiego potrzebny jest demon, który również można rozwiązać, edytując redis.conf.

Redis jest w stanie uruchomić się w trybie demona. W tym celu musisz skonfigurować miejsce, w którym demon przechowuje swoje identyfikatory procesów, PID. Zwykle pliki pid są przechowywane w /var/run/, ale ze względu na ograniczenia środowiskowe musisz wybrać dla nich miejsce w swoim katalogu domowym. Ponieważ powód wyjaśniony w dalszej części części Zarządzanie serwerem, dobrym wyborem jest umieszczenie pliku pid w tym samym katalogu, co pliki wykonywalne. Nie musisz sam tworzyć pliku, Redis tworzy go automatycznie.

Teraz otwórz redis.conf do edycji.

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

Zmień konfiguracje w następujący sposób.

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

Teraz wreszcie uruchom serwer Redis. Określ plik konfiguracyjny, aby Redis nasłuchiwał właściwego portu i działał jako demon.

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

Zobacz, jak działa.

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

Zatrzymaj serwer, jeśli chcesz.

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

lub

> cat redis.pid | xargs kill

Zarządzanie serwerem

Dla ułatwienia użytkowania i jako prace przygotowawcze do następnej części, stwórz skrypt, który pomoże otworzyć klienta oraz uruchomić, zrestartować i zatrzymać serwer. Prostym rozwiązaniem jest napisanie pliku makefile. Podczas pisania pliku makefile pamiętaj, aby używać tabulatorów zamiast spacji.

> 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

Zasady są dość oczywiste. Szczególną cechą drugiej reguły jest to, że w trybie demona wywołanie serwera ./redis nie tworzy nowego procesu, jeśli taki już działa.

Trzecia zasada zawiera pewną cichą mądrość. Gdyby redis.pid nie był przechowywany w katalogu fooredis, ale na przykład w /var/run/redis.pid, zatrzymanie serwera nie byłoby takie proste. Jest to szczególnie ważne w przypadku jednoczesnego uruchamiania wielu instancji Redis.

Aby wykonać regułę:

> make start

Utrzymanie działania serwera

Masz teraz instancję Redis działającą w trybie demona, która pozwala zamknąć powłokę bez jej zatrzymywania. To wciąż za mało. Co się stanie, jeśli proces się zawiesi? Co się stanie, jeśli serwer zostanie ponownie uruchomiony? Aby je pokryć, musisz utworzyć dwa zadania cron.

> export EDITOR=nano
> crontab -e

Dodaj następujące dwie linie i zapisz.

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

Pierwszy zapewnia każde pięć minut biegu fooredis. Jak wspomniano powyżej, nie uruchamia to nowego procesu, jeśli jest już uruchomiony. Drugi zapewnia, że ​​fooredis zostanie uruchomiony natychmiast po ponownym uruchomieniu serwera i na długo przed uruchomieniem pierwszej reguły.

Można by w tym celu zastosować bardziej wyrafinowane metody, na przykład na zawsze. Zobacz także ten wątek społeczności Webfaction, aby uzyskać więcej informacji na ten temat.

Wniosek

Teraz to masz. Zrobiono wiele rzeczy, ale może nadejdzie więcej. Rzeczy, które możesz chcieć robić w przyszłości, a które nie zostały tutaj omówione, obejmują następujące elementy.

  • Ustawianie hasła, zapobiegające opróżnianiu baz danych przez innych użytkowników. (Zobacz redis.conf)
  • Ograniczanie użycia pamięci (zobacz redis.conf)
  • Rejestrowanie użycia i błędów (zobacz redis.conf)
  • Tworzenie kopii zapasowej danych raz na jakiś czas.

Jakieś pomysły, komentarze lub poprawki?



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Redis strażników na tych samych serwerach co master/slave?

  2. Redis skrypt usuwania symboli wieloznacznych za pomocą EVAL, SCAN i DEL zwraca polecenia Write niedozwolone po poleceniach niedeterministycznych

  3. Redis zrevrangebyscore, sortowanie inne niż porządek leksykograficzny

  4. Okno stosu nie pokazuje żadnych danych wyjściowych podczas debugowania skryptów Redis Lua za pomocą ZeroBrane

  5. Jak korzystać z posortowanych list Redis