Skip to content

Varnishin ja Nginx asennus Ubuntu serveriin

February 18, 2013

Tämä on harjoitustyö Tero Karvisen Linux palvelimena kurssille. Tässä dokumentissa kuvaillaan käänteisproxy Varnishin ja Nginx asennus 64bit Ubuntu server 12.10 käyttöjärjestelmään, jossa on käytössä http-palvelimena Apache 2.

Asennusympäristö

Käytin asennukseen Ubuntu server 12.10 64bit linux-jakelua, jonka voi halutessaan ladata osoitteesta: http://www.ubuntu.com/download/server. Alustana oli Lenovo s205 minikannettava. CPU AMD E-450 1,6GHz, 6GB RAM, 320GB HDD. Kone on hidas.

Apache testiympäristö

Jotta käänteisproxya voitaisiin testata järkevästi, on testiympäristöön tehty WordPress-asennus. Ohjeet löytyvät aiemmasta raportistani: https://mikkott.wordpress.com/2013/02/11/wordpressin-ja-drupalin-asennus-xubuntu-12-04/

Varnish käänteisproxyn asennus

Asennetaan Varnish ubuntun paketinhallintatyökalulla apt-get:lla. Päivitetään ensin pakettivarasto, ja sen jälkeen asennetaan Varnish. Parametri y ohittaa [yes/no] varmistuksen:

$ sudo apt-get update
$ sudo apt-get install varnish -y

Apachen konfigurointi

Koska Varnish asennetaan kuuntelemaan http-oletusporttiin 80, niin Apache pitää vaihtaa pois tästä portista. Vaihdetaan Apachen portiksi 8080 muokkaamalla seuraavia asetustiedostoja:

/etc/apache2/ports.conf:

$ sudo vim /etc/apache2/ports.conf
NameVirtualHost *:8080
Listen 8080

/etc/apache2/sites-enabled/000-default:

$ sudo vim /etc/apache2/sites-enabled/000-default
<VirtualHost *:8080>

Testataan muutokset curlilla:

$ curl --head http://localhost:8080/
HTTP/1.1 200 OK

Varnishin konfigurointi

Asetaan Varnish kuuntelemaan http:n oletusporttiin 80 muokkaamalla määrittelyistä -a paremetrin jälkeistä porttinumeroa:

/etc/default/varnish:

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

Konfiguroidaan Varnishiin backendiksi 8080 portissa kuunteleva Apache2 palvelin.

/etc/varnish/default.vcl

sudo vim /etc/varnish/default.vcl
backend default {
    .host = "127.0.0.1";
    .port = "8080";
}

käynnistetään palvelimet uudestaan:

$ sudo service apache2 restart
$ sudo service varnish restart

Testit

Testataan Apachen benchmarkilla ensin ilman Varnishia, ja tämän jälkeen Varnish käänteisproxyn kanssa.

Ennen Varnishin asennusta

$ ab -c 100 -n 200 http://localhost/~w/wordpress/?p=4
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Finished 200 requests

Server Software:        Apache/2.2.22
Server Hostname:        localhost
Server Port:            80

Document Path:          /~w/wordpress/?p=4
Document Length:        12649 bytes

Concurrency Level:      100
Time taken for tests:   40.721 seconds
Complete requests:      200
Failed requests:        0
Write errors:           0
Total transferred:      2581800 bytes
HTML transferred:       2529800 bytes
Requests per second:    4.91 [#/sec] (mean)
Time per request:       20360.516 [ms] (mean)
Time per request:       203.605 [ms] (mean, across all concurrent requests)
Transfer rate:          61.92 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    8   9.5      5      25
Processing:  1621 18325 7339.5  17176   29549
Waiting:     1557 17600 7034.9  16397   28424
Total:       1630 18333 7344.7  17177   29574

Percentage of the requests served within a certain time (ms)
  50%  17177
  66%  23884
  75%  25545
  80%  25851
  90%  27842
  95%  28058
  98%  28717
  99%  29554
 100%  29574 (longest request)

Havaitaan, että kaikki testit menivät läpi, Failed 0. 50% pyynnöistä käsiteltiin hitaammin kuin 17 sekuntia, joka on hyvin huono tulos. Keskimäärin käsiteltiin n. 5 pyyntöä sekunnissa. Tulokset ovat huonoja.

Varnishin asennuksen jälkeen

$ ab -c 100 -n 200 http://localhost/~w/wordpress/?p=4
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Finished 200 requests

Server Software:        Apache/2.2.22
Server Hostname:        localhost
Server Port:            80

Document Path:          /~w/wordpress/?p=4
Document Length:        12649 bytes

Concurrency Level:      100
Time taken for tests:   0.500 seconds
Complete requests:      200
Failed requests:        0
Write errors:           0
Total transferred:      2593390 bytes
HTML transferred:       2529800 bytes
Requests per second:    399.84 [#/sec] (mean)
Time per request:       250.097 [ms] (mean)
Time per request:       2.501 [ms] (mean, across all concurrent requests)
Transfer rate:          5063.25 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    2   2.0      3       5
Processing:    19  238 209.2    428     492
Waiting:       19  236 208.7    428     480
Total:         19  240 211.2    433     496

Percentage of the requests served within a certain time (ms)
  50%    433
  66%    442
  75%    450
  80%    451
  90%    463
  95%    466
  98%    471
  99%    485
 100%    496 (longest request

Varnishin asennuksen jälkeen tulokset paranivat huomattavasti. Failed 0 eli testit menivät läpi. Palvelu pystyi nyt käsittelemään n. 400 pyyntöä sekunnissa ja 100% pyynnöistä käsiteltiin alle puolessa sekunnissa.

Päätelmät

Varnishin asennus kasvatti palvelun tehon lähes 100 kertaiseksi. Varnishin asennus on kannattavaa, sillä se ei vaadi mitään investointeja ja palvelimen suorituskyky kasvaa huomattavasti.

Varnish ja suuret tiedostot

Testataan Varnishia ubuntun imagella. Siirretään ubuntun iso-image, joka on n. 700MB saataville www-palvelimen kautta ja yritetään ladata se:

$ cd ~/public_html
$ wget http://ubuntu.trumpetti.atm.tut.fi/releases//quantal/ubuntu-12.10-server-i386.iso

$ curl --head http://localhost/~w/ubuntu-12.10-server-i386.iso
HTTP/1.1 503 Service Unavailable
Server: Varnish

Varnish ei pysty toimittamaan isoa tiedostoa. Vastaus tulee lisäksi Varnishilta, vaikka sen pitäisi tulla Apachelta. Palvelu ei toimi kuten pitäisi. Pitää siis asettaa Varnish ohittamaan liian suuret tiedostot.

Varnishin konfigurointi isoille tiedostoille

Asetetaan Varnishin /etc/varnish/default.vcl -tiedostoon määritykset, joilla Varnish ei tallenna välimuistiin suuria tiedostoja, vaan streamaa ne suoraan Apachelta palvelun käyttäjälle:

$ sudo vim /etc/varnish/default.vcl

Lisätään asetukset, joilla Varnish ohittaa yli 10MB kokoisten tiedostojen cachetuksen:

sub vcl_recv {
 if (req.http.x-pipe && req.restarts > 0) {
  remove req.http.x-pipe;
  return (pipe);
 }
}

sub vcl_fetch {
 if (beresp.http.Content-Length ~ "[0-9]{8,}" ) {
  set req.http.x-pipe = "1";
  return (restart);
 }
}

Testaus isoilla tiedostoilla

Testataan curlilla:

$ curl --head http://localhost/~w/ubuntu-12.10-server-i386.iso
HTTP/1.1 200 OK
Date: Mon, 18 Feb 2013 03:45:24 GMT
Server: Apache/2.2.22 (Ubuntu)

Tulee 200 OK eli pyyntö onnistui ja vastaus tulee suoraan Apachelta. Myös tiedoston lataus onnistui nyt.

Nginx asennus

Asennetaan Nginx http-palvelin Ubuntuun. Asentaminen onnistuu apt-get:lla. Jos palvelimella on asennettuna ennestään http-palvelin, niin nginx on suotavaa asentaa eri porttiin. Asennetaan Nginx porttiin 8000.

$ sudo apt-get install nginx -y

Tämän jälkeen konfiguroidaan portti kuntoon:

/etc/nginx/sites-available/default

$ sudo vim /etc/nginx/sites-available/default

Lisätään määrittelyihin rivi:

listen   8000;

Käynnistetään Nginx uudeelleen:

$ sudo service nginx restart

Nginx testaus

Testataan Nginx:n toimivuus curlilla:

$ curl --head http://localhost:8000
HTTP/1.1 200 OK
Server: nginx/1.2.1

Lähteet

Tero Karvinen. Linux Palvelimena. 2013. http://terokarvinen.com/2012/aikataulu-linux-palvelimena-ict4tn003-7-ict4tn003-kevaalla-2013

Varnish version 3.0.3 documentation. 2012. https://www.varnish-cache.org/docs/3.0/tutorial/index.html

ChamithMalinda. How to start nginx via different port(other than 80). Stackoverflow. http://stackoverflow.com/a/12800469

Christoph Mitasch. Using pipe for large files. Varnish cache mailing list. https://www.varnish-cache.org/lists/pipermail/varnish-misc/2012-September/022469.html

Advertisements

From → Uncategorized

Comments are closed.

%d bloggers like this: