Zakładanie Redis na Webfaction

Jakie są kroki wymagane, aby skonfigurować Redis bazę danych na Webfaction shared hosting account?

Author: Akseli Palén, 2013-09-04

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.
Jakieś pomysły, uwagi lub poprawki?
 102
Author: Akseli Palén,
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!
 4
Author: HostedMetrics.com,
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
 1
Author: Brad,
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