Zakładanie Redis na Webfaction
Jakie są kroki wymagane, aby skonfigurować Redis bazę danych na Webfaction shared hosting account?
3 answers
Wprowadzenie
Ze względu na specjalne ograniczenia środowiska serwerów Webfaction instrukcje instalacji nie są tak proste,jak byłyby. Niemniej jednak na końcu będziesz miał w pełni działający serwer Redis, który pozostaje aktywny nawet po ponownym uruchomieniu. Osobiście zainstalowałem Redis według poniższej procedury około pół roku temu i od tego czasu działa bez zarzutu. Choć małe słowo ostrzeżenia, pół roku to nie długo, tym bardziej, że serwer nie był intensywnie użytkowany.
Instrukcja składa się z pięciu części: instalacji, testowania, uruchamiania serwera, zarządzania serwerem i utrzymywania serwera w działaniu.
Instalacja
Zaloguj się do powłoki Webfaction
ssh [email protected]
Pobierz najnowsze Redis z Redis download site .
> 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 dokonaniem, zobacz jest Twój serwer Linux 32 lub 64 bit. Skrypt instalacyjny nie obsługuje dobrze środowisk 32-bitowych, przynajmniej na maszynach CentOS 5 Webfaction . Komenda 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ź Po szczegóły.
> uname -m
i686
Jeśli twój serwer jest 64 bitowy (x86_64) to po prostu make.
> make
Ale jeśli twój serwer jest 32 bitowy (i686), musisz zrobić trochę dodatkowych rzeczy. Istnieje polecenie make 32bit
, ale powoduje błąd. Edytuj wiersz w skrypcie instalacyjnym, aby make 32bit
zadziałał.
> nano ~/src/redis-2.6.16/src/Makefile
Zmień linia 214 z tego
$(MAKE) CFLAGS="-m32" LDFLAGS="-m32"
Do tego
$(MAKE) CFLAGS="-m32 -march=i686" LDFLAGS="-m32 -march=i686"
I zapisać. Następnie uruchom markę z 32-bitową flagą.
> cd ~/src/redis-2.6.16/ ## Note the dir, no trailing src/
> make 32bit
Pliki wykonywalne zostały utworzone do katalogu ~/src/redis-2.6.16/src/
. Pliki wykonywalne obejmują redis-cli
, redis-server
, redis-benchmark
i redis-sentinel
.
Testowanie (opcjonalne)
Jak sugeruje wynik instalacji, byłoby miło upewnić się, że wszystko działa zgodnie z oczekiwaniami, uruchamiając testy.
Hint: To run 'make test' is a good idea ;)
Niestety testy wymagają zainstalowania tlc8. 6. 0, który nie jest domyślne przynajmniej na maszynie web223. Więc najpierw musisz go 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 z make test
zajmie trochę czasu i również zakończy się niepowodzeniem z powodu ograniczeń środowiska WebFaction. Radzę ci to zostawić.
Teraz, gdy mamy zainstalowany Tlc możemy uruchomić testy Redis. Testy zajmie dużo czasu, a także tymczasowo wykorzystuje dość dużą ilość pamięć.
> cd ~/src/redis-2.6.16/
> make test
Po testach jesteś gotowy do kontynuowania.
Uruchamianie serwera
Najpierw Utwórz niestandardową aplikację za pomocą Webfaction Panel sterowania (Aplikacja Niestandardowa (nasłuchiwanie na porcie)). Nazwij to na przykład fooredis . Pamiętaj, że nie musisz tworzyć domeny lub 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ład be 23015.
Skopiuj wcześniej skompilowane pliki wykonywalne do katalogu aplikacji. Możesz wybrać kopiowanie wszystkich lub tylko tych, 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 zmodyfikujesz.
> cp ~/src/redis-2.6.16/redis.conf .
Teraz Redis jest już uruchomiony. Jest jednak kilka problemów. Najpierw domyślny port Redis 6379 może być już używany. Po drugie, nawet jeśli port był wolny, tak, można uruchomić serwer, ale przestaje działać w tym samym momencie WYJDŹ z muszli. Po pierwsze redis.conf musi być edytowany, a po drugie, potrzebujesz demona, który jest również rozwiązany przez edycję redis.conf.
Redis jest w stanie uruchomić się w trybie demona (daemon). W tym celu musisz skonfigurować miejsce, w którym Demon przechowuje swoje ID procesów, PID. Zazwyczaj pliki PID są przechowywane w /var / run/, ale ze względu na ograniczenia środowiska musisz wybrać dla nich miejsce w katalogu domowym. Ponieważ powód wyjaśniony później w części dotyczącej Serwerze, dobrym wyborem jest umieszczenie pliku PID W tym samym katalogu co pliki wykonywalne. Nie musisz tworzyć pliku samodzielnie, 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 conf, aby ponownie nasłuchał prawy port 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 obsługi i jako prace przygotowawcze do następnej części, stwórz skrypt, który pomoże otworzyć Klienta i uruchomić, zrestartować i zatrzymać serwer. Łatwym 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. Specjalne o drugiej zasadzie jest to, że podczas gdy w trybie daemon, wywołanie ./ redis-serwer nie tworzy nowego procesu, jeśli jest już uruchomiony.
Trzecia zasada ma w sobie pewną cichą mądrość. Jeśli redis.pid nie był przechowywany w katalogu fooredis, ale na przykład do /var/run / redis.pid wtedy nie byłoby tak łatwo zatrzymać serwer. Jest to szczególnie ważne w przypadku jednoczesnego uruchamiania wielu wystąpień Redis.Aby wykonać reguła:
> make start
Utrzymanie działania serwera
Masz teraz instancję Redis działającą w trybie daemona, która pozwala zamknąć powłokę bez zatrzymywania jej. To wciąż za mało. Co się stanie, jeśli proces ulegnie awarii? Co się stanie, jeśli serwer zostanie ponownie uruchomiony? Aby je pokryć, musisz utworzyć DWA cronjobs .
> 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
Pierwsza zapewnia co pięć minut, że fooredis działa. Jak wspomniano powyżej to nie uruchamia nowego procesu, jeśli jeden jest już uruchomiony. Druga gwarantuje, że fooredis zostanie uruchomiony natychmiast po ponownym uruchomieniu maszyny serwerowej i na długo przed uruchomieniem pierwszej reguły.
Można użyć kilku innych metod deligate, na przykład forever . Zobacz również ten wątek społeczności Webfaction , aby uzyskać więcej informacji na ten temat.
Podsumowanie
Teraz to masz. Wiele rzeczy zrobionych, ale może przyjdzie więcej. Rzeczy, które lubisz robić w przyszłości, które nie zostały uwzględnione tutaj obejmuje następujące.- Ustawianie hasła, uniemożliwiające innym użytkownikom spłukiwanie baz danych. (Zob. redis.conf)
- ograniczenie użycia pamięci (zobacz redis.conf)
- rejestrowanie użycia i błędów (zobacz redis.conf)
- Backup danych raz na jakiś czas.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:50
Podsumowując doskonałą odpowiedź Akseli:
assume your user is named "magic_r_user"
cd ~
wget "http://download.redis.io/releases/redis-3.0.0.tar.gz"
tar -xzf redis-3.0.0.tar.gz
mv redis-3.0.0 redis
cd redis
make
make test
create a custom app "listening on port" through the Webfaction management website
assume we named it magic_r_app
assume it was assigned port 18932
cp ~/redis/redis.conf ~/webapps/magic_r_app/
vi ~/webapps/magic_r_app/redis.conf
daemonize yes
pidfile ~/webapps/magic_r_app/redis.pid
port 18932
test it
~/redis/src/redis-server ~/webapps/magic_r_app/redis.conf
~/redis/src/redis-cli -p 18932
ctrl-d
cat ~/webapps/magic_r_app/redis.pid | xargs kill
crontab -e
*/1 * * * * /home/magic_r_user/redis/src/redis-server /home/magic_r_user/webapps/magic_r_app/redis.conf &>> /home/magic_r_user/logs/user/cron.log
don't forget to set a password!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-05 04:25:27
Dla twojej wiadomości, Jeśli instalujesz redis 2.8.8+
możesz uzyskać błąd, niezdefiniowany odniesienie do __sync_add_and_fetch_4
podczas kompilacji. Zobacz http://www.eschrade.com/page/undefined-reference-to-__sync_add_and_fetch_4 / dla informacji.
Wkleiłem odpowiednią część z tej strony poniżej w przypadku, gdy strona kiedykolwiek przejdzie w tryb offline. Zasadniczo musisz wyeksportować zmienną CFLAGS i ponownie uruchomić proces budowania.
[root@devvm1 redis-2.6.7]# export CFLAGS=-march=i686
[root@devvm1 redis-2.6.7]# make distclean
[root@devvm1 redis-2.6.7]# make
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-16 19:36:57