Synkronisering af filer i et cluster med Csync2

Jeg har tidligere brugt GlusterFS til den slags, men Gluster er en af de tunge drenge … særligt når vi har med web-content o.l. at gøre, desuden vil jeg gerne udnytte det at jeg har flere diske at sende data fra fuldt ud, derfor har jeg eksperimenteret lidt med Csync2 som er et bidirektionelt filsynkroniserings værktøj.

Det er brugbart til f.eks. at holde et webdir i sync på tværs over et cluster, men det er ikke statefull nok til at holde nogen former for dynamiske data, det tager typisk et til fem minutter fra en fil rammer disken på en node før den når de andre.

Jeg vil designe et system med to noder og bagefter vil jeg så tilføje en tredie node for yderligere redundans.

Først installerer jeg csync2 på begge maskiner:

root@node1:~# apt-get -y install openbsd-inetd csync2
root@node2:~# apt-get -y install openbsd-inetd csync2

Rediger filen /etc/csync2.cfg, på node1, den er typisk helt tom og skal skrives fra bunden. Min ser således ud:

group cluster
{
         host node1;
         host node2;

         key /etc/csync2_ssl_cert.key;
         include /var/www;

         auto none;
}

File skal være ens på begge noder, ligesom du skal huske at oprette /var/www

root@node1:~# mkdir /var/www
root@node2:~# mkdir /var/www

I /etc/hosts på begge maskiner sætter du dine servere op således:

192.168.10.11 node1.cluster.com  node1
192.168.10.12 node2.cluster.com  node2

Dette skyldes at csync2 skal kunne nå de andre server blot ved deres short-name “node1”. Nu skal der oprette SSL Certifikater, det er næsten automatiseret, følgende skal gøres påkun den ene node, angiv ikke “common” name og ligeledes skal der ikke angive password, blot tryk enter. Dernæst skal filerne distribueres til de andre maskiner:

root@node1:~# csync2 -k /etc/csync2.key
root@node1:~# openssl genrsa -out /etc/csync2_ssl_key.pem 1024
root@node1:~# openssl req -new -key /etc/csync2_ssl_key.pem -out /etc/csync2_ssl_cert.csr
root@node1:~# openssl x509 -req -days 600 -in /etc/csync2_ssl_cert.csr -signkey /etc/csync2_ssl_key.pem -out /etc/csync2_ssl_cert.pem

Kopier nøglerne og onfig over på den anden node:

root@nod12:~# scp /etc/csync2* root@node2:/etc

Hvis der ligger nogle filer i e af mapperne bør du kopierer dem inden du går videre:

scp -r /var/www/* root@node2:/var/www

Dernæst skal Csync2 køres løbende, det koster ikke vildt mange resourcer at køre og derfor er der, såfremt dit directory ikke er for stort, intet problem i at køre hvert 5. minut. Jeg har prøvet en gang med en million filer, det tog 3 minutter at løbe igennem. Jeg vil dog her til mine tests have den endnu navere og sætter den derfor til at købe hvert minut:

root@node1:~# crontab -e
*/5 * * * *     /usr/sbin/csync2 -x
root@node2:~# crontab -e
*/5 * * * *     /usr/sbin/csync2 -x

Genstart nu inetd på begge maskiner:

root@node1:~# /etc/init.d/openbsd-inetd restart
root@node2:~# /etc/init.d/openbsd-inetd restart

Og så er det tid til at teste:

root@node1:/var/www# watch ls -l

Og så opretter vi nogle filer på den anden node:

root@node2:/var/www# touch test_a.txt
root@node2:/var/www# touch test_b.txt

Og vente så et par min og se dine nye filer komme til syne i det andet vindue 🙂

Dette indlæg blev udgivet i Knowledge Base, Linux, Old Base. Bogmærk permalinket.

Skriv et svar