Squid (in. k. kalmaar :)

teejuht
 
1.
Sissejuhatus
2.
Installeerimine
3.
Konfigureerimine
4.
Käivitamine ja seiskamine
5.
Monitoring

1. Sissejuhatus

Probleem mida järgnev jutt lahendada püüab seineb selles, et kas ei saaks kuidagi asja opitimiseerida, kui terve klassitäis arvuteid korraga (ja tunniaja pärast jälle) püüab külastada ühte ja sama kodulehekülge (nt. www.postimees.ee'd).

Klassikaliselt on arvutiklass ühe serveri taha ära maskeraaditud ja igasse arvutisse tuuakse info eemalt internetist (antud juhul www.postimees.ee'st) eraldi kohale.
Alltoodud joonis kujutab kolme võrgukaardiga serverit millel töötab programm squid. On näha kahte alamvõrku (192.168.1.0, 192.168.2.0) millel istuvad nn. klientarvutid.


Programmi squid roll seisneb selles, et kogu infovahetus väismaailmast klientide poole toimub läbi tema. Squid kuulab pealt klientide poolt sooritatavaid päringuid (nt. www.postimees.ee) ja lisaks sellele, et ta toob netist ära vastava materjali ning annab need üle päringu esitanud klendile talletab ta tolle materjali teatud ajaks (mõned päevad) oma andmebaasi (selle maht on ca 100 MB). Ja kui nüüd paari minuti või tunni pärast esitab keegi sama päringu (st. soovib netist alla laadida www.postimees.ee pealehte), siis squid ei lähe sellele enam netti järele vaid võtab materjali oma kohalikust andmebaasist ning annab kliendile.

Selline mehhanism toimib ja praktiliselt iga kolmas - neljas päring saab vastatud kasutades kohalikku materjali. See efekt on juba märgatav.

Siin on veel selline moment, et mitu squid serverit võivad teha omavahel koostööd.

Üks võimalus on see, et määrata oma squidile parent (vanem) - siis on nii, et päringud mis ei sisaldu enda kohalikus andmebaasis saadetakse parent squidile (see asub tavaliselt teises - suuremas, paremas masinas) ning too vaatab kust saab.

Teine võimalus on määrata oma squidile sibling (naaber) - siis on nii, et naabrid peavad efektiivselt ühte suurt andmebaasi mitme peale. Ja kui päring esitatakse ning kohalik squid ei leia oma andmebaasist vastust, siis kõigepealt külastab ta naabreid ja seejärel parent'i.

Ülalesitatud jutus kasutasin ma ilmestamiseks konkreetseid arve (minutid, päevad, 100 MB); nende arvude valik ja parent ja naabri valik võib osutuda keeruliseks ja teiste administraatoritega koostööd eeldavaks ettevõtmiseks.

Allpool on toodud ära sammud mida ma kasutasin squidi installeerimisel, konfigureerimisel, käivitamisel ja seismajätmisel:

2. Installeerimine

Tarkvata saab aadressilt squid.nlanr.net ja seal on ka palju lugemist!
samuti on oluline vaadata cache.eenet.ee milline parent endale vailda (ilus oleks omanikelt luba küsida)
ja cache.online.ee/cache/cacheware.old.html ideoloogilise poole pealt (autor Andres Kroonmaa)

1.
tõmbasin squid 2.0 ära

2.
lõin kasutaja (homeiga /usr/local/squid) ja grupi squid ja kõik järgnevad
sammud sooritasin olles sisse loginud selle kasutaja alt.

3.
pakkisin /usr/local/squid alla lahti src-i

4.
tegin ./configure --prefix=/usr/local/squid

5.
make; make install
 

3. Konfigureerimine

Ainus konf fail millega saab ja on vaja tegelda on squid.conf, minul on ta selline:

root@kopka# /usr/local/squid/etc/ $ egrep ^[^#] squid.conf
http_port 3128
icp_port 3130
cache_peer cache.tartu.eenet.ee       parent    3128  3130 no-query
cache_peer_domain cache.tartu.eenet.ee  !.ee
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
cache_mem  8 MB
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl sub1 src 192.168.1.0/255.255.255.0
acl sub2 src 192.168.2.0/255.255.255.0
acl kopka src 193.40.xxx.xxx/255.255.255.255
http_access allow manager localhost
http_access allow manager kopka
http_access allow  sub1
http_access allow  sub2
http_access allow  kopka
icp_access  allow  sub1
icp_access  allow  sub2
icp_access  allow  kopka
root@kopka#

Lühidalt kokkuvõttes realiseerib see konfiguratsioon järgmist:

- kuulatakse porte 3128 ja 3130
- vanemaks on cache.tartu.eenet.ee vastavate portidega kusjuures mitte saata ICP (???) päringuid talle
- Küsida kõike peale .ee domainide
- acl access list: määrab masinad ja alamvõrgud kes meie squidi kasutada saavad ja annab neile õigused
- samuti selle kust monitoringut teha saab

4. Käivitamine ja seiskamine.

Esimene käivitamine tuleb taha selliselt:

/usr/local/squid/bin/squid -z

Mis loob nn. swap space kus squid hoiab oma andmeid.

ja hiljem käivitada, seisata ja muudetud konfiguratsiooni sättida sellise scriptiga (võib muidugi ka lihtsalt käske anda)

(Selle scripti avaldas Toomas Soome [email protected] listis, loodan, et autor ei ole selle siin taas-avaldamise vastu)
 

#!/bin/sh

case $1 in
'start')
  echo "Starting Squid Cache service."
  su - squid -c 'cd /opt/squid/bin;/opt/squid/bin/RunCache > /dev/null
2>&1 &' >
 /dev/null 2>&1
;;
'stop')
  # Lööme igaks juhuks RunCache maha
  kill -9 `ps -fu squid | grep RunCache| grep -v grep | awk '{print $2}'`
  # Kas te oleksite nii lahke ja hakkaksite nüüd seisma jääma?
  /opt/squid/bin/squid -k shutdown
  sleep 30
  echo "Squid Cache stopped."
;;
'reload')
  /opt/squid/bin/squid -k reconfigure
  echo "Squid Cache reloaded."
;;
*)
        echo "usage: $0 start|stop|reload"
;;
esac
exit 0

squid -h näitab ära kõik võimalikud võtmed.
Kusjuures RunCache'i roll on vaadata, et kui mõni squid ära sureb siis ta tagasi tööle panna
Et log failid väga suureks ei kasvaks oleks vaja nt. cron'ist aegajalt teha 'squid -k rotate' t või lihtsalt mõni squid kelle pid on logs/squid.pid 'is ära tappa:

kill -USR1 `cat /etc/squid.pid` >/dev/null 2>&1

(Urmas Lett'i soovitus listist [email protected])

RunCache tõmbab automaatselt ise uue squidi üles.

kusjuures töötava squidi puhul on pilt niisugune:

root@kopka /usr/local/squid/logs/ $ ps auxf | grep squid
squid    19483  0.0  0.0  1112     0  ?  SW  Dec  8   0:00 (RunCache)
squid    19488  0.0  0.0  2392     0  ?  SW  Dec  8   0:00  \_ (squid)
squid    19489  0.1 18.6 16044  5752  ?  S   Dec  8   4:05      \_ (squid) -sY
squid    19495  0.0  0.2   808    64  ?  S   Dec  8   0:00          \_ (unlinkd)
squid    31796  0.0  0.6   856   208  ?  S   Dec  8   0:00          \_ (dnsserve
squid    31797  0.0  0.0   852     0  ?  SW  Dec  8   0:00          \_ (dnsserve
squid    31798  0.0  0.0   852     0  ?  SW  Dec  8   0:00          \_ (dnsserve
squid    31799  0.0  0.0   852     0  ?  SW  Dec  8   0:00          \_ (dnsserve
squid    31800  0.0  0.0   852     0  ?  SW  Dec  8   0:00          \_ (dnsserve
root@kopka /usr/local/squid/logs/ $

5. Monitoring

Kaval on panna tööle ka kaasapandud cgi script squidi töö jälgimiseks (nt. selleks, et jälgida kuidas nn. hitte tuleb -
see on protsent läbi squidi esitatud päringutest, mida ta oma kohalikust andmebaasist rahuldada sai).
See eeldab, et samas masinas on apache (või mõni muu sarnane) webserver installeeritud.
 

gggg