rcron es una poderosa herramienta que ayuda a los administradores de sistemas a configurar la redundancia de trabajos cron y la conmutación por error en grupos de máquinas. RCRON asegura que un trabajo instalado en varias máquinas solo se ejecutará en la activa en cualquier momento.
Funcionamiento de RCRON
Alta disponibilidad usando RCRON (un nodo se marcará como activo y el segundo nodo se marcará como pasivo), la misma configuración de cron estará en ambos, la única diferencia sería el estado activo/pasivo en un archivo.
Para el cambio automático de estado activo/pasivo, utilizaremos el demonio KEEPALIVED, que utiliza la señal de actividad para la comunicación entre 2 nodos. Después de enviar una señal, si no se recibe respuesta, se supone que el enlace está caído.
En este escenario, un nodo se marca como maestro KEEPALIVED y el segundo como copia de seguridad KEEPALIVED. El nodo maestro mantendrá el estado rcron activo y el nodo de respaldo mantendrá el estado rcron pasivo. Tan pronto como el nodo maestro se apague, enviará una señal de prioridad 0 al nodo de respaldo, que cambiará y se comportará como un NODO MAESTRO y marcará consecutivamente a rcron como activo tan pronto como el nodo maestro vuelva a funcionar, el nodo de respaldo cambiará al modo de copia de seguridad.
Pasos de instalación y configuración de RCRON en CentOS/RHEL
En mi escenario, tengo dos máquinas Linux, una es primaria y la segunda es esclava.
Paso 1 :habilite el reenvío de IP en ambos nodos. Edite el archivo /etc/sysctl.conf y realice el siguiente cambio
net.ipv4.ip_forward = 1 # sysctl -p ; Save the Changes without rebooting the Machine
Paso 2 :agregue el repositorio EPEL en ambos nodos.
# wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm # rpm -ivh epel-release-6-8.noarch.rpm
Paso 3 :instale los paquetes necesarios en ambos nodos.
# yum install subversion byacc flex gcc
Paso 4 :si obtiene Internet desde el servidor proxy, configure http_proxy para 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
Paso 5 :Si obtenemos una conexión a Internet directamente, omita la configuración del proxy. Descarga el software rcron desde SVN.
# cd /root; # svn co http://rcron.googlecode.com/svn/trunk rcron # cd rcron/rcron # ./configure # make # make install
Paso 6 :Cree el directorio en ambos nodos.
# 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
En el nodo maestro Ejecutar debajo de los comandos :
# mkdir /var/run/rcron # touch /var/run/rcron/state # echo "active" > /var/run/rcron/state
En el nodo esclavo, ejecute los siguientes comandos :
# mkdir /var/run/rcron # touch /var/run/rcron/state # echo "passive" > /var/run/rcron/state
Paso 7 :ahora instale el paquete keepalive en ambos nodos.
a) Descargue el tarball fuente más reciente:
# cd /root # wget http://cgit.luffy.cx/keepalived/snapshot/keepalived-1.2.7.tar.gz
b) Instale el paquete RPM BUILD:
# yum -y install rpm-build
c) Descomprima la bola de alquitrán y edite el archivo 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/
reemplazar de la versión 1.2.2 a la versión: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
El comando anterior creará un RPM compilado desde la fuente en la ubicación:
/root/rpmbuild/RPMS/x86_64/keepalived-1.2.7-5.x86_64.rpm
Ahora instale rpm con el comando rpm:
# rpm -ivh /root/rpmbuild/RPMS/x86_64/keepalived-1.2.7-5.x86_64.rpm
Paso 8 :CONFIGURAR la configuración de keepalived.
Para el nodo principal, configure lo siguiente:
# 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" }
Para el nodo de respaldo:
# 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" }
Donde "172.16.243.145" y "172.16.243.144" son la dirección IP de las máquinas Linux.
Paso 9 :Cree una entrada crontab de muestra tanto en el maestro como en el esclavo.
* * * * * /usr/local/bin/rcron --conf /etc/rcron/rcron.conf echo `date` >> /tmp/output
Inicie el servicio Keepalive en ambos nodos:
# service keepalived start ; chkconfig keepalived on
Nota :En caso de que el demonio keepalived muera, vamos a crear un script crontab.
* * * * * * /root/keep-alive-monitor
Contenido del guión:
# 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