Squid
Squid (in. k. kalmaar :)
Sisukord
Sissejuhatus
Probleem, mida järgnev jutt lahendada püüab, seisneb selles, et kas ei saaks kuidagi asja optimiseerida, kui terve klassitäis arvuteid korraga (ja tunni aja 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 maskeeritud 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älismaailmast 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 ilmestamiseks konkreetseid arve (minutid, päevad, 100 MB). Nende arvude valik, parent ja naabri valik, võib osutuda keeruliseks ja teiste administraatoritega koostööd eeldavaks ettevõtmiseks.
Allpool on toodud ära sammud, mida kasutasin squidi installeerimisel, konfigureerimisel, käivitamisel ja seismajätmisel.
Installeerimine
Tarkvara saab aadressilt squid.nlanr.net, kus on ka palju lugemist! Oluline on vaadata ka 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) tõmbasin squid 2.0 ära.
Lõin kasutaja (homeiga /usr/local/squid) ja grupi squid ja kõik järgnevad sammud sooritasin, olles sisse loginud selle kasutaja alt.
Pakkisin /usr/local/squid alla lahti src-i
tegin ./configure --prefix=/usr/local/squid
make; make install
Konfigureerimine
Ainus konf fail, millega saab ja on vaja tegeleda, on squid.conf, minul on ta selline:
root@masin# 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
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
acl abil saab defineerida faile, kuhu saab kirjutada näiteks sõnu, mille esinemisel veebis veeb blokeeritakse. Näiteks
acl porn url_regex "/usr/local/etc/squid/porn.block.txt" acl notporn url_regex "/usr/local/etc/squid/porn.unblock.txt" acl badlang url_regex "/usr/local/etc/squid/badlang.block.txt"
ja siis vastavalt
http_access allow notporn all http_access deny porn all http_access deny badlang all
Failidesse võib kirjutada järgnevalt
.t100.com .mp3 .mpeg morpheus napster .mpg
Nagu näha, keelata saab nii domeene, faililaiendeid, kui ka üksikuid tekstilõike sisaldavaid lehti.
Käivitamine ja seiskamine
Esimene käivitamine tuleb teha selliselt:
/usr/local/squid/bin/squid -z
See loob nn. swap space, kus squid hoiab oma andmeid.
Hiljem käivitada, seisata ja muudetud konfiguratsiooni sättida sellise scriptiga (võib muidugi ka lihtsalt käske anda).
(Selle scripti avaldas Toomas Soome eups@ut.ee listis, loodan, et autor ei ole selle siin taasavaldamise 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 aeg-ajalt 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 eups@ut.ee)
RunCache tõmbab automaatselt ise uue squidi üles.
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
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.