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?