NFsec Logo

Varnish – wiele przestrzeni do przechowywania danych

17/11/2012 w Administracja Brak komentarzy.  (artykuł nr 378, ilość słów: 386)

Z

ałóżmy, że posiadamy serwer cache, na którym jest uruchomiony serwer varnish, ale niestety jest on wyposażony w małą ilość pamięci RAM, w której nie zmieszczą się wszystkie statyczne obiekty (obrazki, pliki js, css) dla tylu domen dla ilu jest aktualnie prowadzony ruch sieciowy. Jednak serwer wyposażony jest dodatkowo w dysk SSD, który można wykorzystać jako dodatkowy storage dla cache serwera varnish.

Pierwszym krokiem jest zdefiniowanie lokalizacji naszych przestrzeni do przechowywania danych. Pierwszą będzie pamięć RAM (domyślna pamięć dla wszystkich obiektów) oraz drugą – dysk SSD /dev/sda podmontowany pod katalogiem /data – przeznaczony dla wszystkich plików .css i .js oraz żądań pochodzących z domeny xxxooo.pl. Dla systemu CentOS będzie to /etc/sysconfig/varnish:

# Cache file location
VARNISH_STORAGE_FILE=/data/varnish_storage.bin
# Cache file size
VARNISH_STORAGE_SIZE=1G
# Backend storage specification
VARNISH_STORAGE0="storage0=malloc,${VARNISH_STORAGE_SIZE}"
VARNISH_STORAGE1="storage1=file,${VARNISH_STORAGE_FILE},${VARNISH_STORAGE_SIZE}"

Następnie przekazujemy definicję storage do opcji startowych daemona varnishd:

DAEMON_OPTS="-a ${VARNISH_LISTEN_ADDRESS}:${VARNISH_LISTEN_PORT} \
             -f ${VARNISH_VCL_CONF} \
             -T ${VARNISH_ADMIN_LISTEN_ADDRESS}:${VARNISH_ADMIN_LISTEN_PORT} \
             -t ${VARNISH_TTL} \
             -w ${VARNISH_MIN_THREADS},${VARNISH_MAX_THREADS},${VARNISH_THREAD_TIMEOUT} \
             -u varnish -g varnish \
             -S ${VARNISH_SECRET_FILE} \
             -s ${VARNISH_STORAGE0} \
             -s ${VARNISH_STORAGE1}"

Oraz definiujemy przestrzenie do przechowywania danych zgodnie z naszymi założeniami:

sub vcl_fetch {
  set beresp.storage = "storage0";

  if (req.http.host ~ "xxxooo.pl") {
    set beresp.storage = "storage1";
  }
  if (req.url ~ "\.(css|js)$") {
    set beresp.storage = "storage1";
  }
}

Jeśli z czasem dołożymy trochę pamięci RAM do naszego serwera, możemy pokusić się o powrót przetrzymywania wszystkich obiektów statycznych strony WWW w pamięci, ale pod warunkiem, że jest na to wolne miejsce:

if (req.url ~ "\.(css|js)$") {
  if (storage.storage0.free_space > 128MB) { 
    set beresp.storage = "storage0";
  } else {
    set beresp.storage = "storage1";
  }
}

Więcej informacji: Varnish Documentation

Kategorie K a t e g o r i e : Administracja

Tagi T a g i : , , , , ,

Zostaw odpowiedź.

Musisz być zalogowany by móc komentować.