Voi scrie aici mai multe informatii despre FS-Cache&CacheFS, sistem de care am amintit pentru prima data in articolul Pseudo-streaming (Cachefilesd). Sistemul FS-Cache&CacheFS a aparut din nevoia de a tine local o copie temporara (caching) a celor mai cerute date de pe sisteme de fisiere accesibile remote prin intermediul retelei IP. Astfel se poate obtine atat un acces mai rapid la citirea celor mai utilizate fisiere, cat si o reducere a incarcarii server-ului de fisiere remote. Nu dispare totusi necesitatea ca sitemul FS-Cache&CacheFS sa verifice daca datele stocate local corespund cu ultima versiune a datelor stocate remote, insa acest proces este mai rapid decat transferul local complet si in mod repetat a aceluiasi continut de fiecare data cand acesta este accesat.
Se pare ca sistemul de fisiere cel mai folosit pentru a accesa prin intermediul unei retele IP datele stocate remote este Network File System (NFS), sistem de fisiere pentru care a si fost scris initial CacheFS.
CacheFS este procesul responsabil cu manipularea locala a datelor si cu copierea lor locala de pe sistemul remote de fisiere, in timp ce FS-Cache este procesul care intermediaza cererile trimise de catre CacheFS catre sistemul NFS.
Vom considera urmatoarele premise in acest articol:
- vrem sa folosim FS-Cache&CacheFS impreuna cu sistemul de fisiere NFSv3;
- sistemul de fisiere local, pe server-ul pe care vom avea si CacheFS configurat, este EXT3;
- sistemul de operare este Ubuntu 9.10;
- implicit Ubuntu 9.10/Kernel 2.6.31-14-server suporta FS-Cache&CacheFS, totusi voi preciza cum se poate activa FS-Cache&CacheFS in cazul configurarii manuale a unui nou kernel.
Pentru configurarea FS-Cache&CacheFS trebuie avut in vedere:
- configurarea kernel-ului linux sa suporte FS-Cache&CacheFS:
File systems -> Caches -> General filesystem local caching manager
File systems -> Caches -> Filesystem caching on files
- configurarea kernel-ului linux sa suporte atat modul client NFS, cat si FS-Cache pentru NFS:
File systems -> Network File Systems -> NFS client support -> NFS client support for NFS version 3
File systems -> Network File Systems -> NFS client support -> Provide NFS client caching support (EXPERIMENTAL)
- configurarea kernel-ului linux sa suporte pentru EXT3 atributele extinse:
File systems-> Ext3 journalling file system support -> Ext3 extended attributes
- instalarea pachetului nfsutils, in Ubuntu nfs-common:
apt-get install nfs-common
- instalarea si configurarea pachetului/daemon-ului cachefilesd, in Ubuntu pachetul se instaleaza foarte simplu:
- Fisierul de configurare a cachefilesd este /etc/cachefilesd.conf. Daca directorul unde vrem sa stocam datele cache este /var/cache/fscache, atunci am putea avea urmatorii parametrii definiti in fisierul de configurare:
apt-get install cachefilesd
#directorul unde se va regasi copia celor mai accesate fisiere
#chwon -R root:root /var/cache/fscache
#chmod -R u=rwx,g=rx,a=rx /var/cache/fscache
dir /var/cache/fscache
#un nume descriptiv folosit de FS-Cache pentru cache-ul configurat
tag mycache
#atata timp cat spatiul liber pe partitia care contine /var/cache/fscache este mai mare de 10%, sistemul va continua sa faca chache
brun 10%
#daca spatiul liber ajunge la 7%, sistemul va incepe sa stearga din cache datele care nu au mai fost accesate recent ("cache culling")
bcull 7%
#daca spatiul liber ajunge la 3%, sistemul nu va mai face cache datelor stocate remote
bstop 3%
#sistemul va incepe din nou sa faca cache datelor stocate remote atunci cand spatiul liber va ajunge iar la minim 10%
frun 10%
Relatia dintre parametrii folositi anterior este:
0% <= bstop < bcull < brun < 100%
Urmatorii pasi pe care trebuie sa ii facem sunt:
- activarea atributelor extinse pentru partitia EXT3, partitie care contine directorul de cache (/var/cache/fscache):
- mount pentru partitia NFS, parametrul fsc cere clientului NFS sa foloseasca FS-Cache:
- pornirea daemonului cachefilesd:
tune2fs -o user_xattr /dev/sdaX
mount -t nfs -o fsc ip:/source/dir /destination/dir
/etc/init.d/cachefilesd start
Daca totul a descurs bine pana acum, ar trebui sa vedem urmatoarele:
ls -la /var/cache/fscache/
cache
graveyard
cat /proc/fs/fscache/stats
FS-Cache statistics
Imediat ce CacheFS va fi folosit, dimensiunea directorului /var/cache/fscache va creste:
du -csbh /var/cache/fscache/
1.1G /var/cache/fscache/
1.1G total
iar cu tcpdump vom putea observa ca, dupa ce daemon-ul cachefilesd este pornit, traficul dintre server-ul NFS si server-ul local scade considerabil.
Cu siguranta urmatorul pas, atunci cand solutia de cache isi atinge limitele, este migrarea catre un sistem distribuit de fisiere cum ar fi Gluster.