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).
Configurazione 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.