Differences

This shows you the differences between two versions of the page.

Link to this comparison view

scgc:laboratoare:06 [2020/03/30 22:17]
darius.mihai
scgc:laboratoare:06 [2021/10/27 14:08] (current)
maria.mihailescu
Line 1: Line 1:
-====== ​Laboratory 06. Load balancing and web acceleration ======+====== Load balancing and web acceleration ======
  
 ===== Lab Setup ===== ===== Lab Setup =====
  
-  * We will be using a virtual machine in the [[http://​cloud.curs.pub.ro/​|faculty'​s cloud]]. +  * We will be using a virtual machine in the [[http://​cloud.grid.pub.ro/​|faculty'​s cloud]].
-  * When creating a virtual machine follow the steps in this [[https://​cloud.curs.pub.ro/​about/​tutorial-for-students/​|tutorial]].+
   * When creating a virtual machine in the Launch Instance window:   * When creating a virtual machine in the Launch Instance window:
-    * For **Availability zone**, choose **CAMPUS**, **CI** or **hp** 
     * Select **Boot from image** in **Instance Boot Source** section     * Select **Boot from image** in **Instance Boot Source** section
     * Select **SCGC Template** in **Image Name** section     * Select **SCGC Template** in **Image Name** section
Line 12: Line 10:
   * The username for connecting to the VM is ''​student''​   * The username for connecting to the VM is ''​student''​
   * First, download the laboratory archive:<​code bash>   * First, download the laboratory archive:<​code bash>
-[student@saisp ~] $ cd scgc +[student@scgc ~] $ cd scgc 
-[student@saisp ~/scgc] $ wget --user=<​username>​ --ask-password https://​repository.grid.pub.ro/​cs/​scgc/​laboratoare/​lab-06.zip +[student@scgc ~/scgc] $ wget --user=<​username>​ --ask-password https://​repository.grid.pub.ro/​cs/​scgc/​laboratoare/​lab-06.zip 
-[student@saisp ~/scgc] $ unzip lab-06.zip+[student@scgc ~/scgc] $ unzip lab-06.zip
 </​code>​ </​code>​
   * After unzipping the archive, in the ''​scgc''​ directory the following files should be present:   * After unzipping the archive, in the ''​scgc''​ directory the following files should be present:
Line 53: Line 51:
 === Topology === === Topology ===
  
-{{:saisp:labs:05:​contents:​lab05-lvs.jpgceva}}+{{ :scgc:laboratoare:schema-lab6.png?​600 ​|}}
  
 The machines from the topology (the 3 KVM machines and the physical one) have the following roles: The machines from the topology (the 3 KVM machines and the physical one) have the following roles:
Line 69: Line 67:
  
 <​code>​ <​code>​
-root@saisp-vm-1:~# ip addr add dev ens3 10.0.0.1/24 label ens3:1+root@scgc-vm-1:~# ip addr add dev ens3 10.0.0.1/24 label ens3:1
 </​code>​ </​code>​
 We will configure the HTTP service as a virtual service. To do this, we need to specify the virtual server address and port and the transport protocol used (TCP, in our case). We will configure the HTTP service as a virtual service. To do this, we need to specify the virtual server address and port and the transport protocol used (TCP, in our case).
Line 98: Line 96:
 Using Wireshark (or tcpdump), start a capture on the br0 interface on the client machine. ​ Using Wireshark (or tcpdump), start a capture on the br0 interface on the client machine. ​
 <​code>​ <​code>​
-student@scgc:​~$ sudo tcpdump -i br0+student@scgc:​~$ sudo tcpdump -i br0 -e
 </​code>​ </​code>​
 Notice the IP and MAC addresses from: Notice the IP and MAC addresses from:
Line 120: Line 118:
  
 <​code>​ <​code>​
-root@saisp-vm-1:~# ipvsadm -E -t 10.0.0.1:80 -s rr +root@scgc-vm-1:~# ipvsadm -E -t 10.0.0.1:80 -s rr 
-root@saisp-vm-1:~# ipvsadm -e -t 10.0.0.1:80 -r 10.0.0.20:​80 -x 4 +root@scgc-vm-1:~# ipvsadm -e -t 10.0.0.1:80 -r 10.0.0.20:​80 -x 4 
-root@saisp-vm-1:~# ipvsadm -e -t 10.0.0.1:80 -r 10.0.0.30:​80 -x 4+root@scgc-vm-1:~# ipvsadm -e -t 10.0.0.1:80 -r 10.0.0.30:​80 -x 4
 </​code>​ </​code>​
 The -E parameter means the service is going to be edited (in our case, we're going to change the scheduler). The -E parameter means the service is going to be edited (in our case, we're going to change the scheduler).
Line 233: Line 231:
  
 The above configuration means that any requests received by the Varnish server will be redirected towards the ''​elf.cs.pub.ro''​ server. The requests will be cached and the content of future requests will be directly served from the Varnish cache. The above configuration means that any requests received by the Varnish server will be redirected towards the ''​elf.cs.pub.ro''​ server. The requests will be cached and the content of future requests will be directly served from the Varnish cache.
 +
 +Modify ''/​lib/​systemd/​system/​varnish.service''​ as below to set the Varnish port on ''​80'':​
 +<​code>​
 +root@scgc-vm-1:​~#​ grep ExecStart /​lib/​systemd/​system/​varnish.service
 +
 +ExecStart=/​usr/​sbin/​varnishd -j unix,​user=vcache -F -a :80 -T localhost:​6082 -f /​etc/​varnish/​default.vcl -S /​etc/​varnish/​secret -s malloc,256m
 +</​code>​
  
 Do not forget to restart the Varnish service every time its configuration is changed: Do not forget to restart the Varnish service every time its configuration is changed:
 <​code>​ <​code>​
-student@scgc-vm-1:​~$ service varnish restart+student@scgc-vm-1:​~$ ​sudo systemctl daemon-reload 
 +student@scgc-vm-1:​~$ sudo service varnish restart
 </​code>​ </​code>​
  
Line 292: Line 298:
 </​code>​ </​code>​
  
-We will also need to change the DocumentRoot of the Apache server on ''​saisp-vm-2''​. For this, edit''/​etc/​apache2/​sites-available/​000-default.conf''​ and change the DocumentRoot from ''/​var/​www/​html''​ to ''/​var/​www''​.+We will also need to change the DocumentRoot of the Apache server on ''​scgc-vm-2''​. For this, edit''/​etc/​apache2/​sites-available/​000-default.conf''​ and change the DocumentRoot from ''/​var/​www/​html''​ to ''/​var/​www''​. Restart the ''​apache2''​ service.
  
 In order to measure the duration of the data transfer with and without Varnish, use ''​httperf''​ on the host machine in order to download the following file: http://​10.0.0.20/​data/​10M.dat for direct access or http://​10.0.0.10/​data/​10M.dat for Varnish access. In order to measure the duration of the data transfer with and without Varnish, use ''​httperf''​ on the host machine in order to download the following file: http://​10.0.0.20/​data/​10M.dat for direct access or http://​10.0.0.10/​data/​10M.dat for Varnish access.
Line 298: Line 304:
 While ''​httperf''​ is running, check with ''​htop''​ the load on both virtual machines. ​ While ''​httperf''​ is running, check with ''​htop''​ the load on both virtual machines. ​
  
-Use the ''​--uri''​ option for ''​httperf''​ to specify what page is to be accessed (in our case http://​10.0.0.20/​data/​10M.dat). Notice the difference between the Request rate parameter for the direct access and the Varnish access.+Use the ''​%%--%%uri''​ option for ''​httperf''​ to specify what page is to be accessed (in our case http://​10.0.0.20/​data/​10M.dat). Notice the difference between the Request rate parameter for the direct access and the Varnish access.
  
 ==== 5. [10p] Varnish statistics ==== ==== 5. [10p] Varnish statistics ====
Line 307: Line 313:
  
 <​code>​ <​code>​
-# varnishlog -I RxURL+root@scgc-vm-1:​~# varnishlog -I RxURL
 only the receive URL will be shown only the receive URL will be shown
 </​code>​ </​code>​
Line 313: Line 319:
 The ''​varnishstat''​ command shows information regarding the service state. The output is a screen similar to the one shown by the ''​top''​ or ''​htop''​ commands. Run the command, connect to the Varnish web service and check the output, especially the Hitrate ratio. The ''​varnishstat''​ command shows information regarding the service state. The output is a screen similar to the one shown by the ''​top''​ or ''​htop''​ commands. Run the command, connect to the Varnish web service and check the output, especially the Hitrate ratio.
  
-The ''​varnishhist''​ command shows a histogram of the serving requests duration. On the horizontal axis we have the serving requests timers at a logarithmic scale. The requests that do not access the cache appear with # and the ones that reach the cache appear with |. Create multiple, different connection to the Varnish service (e.g. access 3 files with different sizes) and check the output. Notice how small the serving request timer is when the request is retrieved from the cache instead of a direct web server access.+The ''​varnishhist''​ command shows a histogram of the serving requests duration. On the horizontal axis we have the serving requests timers at a logarithmic scale. The requests that do not access the cache appear with # and the ones that reach the cache appear with ''​|''​. Create multiple, different connection to the Varnish service (e.g. access 3 files with different sizes) and check the output. Notice how small the serving request timer is when the request is retrieved from the cache instead of a direct web server access.
  
 Use the ''​varnishlog''​ command to show only the requests towards the /​data/​10M.dat file. Use the ''​varnishlog''​ command to show only the requests towards the /​data/​10M.dat file.
Line 327: Line 333:
  
 <​code>​ <​code>​
-root@saisp-vm-1:~# varnishadm param.show default_ttl+root@scgc-vm-1:~# varnishadm param.show default_ttl
 </​code>​ </​code>​
 This value can be changed by editing the ''​VARNISH_TTL''​ directive in the ''/​etc/​default/​varnish''​ configuration file. This value can be changed by editing the ''​VARNISH_TTL''​ directive in the ''/​etc/​default/​varnish''​ configuration file.
Line 334: Line 340:
  
 <​code>​ <​code>​
-root@saisp-vm-1:~# varnishlog -i VCL_Call+root@scgc-vm-1:~# varnishlog -i VCL_Call
 </​code>​ </​code>​
  
Line 344: Line 350:
  
 <​code>​ <​code>​
-root@saisp-vm-2:/​var/​www/​html/​data#​ dd if=/​dev/​urandom of=10M.dat bs=100k count=100+root@scgc-vm-2:/​var/​www/​html/​data#​ dd if=/​dev/​urandom of=10M.dat bs=100k count=100
 </​code>​ </​code>​
  
Line 352: Line 358:
  
 <​note>​ <​note>​
-Follow the steps [[https://​varnish-cache.org/​docs/​3.0/tutorial/​purging.html#​bans|here]]. Use the ''​varnishadm''​ command in order to access the Varnish CLI.+Follow the steps [[https://​varnish-cache.org/​docs/​6.1/users-guide/​purging.html#​bans|here]]. Use the ''​varnishadm''​ command in order to access the Varnish CLI.
 </​note>​ </​note>​
  
Line 362: Line 368:
  
 <​note>​ <​note>​
-Follow the steps [[https://​stackoverflow.com/​questions/​10284813/​howto-control-varnish-and-a-browser-using-cache-control-max-age-header-in-a-rai/​10346942#​10346942|here]]. Restart the Varnish service after the configuration.+Follow the steps [[https://​stackoverflow.com/​questions/​10284813/​howto-control-varnish-and-a-browser-using-cache-control-max-age-header-in-a-rai/​10346942#​10346942|here]] and [[https://​varnish-cache.org/​docs/​6.1/​users-guide/​increasing-your-hitrate.html#​overriding-the-time-to-live-ttl|here]]. Restart the Varnish service after the configuration.
 </​note>​ </​note>​
  
Line 369: Line 375:
 ==== 8. [15p] Varnish serving multiple servers ==== ==== 8. [15p] Varnish serving multiple servers ====
  
-We want the Varnish service to accelerate the web access towards both the local web server on the ''​saisp-vm-2''​ machine and elf.cs.pub.ro. For this, we need to configure two back ends.+We want the Varnish service to accelerate the web access towards both the local web server on the ''​scgc-vm-2''​ machine and elf.cs.pub.ro. For this, we need to configure two back ends.
  
 Configure both back ends so that if the URL starts with ''/​ndk/''​ (elf.cs.pub.ro/​ndk) the request will be served by elf.cs.pub.ro back end, otherwise it will be served by the local web server back end. Configure both back ends so that if the URL starts with ''/​ndk/''​ (elf.cs.pub.ro/​ndk) the request will be served by elf.cs.pub.ro back end, otherwise it will be served by the local web server back end.
  
 <​note>​ <​note>​
-Use the [[https://​varnish-cache.org/​docs/​3.0/tutorial/advanced_backend_servers.html|Varnish documentation]].+Use the [[https://​varnish-cache.org/​docs/​6.1/users-guide/vcl-backends.html#​multiple-backends|Varnish documentation]].
 </​note>​ </​note>​
  
 ==== 9. [BONUS - 20p] Load balancing in Varnish ==== ==== 9. [BONUS - 20p] Load balancing in Varnish ====
  
-We will perform load balancing using Varnish (also called [[https://​varnish-cache.org/​docs/​3.0/tutorial/advanced_backend_servers.html#​directors|directors]] in Varnish). We will use the two web servers on ''​saisp-vm-2''​ and ''​saisp-vm-3''​ as back ends for load balancing. ​+We will perform load balancing using Varnish (also called [[https://​varnish-cache.org/​docs/​6.1/users-guide/vcl-backends.html#​directors|directors]] in Varnish). We will use the two web servers on ''​scgc-vm-2''​ and ''​scgc-vm-3''​ as back ends for load balancing. ​
  
-Configure the Varnish service on ''​saisp-vm-1''​ to perform load balancing with the two web servers using a round robin scheduler.+Configure the Varnish service on ''​scgc-vm-1''​ to perform load balancing with the two web servers using a round robin scheduler.
  
 <​note>​ <​note>​
-Use these examples [[https://​stackoverflow.com/​questions/​31291374/​varnish-backend-vcc-compiler-failed/​45082602#​45082602|here]] and [[https://​varnish-cache.org/​trac/wiki/LoadBalancing|here]]. Take into account the fact that the VCL version ​is 4.0.+Use the examples ​and information ​[[https://​stackoverflow.com/​questions/​31291374/​varnish-backend-vcc-compiler-failed/​45082602#​45082602|here]] and [[https://​varnish-cache.org/​docs/6.5/reference/​vmod_directors.html#​description|here]]. Take into account the fact that the VCL version ​may differ from the one used by the varnish on your system, and the syntax may be need to be changed.
 </​note>​ </​note>​
  
 In order to verify this task, access in a browser (or wget in the CLI) 10.0.0.10, wait 2 minutes (for the Varnish cache to expire) and access it again. In order to verify this task, access in a browser (or wget in the CLI) 10.0.0.10, wait 2 minutes (for the Varnish cache to expire) and access it again.
  
scgc/laboratoare/06.1585595827.txt.gz · Last modified: 2020/03/30 22:17 by darius.mihai
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0