Varnishin ja Nginx asennus Ubuntu serveriin
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
Comments are closed.