rcron est un outil puissant qui aide les administrateurs système à configurer la redondance des tâches cron et le basculement sur des groupes de machines. RCRON garantit qu'une tâche installée sur plusieurs machines ne s'exécutera que sur la machine active à tout moment.
Fonctionnement du RCRON
Haute disponibilité utilisant RCRON (un nœud sera estampillé comme actif et le deuxième nœud sera estampillé comme passif), la même configuration cron sera sur les deux, la seule différence serait l'état actif/passif dans un fichier.
Pour la commutation automatique de l'état actif/passif, nous utiliserons le démon KEEPALIVED, qui utilise le signal keepalive pour la communication entre 2 nœuds. Après l'envoi d'un signal, si aucune réponse n'est reçue, le lien est considéré comme inactif.
Dans ce scénario, un nœud est marqué comme maître KEEPALIVED et le second comme sauvegarde KEEPALIVED. Le nœud maître gardera l'état rcron actif et le nœud de sauvegarde gardera l'état rcron passif. Dès que le nœud maître descend, il enverra un signal de priorité 0 au nœud de sauvegarde, qui basculera et se comportera comme un nœud maître et marquera consécutivement rcron comme actif dès que le nœud maître se rallumera, le nœud de sauvegarde passera en mode sauvegarde.
Étapes d'installation et de configuration de RCRON sur CentOS/RHEL
Dans mon scénario, j'ai deux machines Linux, l'une est principale et la seconde est esclave.
Étape 1 :Activez le transfert IP sur les deux nœuds. Modifiez le fichier /etc/sysctl.conf et effectuez les modifications ci-dessous
net.ipv4.ip_forward = 1 # sysctl -p ; Save the Changes without rebooting the Machine
Étape 2 :Ajoutez le référentiel EPEL sur les deux nœuds.
# wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm # rpm -ivh epel-release-6-8.noarch.rpm
Étape 3 :Installez les packages nécessaires sur les deux nœuds.
# yum install subversion byacc flex gcc
Étape 4 :Si vous obtenez Internet à partir du serveur proxy, définissez http_proxy pour 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
Étape 5 :Si nous obtenons une connexion Internet directement, ignorez les paramètres de proxy. Téléchargez le logiciel rcron depuis SVN.
# cd /root; # svn co http://rcron.googlecode.com/svn/trunk rcron # cd rcron/rcron # ./configure # make # make install
Étape 6 :Créez le répertoire sur les deux nœuds.
# 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
Sur le nœud maître, exécutez les commandes ci-dessous :
# mkdir /var/run/rcron # touch /var/run/rcron/state # echo "active" > /var/run/rcron/state
Sur le nœud esclave, exécutez les commandes ci-dessous :
# mkdir /var/run/rcron # touch /var/run/rcron/state # echo "passive" > /var/run/rcron/state
Étape 7 :Installez maintenant le package keepalive sur les deux nœuds.
a) Téléchargez la dernière archive tar source :
# cd /root # wget http://cgit.luffy.cx/keepalived/snapshot/keepalived-1.2.7.tar.gz
b) Installez le package RPM BUILD :
# yum -y install rpm-build
c) Décompressez la boule de tar et modifiez le fichier 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/
remplacer de la version 1.2.2 à la version : 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
La commande ci-dessus créera un RPM compilé à partir de la source à l'emplacement :
/root/rpmbuild/RPMS/x86_64/keepalived-1.2.7-5.x86_64.rpm
Installez maintenant rpm avec la commande rpm :
# rpm -ivh /root/rpmbuild/RPMS/x86_64/keepalived-1.2.7-5.x86_64.rpm
Étape 8 :SETUP la configuration keepalive.
Pour le nœud maître, configurez ce qui suit :
# 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" }
Pour le nœud de secours :
# 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" }
Où "172.16.243.145" et "172.16.243.144" sont l'adresse IP des machines Linux.
Étape 9 :Créer un exemple d'entrée crontab sur le maître et l'esclave.
* * * * * /usr/local/bin/rcron --conf /etc/rcron/rcron.conf echo `date` >> /tmp/output
Démarrez le service Keepalive sur les deux nœuds :
# service keepalived start ; chkconfig keepalived on
Remarque :Au cas où le démon keepalived serait tué, nous allons créer un script crontab.
* * * * * * /root/keep-alive-monitor
Contenu du 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