Archivi tag: rsync

Sincronizzazione dei contenuti Web tramite rsync

Supponiamo che vi siano in produzione N frontend Web dietro bilanciatore e che quindi, ad ogni release, si renda necessario caricare i contenuti su ciascuno di essi (rendendo la vita difficile agli sviluppatori).

Ho deciso quindi di automatizzare tale procedura mediante l’uso di rsync. In soldoni, i contenuti Web verranno caricati manualmente su un unico frontend (che fungerà da server) mentre le altre macchine fungeranno da client (ovvero aggiorneranno i loro contenuti ogni X minuti consultando direttamente la macchina server).

rsyncConfigurazione della macchina server

Tale attività si articola in due fasi: la prima consiste nell’installazione e nella corretta configurazione del demone xinetd (evoluzione del celeberrimo inetd), mentre la seconda riguarda solo ed esclusivamente rsync.

Procediamo dunque con l’installazione di xinetd:

[root@front1 ~]# yum install xinetd

ed impostiamo l’avvio automatico del demone in questione per i diversi runlevel:

[root@front1 ~]# chkconfig --levels 2345 xinetd on

Posizioniamoci nella dir /etc/xinetd.d ed apriamo in scrittura il file rsync, sostituendo la direttiva:

disable = yes

con

disable = no

In definitiva, il suddetto file, dovrà avere il seguente contenuto:

service rsync
{
        disable = no
        flags           = IPv6
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon
        log_on_failure  += USERID
}

Passiamo ora al secondo step relativo alla configurazione della macchina server, ovvero la creazione del file rsyncd.conf nella directory /etc:

[root@front1 ~]# touch /etc/rsyncd.conf

All’interno del suddetto file creeremo dei moduli ad-hoc contenenti tutte le direttive necessarie per la sincronizzazione dei contenuti tra server e client, ad esempio:

log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
[images]
   path = /var/www/html/images
   uid = root
   gid = root
   read only = no
   list = yes
   host allow = 10.12.66.0/24

Salviamo il file ed avviamo xinetd:

[root@front1 ~]# service xinetd start

Configurazione delle macchine client

Tale configurazione consiste esclusivamente nella creazione di una entry crontab del tipo:

*      *   * * *     root          rsync -avr root@10.12.66.1::images /var/www/html/images/

ovvero ogni minuto viene contattato il server (10.12.66.1, modulo images che punta a /var/www/html/images/) e viene sincronizzato il contenuto della dir del client /var/www/html/images/.

Fine del post, alla prossima.

scp ed i symlinks

Avere a che fare con delle share NFS è un po’ frustrante. Migrare tali share su un altro server lo è ancora di più, soprattutto se si utilizza scp per spostare le directory da condividere sul nuovo server NFS.

Infatti, subito dopo aver completato la copia, mi hanno fatto notare che i symlinks non funzionavano.

 

scp,symlinks,link simbolici,rsync,find

Inizialmente credevo fosse problema di cp, in quanto il trasferimento delle directory via scp non puntava direttamente alla dir target NFS ma ad una di appoggio (per via delle credenziali utilizzate da scp e dei permessi associati all’utente).

In soldoni, ho dapprima spostato le suddette dir sulla mia home e da lì ho lanciato un cp -d (per includere nella copia i link simbolici) verso il target della share. In seguito, mi sono posizionato sulla dir target ed ho lanciato il comando:

[root@nfs2 ~]# find . -type l -exec ls -ld {} +

per cercare eventuali simlynks, ma, come potete immaginare, la ricerca non ha fornito alcun risultato.

Dunque, non essendo problema di cp, l’unico comando responsabile della mancata copia dei link simbolici non poteva che essere scp.

Ed infatti, guardate qui:

http://superuser.com/questions/233036/scp-copy-the-same-links

La soluzione che ho adottato, senza dovermi necessariamente impelagare con rsync, consiste nel creare una tarball contenente le dir da migrare, copiarla via scp ed infine scompattarla sul nuovo server:

[root@nfs1 ~]# tar -cvf dirtomigrate.tar.gz /var/www/html/siti

[root@nfs2 ~]# tar -xvf dirtomigrate.tar.gz /var/www/html/siti

(da lanciare sul nuovo server NFS).

E’ tutto.

A presto.