Varnish Cache

26 maja 2015

Varnish Cache – jest akceleratorem aplikacji webowych zwany również jako HTTP reverse proxy. Konfigurowany do buforowania zawartości strony.Odbiera żądania od klientów i próbuje na nie odpowiedzieć z pamięci podręcznej. Jeśli Varnish nie może odpowiedzieć na żądanie z pamięci podręcznej, to przekierowuje żądanie do backendu, pobiera odpowiedź, przechowuje w pamięci podręcznej i dostarcza do klienta. Jedną z kluczowych funkcjonalności Varnish Cache, oprócz wydajności jest elastyczność konfiguracji języka VCL. Pozwala tworzyć polityki określające jak powinny być obsługiwane przychodzące żądania, jakie treści mają być obsługiwane.

Wspierane platformy :

– wersje oparte na Linux, FreeBSD
– NetBSD, OpenBSD, OS X
– Oracle Solaris, OmniOS, SmartOS

Przykład instalacji na systemie Debian :

Instalacja ze źródeł :

Instalujemy potrzebne pakiety :

apt-get install automake autotools-dev libedit-dev libjemalloc-dev libncurses-dev libpcre3-dev libtool pkg-config python-docutils python-sphinx make

Aktualna stabilna wersja : Varnish Cache 4.0.3 – wydana 19 lutego 2015

cd /usr/local/src

wget https://repo.varnish-cache.org/source/varnish-4.0.3.tar.gz

Kompilowanie :

cd /usr/local/src/varnish-4.0.3

sh autogen.sh
sh configure
make

Przeprowadzenie testu przed instalacją (opcjonalnie) :

make check

Instalacja :

make install

Varnish zostanie zainstalowany w /usr/local.

Pliki binarne będą znajdować się w /usr/local/sbin/varnishd

Domyślna konfiguracja : /usr/local/etc/varnish/default.vcl

Instalacja z pakietów – na systemie Debian :

Wystarczy wykonać w konsoli :

apt-get install varnish

Startujemy usługę po instalacji Varnish :

service varnish start

Sprawdzamy czy Varnish został prawidłowo zainstalowany :

– otwórz przeglądarkę internetową i wpisz jako adres : http://127.0.0.1:6081
Zastąp adres IP na adres IP swojej maszyny :

np.

http://192.168.3.135:6081

Możliwy błąd :

Error 503 Backend fetch failed

Backend fetch failed
Guru Meditation:

XID: 3

Domyślnie ustawione jest że serwer WWW nasłuchuje na porcie 8080. Jeżeli nasłuchuje na innym porcie to pojawi się błąd jak powyżej (Error 503 Backend fetch failed).

Aby to zmienić , przechodzimy do konfiguracji :

/etc/varnish/default.vcl

Zmieniamy wartości domyślne np. na :

backend default {
    .host = "127.0.0.1";   #na tym samym komputerze co Varnish działa też Apache
    .port = "80";    #na porcie 80 nasłuchuje Apache2
}

Aby przeładować konfigurację, wykonujemy :

service varnish reload

Otwieramy ponownie przeglądarkę internetową (http://127.0.0.1:6081) i sprawdzamy czy wyświetla się strona Apache2.

UMIESZCZENIE VARNISH na porcie 80, na domyślnym HTTP :

Nasłuchiwanie Varnish na porcie 6081 jest dobre dla celów testowych. Aby zmienić port na 80 wykonujemy :

Zatrzymujemy Varnish :

service varnish stop

Edytujemy plik :

/etc/default/varnish

W pliku szukamy :

DAEMON_OPTS="-a :6081 \
             -T localhost:6082 \
             -f /etc/varnish/default.vcl \
             -S /etc/varnish/secret \
             -s malloc,256m"

Zamieniamy na :

DAEMON_OPTS="-a :80 \
             -T localhost:6082 \
             -f /etc/varnish/default.vcl \
             -S /etc/varnish/secret \
             -s malloc,256m"

Ważne parametry, które należy ustawić :

‘-a’ listen_address

Przykłady :

-a :80
-a localhost:80
-a 192.168.1.100:8080
-a ‘[fe80::1]:80’
-a ‘0.0.0.0:8080,[::]:8081’

#Jeżeli Apache2 działa na tym samym serwerze co Varnish (nasłuchuje na porcie 80) to należy najpierw zmienić port Apache2 na inny np. 8080. Zmianę przeprowadzamy w pliku /etc/apache2/ports.conf
#Następnie w pliku /etc/varnish/default.vcl należy zmienić port w backend default (na port 8080).

‘-f’ VCL-file or ‘-b’ backend
– Varnish musi wiedzieć gdzie znajdzie serwer HTTP. Można to określić w argumencie -b lub można określić serwer w pliku VCL.

Przykład użycia opcji :

-b localhost:81
-b thatotherserver.example.com:80
-b 192.168.1.2:80

Domyślnie Varnish używa 100 MB pamięci do buforowania obiektów.Jeśli chcemy buforować więcej niż obecnie, należy zmienić parametr -s.

Jeśli prowadzimy duże witryny internetowe, można zmienić liczbę wątków. Służy do tego argument -p (zalecam pozostawić wartości domyślne).

Pełną listę argumentów można znaleźć na stronie : https://www.varnish-cache.org/docs/4.0/reference/varnishd.html#ref-varnishd-options

Po zmianach wykonujemy :

service varnish start

Każdy dostęp do witryny będzie dostępny po Varnish.

Konsola zarządzająca Varnish Cache :

Aby połączyć się z konsolą wydajemy komendę :

varnishadm

Konsola umożliwia m.in :

– startowanie i zatrzymanie procesu cache

– ładowanie, używanie, odrzucanie programów VCL

– zmiany parametrów

– banowanie zawartości cache

Aby ułatwić korzystanie z narzędzia administracyjnego wpisz : help

Logi Varnish :

Logi nie są zapisywane na dysku. Varnish przechowuje je tymczasowo w pamięci. Są to logi, które pojawiają się w czasie rzeczywistym.

Aby obserwować logi, uruchom w konsoli :

varnishlog

Aby przejrzeć szczegółowo pozostałe funkcjonalności w Varnish, odwiedź stronę:

https://www.varnish-cache.org/docs/4.0/users-guide/index.html#users-guide-index

Dokument wyjaśnia jak działa Varnish i jak można jego użyć żeby ulepszyć działanie strony internetowej.

***************************
Banowanie zawartości cache
***************************

Varnish posiada funkcjonalność usunięcia obiektów z pamięci podręcznej.

Dla przykładu:

Firma zmieniła logo na swojej stronie internetowej. Chcemy aby Varnish skasował ten obiekt z pamięci podręcznej. Wykonujemy :

varnish> ban req.url ~ "logo.*[.]png"

****************************
Zmiany parametrów
****************************

Parametry można zmienić również z poziomu CLI :

Aby wyświetlić listę parametrów używamy :

varnish> param.show

Aby wyświetlić wartości danego parametru np. vsl_space wpisujemy w CLI :

varnish> param.show vsl_space

vsl_space
Value is: 80M [bytes] (default)
Default is: 80M
Minimum is: 1M

The amount of space to allocate for the VSL fifo buffer in the
VSM memory segment. If you make this too small,
varnish{ncsa|log} etc will not be able to keep up. Making it
too large just costs memory resources.

NB: This parameter will not take any effect until the child
process has been restarted.

Aby zmienić wartość danego parametru używamy : param.set

np.

param.set vsl_space 100M

Nie jest polecana zmiana domyślnych parametrów. Warto też pamiętać ze po zmianie niektórych parametrów, potrzebny jest restart procesu aby uzyskać efekt. Zawsze po zmianie parametru powinna wyskoczyć informacja czy taki restart jest potrzebny.

markos
Specjalizuję się w systemach komputerowych Windows oraz Linux. Oprócz wykonywanej pracy w zawodzie, informatyka jest moją pasją.

Dodaj komentarz

avatar
  Subscribe  
Powiadom o