Durant els darrers mesos, a CaminsTECH hem estat treballant en la implementació d'un servei de compartició de fitxers al núvol. Un dels requisits d'aquesta solució havia de ser assegurar que el control de les dades es mantingués dins de la pròpia universitat. Finalment, aquest projecte s'ha convertit en un servei anoment CaminsDRIVE que ofereix la possibilitat d'utilitzar un aplicatiu amb les característiques del conegut sistema Dropbox™ als usuaris de CaminsTECH.
Arquitectura
La solució escollida es basa en ownCloud (un software de cloud opensource) sobre màquines amb sistema operatiu Linux (Ubuntu 64). L'arquitectura del sistema s'ha dissenyat seguint una estructura dividida en tres nivells: balancer, frontend i backend.
- Primer nivell o balancer és el punt d’entrada on s'implementa el balanceig de la càrrega de peticions. Només es permet l'accés mitjançant el protocol HTTPS. Aquestes peticions són distribuïdes entre els diferents servidors d'ownCloud.
- Segon nivell o frontend és el nivell on s'executen les instàncies de l’aplicació ownCloud. El nombre d'instàncies pot crèixer o decrèixer segons la demanda.
- Tercer nivell o backend és el nivell on es troben els serveis que donen suport a les diverses instàncies del frontend.
Balancer
La implementació del balancejador s’ha realitzat utilitant el servidor web Apache amb el mòdul proxy_balancer. Actualment s'ha optat per la utilització d'un sistema balanceig de la càrrega basat en el nombre de peticions (lbmethod_byrequests).
La utilització de diversos servidors d'ownCloud pot produir problemes d'autenticació als usuaris. Quan una petició arriba a un ownCloud diferent al que ha realitzat l'autenticació, aquest torna a requerir l'autenticació a l'usuari (aquest frontend no conté cap sessió de l'usuari). Per solucionar aquest problema cal assegurar-se que totes les peticions d'una mateixa sessió es redireccionin a la mateixa instància d'ownCloud. Aquest comportament es pot aconseguir mitjançat la utilització de l'atribut stickysession del ProxySet.
<VirtualHost *:443> ServerName drive.caminstech.upc.edu ProxyRequests off Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED <Proxy balancer://cluster> BalancerMember http://XXX.XXX.XXX.XXX:80 route=driveX BalancerMember http://YYY.YYY.YYY.YYY:80 route=driveY BalancerMember ... ProxySet lbmethod=byrequests ProxySet stickysession=ROUTEID </Proxy> ProxyPass / balancer://cluster/ SSLEngine on SSLCertificateFile /etc/ssl/private/drive.caminstech.upc.edu.crt SSLCertificateKeyFile /etc/ssl/private/drive.caminstech.upc.edu_privatekey.pem BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </VirtualHost>
Caldria avaluar la utilització d'un balancejador més lleuger (per exemple HAProxy).
Caldria avaluar la utilització d'un sistema de sessió única (per exemple memcached).
Frontend
Les diferents instàncies d'ownCloud 6.0.3 corren sobre el servidor web nginx. Tant el codi de l'aplicatiu, els fitxers d'usuari com la base de dades es troben centralitzats en el servidor de backend, per tant, totes les instàncies executen la mateixa aplicació.
Per a la configuració del servidor web s'han seguit les instruccions del manual de configuració d'ownCloud sobre nginx.
upstream php-handler { server 127.0.0.1:9000; } server { listen 80; server_name drive.caminstech.upc.edu; root /caminsDRIVE/owncloud; client_max_body_size 2G; fastcgi_buffers 64 4K; rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect; rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect; rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect; index index.php; error_page 403 /core/templates/403.php; error_page 404 /core/templates/404.php; location = /robots.txt { allow all; log_not_found off; access_log off; } location ~ ^/(data|config|\.ht|db_structure\.xml|README) { deny all; } location / { # The following 2 rules are only needed with webfinger rewrite ^/.well-known/host-meta /public.php?service=host-meta last; rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last; rewrite ^/.well-known/carddav /remote.php/carddav/ redirect; rewrite ^/.well-known/caldav /remote.php/caldav/ redirect; rewrite ^(/core/doc/[^\/]+/)$ $1/index.html; try_files $uri $uri/ index.php; } location ~ ^(.+?\.php)(/.*)?$ { try_files $1 = 404; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$1; fastcgi_param PATH_INFO $2; fastcgi_param HTTPS on; fastcgi_pass php-handler; } # Optional: set long EXPIRES header on static assets location ~* ^.+\.(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ { expires 30d; # Optional: Don't log access to assets access_log off; } }
La mida màxima dels fitxers de pujada també cal definir-la al fitxer de configuració del PHP (/etc/php5/fpm/php.ini).
upload_max_filesize = 2G post_max_size = 2G
Backend
Durant la creació de la base de dades cal donar accés les diferents instàncies dels frontends (ex. frontend1, frontend2).
mysql> create database owncloud; mysql> grant usage on *.* to username@frontend1 identified by 'password'; mysql> grant all privileges on owncloud.* to username@frontend1; mysql> grant usage on *.* to username@frontend2 identified by 'password'; mysql> grant all privileges on owncloud.* to username@frontend2;
Per últim, cal donar accés als directoris compartits per NFS afegint les línies següents al fitxer /etc/exports
/caminsDRIVE/files <frontend1>(rw,sync,root_squash,no_subtree_check) /caminsDRIVE/owncloud <frontend1>(rw,sync,root_squash,no_subtree_check)
En cas que el nombre de grups del servidor LDAP sigui gran (>1000), les eines d'administració d'ownCloud pateixen temps d'espera elevats. Per aquesta raó, en aquesta solució es va optar per implementar un servidor OpenLDAP dedicat. Aquest servidor només conté els usuaris i grups necessaris pel funcionament del servei.
Desenvolupament a mida de plugins
En el nostre cas, l'eina de consulta de l'espai utilitzat pels usuaris no satisfeia les nostres necessitats. Per aquesta raó hem implementat un plugin d'administració que permet consultar l'espai en disc utilitzat pels usuaris. Aquest plugin resta disponible a bitbucket.
Afegeix un nou comentari