Obiettivo

vogliamo mantenere la stessa directory sincronizzata su due server linux.

Questo significa che ogni aggiunta/rimozione/modifica di file in questa directory verrà automaticamente riportato sull’altro (salvo conflitti). Diamo per assunto che i due server siano raggiungibili via rete, ma per qualsiasi motivo non sia possibile collegare dello spazio disco condiviso.

Implementazione

Per raggiungere lo scopo, utilizzeremo il tool: csync2

su entrambi i server (che chiameremo nodo1 e nodo2), installiamo i pacchetti necessari:

  # apt-get install csync2 incron

mentre sul primo creiamo la chiave di cifratura e il certificato che verra’ usato nella connessione SSL. Notiamo che csync2 utilizza 30865/tcp per le proprie comunicazioni, per cui assicuriamoci di abilitare le connessioni in ingresso su tale porta.

  n1# csync2 -k /etc/csync2.key
  n1# openssl genrsa -out /etc/csync2_ssl_key.pem 2048
  n1# openssl req -batch -new -key /etc/csync2_ssl_key.pem -out /etc/csync2_ssl_cert.csr
  n1# openssl x509 -req -days 3600 -in /etc/csync2_ssl_cert.csr -signkey /etc/csync2_ssl_key.pem -out /etc/csync2_ssl_cert.pem

creiamo il file /etc/csync2.cfg che conterra’ le definizioni per il gruppo di sincronizzazione

copiamo il tutto anche sul nodo2:

  n1# scp /etc/csync2* nodo2:/etc/

per default, csync2 su debian utilizza inetd, ma e’ semplice configurarlo per girare come standalone o xinetd. dopo aver fatto partire i servizi su entrambi i nodi, possiamo usare il comando

  n1# csync2 -xv
per far sì che tutte le modifiche fatte in /mnt/sync del nodo1 vengano riportate anche sul nodo2. Per rendere la cosa automatica, potremmo schedulare un job ogni 3 minuti con cron:

  */3 * * * * /usr/sbin/csync2 -xv

Questo e’ indispensabile anche nel caso di temporaneo down o spegnimento di uno dei due sistemi; ma se preferissimo una sincronizzazione immediata , potremmo usare incron che usando l’interfaccia inotify, resta in ascolto di determinati eventi su una specifica directory e al verificarsi delle condizioni desiderate, esegue il comando configurato. Nel nostro caso, possiamo inserire nella incrontab una entry simile a questa:

ovvero, controlla la directory /mnt/sync e ogni volta che vengono cambiati attributi, creati, cancellati, salvati o spostati file esegui la sincronizzazione.