rcron è un potente strumento che aiuta gli amministratori di sistema a configurare la ridondanza dei lavori cron e il failover su gruppi di macchine. RCRON garantisce che un lavoro installato su più macchine venga eseguito solo su quella attiva in qualsiasi momento.
Funzionamento di RCRON
Alta disponibilità utilizzando RCRON (un nodo sarà contrassegnato come attivo e il secondo nodo sarà contrassegnato come passivo), la stessa configurazione di cron sarà su entrambi, l'unica differenza sarebbe lo stato attivo/passivo in un file.
Per la commutazione automatica dello stato attivo/passivo, utilizzeremo KEEPALIVED Daemon, che utilizza il segnale keepalive per la comunicazione tra 2 nodi. Dopo l'invio di un segnale, se non viene ricevuta alcuna risposta, si presume che il collegamento sia inattivo.
In questo scenario, un nodo è contrassegnato come master KEEPALIVED e il secondo come backup KEEPALIVED. Il nodo master manterrà attivo lo stato rcron e il nodo di backup manterrà lo stato rcron passivo. Non appena il Master Node scende, invierà un segnale di priorità 0 al Backup Node, che passerà e si comporterà come un MASTER NODE e contrassegnerà consecutivamente rcron come attivo non appena il nodo master riappare, il Backup Node passerà alla modalità di backup.
Passaggi di installazione e configurazione di RCRON su CentOS/RHEL
Nel mio scenario ho due macchine Linux, una è primaria e la seconda è slave.
Passaggio 1 :Abilita l'inoltro IP su entrambi i nodi. Modifica il file /etc/sysctl.conf e apporta le seguenti modifiche
net.ipv4.ip_forward = 1 # sysctl -p ; Save the Changes without rebooting the Machine
Passaggio 2 :aggiungi il repository EPEL su entrambi i nodi.
# wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm # rpm -ivh epel-release-6-8.noarch.rpm
Passaggio 3 :Installa i pacchetti necessari su entrambi i nodi.
# yum install subversion byacc flex gcc
Passaggio 4 :Se ottieni Internet dal server proxy, imposta http_proxy per svn.
# mkdir /root/.subversion/ # vi ~/.subversion/servers http-proxy-exceptions = *.example.com http-proxy-host = www.example.com http-proxy-port = 8080 http-compression = no
Passaggio 5 :Se riceviamo direttamente la connessione a Internet, salta le impostazioni del proxy. Scarica il software rcron da SVN.
# cd /root; # svn co http://rcron.googlecode.com/svn/trunk rcron # cd rcron/rcron # ./configure # make # make install
Passaggio 6 :Crea la directory su entrambi i nodi.
# mkdir /etc/rcron/
############################################## For MASTER SERVER Setup RCRON.conf as follows ############################################## # vi /etc/rcron/rcron.conf # An arbitrary name cluster_name = cluster # A file containing either the word "active" or the word "passive" state_file = /var/run/rcron/state # The default state in case state_file can't be read #default_state = active syslog_facility = LOG_CRON syslog_level = LOG_INFO # We can tune jobs niceness/priorities nice_level = 19
+++++++++++++++++++++++++++++++++++++++++++++++ For BACKUP SERVER NODE , Setup RCRON.conf as follows +++++++++++++++++++++++++++++++++++++++++++++++ vi /etc/rcron/rcron.conf; # An arbitrary name cluster_name = cluster # A file containing either the word "active" or the word "passive" state_file = /var/run/rcron/state # The default state in case state_file can't be read #default_state = passive syslog_facility = LOG_CRON syslog_level = LOG_INFO # We can tune jobs niceness/priorities nice_level = 19
Nel nodo principale, esegui sotto i comandi :
# mkdir /var/run/rcron # touch /var/run/rcron/state # echo "active" > /var/run/rcron/state
Sul nodo slave esegui i comandi seguenti :
# mkdir /var/run/rcron # touch /var/run/rcron/state # echo "passive" > /var/run/rcron/state
Passaggio 7 :Ora installa il pacchetto keepalive su entrambi i nodi.
a) Scarica l'ultimo tarball sorgente:
# cd /root # wget http://cgit.luffy.cx/keepalived/snapshot/keepalived-1.2.7.tar.gz
b) Installare il pacchetto RPM BUILD:
# yum -y install rpm-build
c) Decomprimi il tar ball e modifica il file keepalived.spec.in:
# tar -zxvf keepalived-1.2.7.tar.gz # mkdir -p /root/rpmbuild/SOURCES/ # cp /root/keepalived-1.2.7.tar.gz /root/rpmbuild/SOURCES/
sostituire dalla versione 1.2.2 alla versione:1.2.7:
# vi /root/keepalived-1.2.7/keepalived.spec.in # yum -y install popt* # cd /root/keepalived-1.2.7 # rpmbuild -ba keepalived.spec.in
Il comando precedente creerà un RPM compilato da Source nella posizione:
/root/rpmbuild/RPMS/x86_64/keepalived-1.2.7-5.x86_64.rpm
Ora installa rpm con il comando rpm:
# rpm -ivh /root/rpmbuild/RPMS/x86_64/keepalived-1.2.7-5.x86_64.rpm
Passaggio 8 :IMPOSTA la configurazione keepalive.
Per il nodo master, imposta quanto segue:
# vi /etc/keepalived/keepalived.conf vrrp_instance VI_1 { state MASTER interface eth0 lvs_sync_daemon_inteface eth0 virtual_router_id 31 priority 101 advert_int 5 vrrp_unicast_bind 172.16.243.144 vrrp_unicast_peer 172.16.243.145 authentication { auth_type PASS auth_pass 1111 } notify_backup "/bin/echo passive > /var/run/rcron/state" notify_master "/bin/echo active > /var/run/rcron/state" notify_fault "/bin/echo passive > /var/run/rcron/state" }
Per il nodo di backup:
# vi /etc/keepalived/keepalived.conf vrrp_instance VI_1 { state BACKUP interface eth0 lvs_sync_daemon_inteface eth0 virtual_router_id 31 priority 100 advert_int 5 vrrp_unicast_bind 172.16.243.145 vrrp_unicast_peer 172.16.243.144 authentication { auth_type PASS auth_pass 1111 } notify_backup "/bin/echo passive > /var/run/rcron/state" notify_master "/bin/echo active > /var/run/rcron/state" notify_fault "/bin/echo passive > /var/run/rcron/state" }
Dove "172.16.243.145" e "172.16.243.144" sono gli indirizzi IP delle macchine Linux.
Passaggio 9 :crea una voce crontab di esempio sia su master che su slave.
* * * * * /usr/local/bin/rcron --conf /etc/rcron/rcron.conf echo `date` >> /tmp/output
Avvia il servizio Keepalive su entrambi i nodi:
# service keepalived start ; chkconfig keepalived on
Nota :Nel caso in cui il demone keepalived venga ucciso, creeremo uno script crontab.
* * * * * * /root/keep-alive-monitor
Contenuto dello script:
# cat /root/keep-alive-monitor #!/bin/sh echo "test" >> /tmp/monitor; ps -ef|grep -v grep|grep -i keepalived; if [ $? -eq 0 ] ; then exit 0 else echo "passive" > /var/run/rcron/state; /etc/init.d/keepalived restart; fi