rcron 是一个强大的工具,可帮助系统管理员设置 cron 作业冗余和故障转移机器组。
RCRON 确保安装在多台机器上的作业在任何时候都只会在活动的机器上运行。
RCRON的工作
使用 RCRON 的高可用性(一个节点将被标记为活动,第二个节点将被标记为被动),相同的 cron 配置将在两者上进行,唯一的区别是文件中的活动/被动状态。
对于主动/被动状态的自动切换,我们将使用 KEEPALIVED 守护进程,它利用 keepalive 信号在 2 个节点之间进行通信。
发送信号后,如果没有收到回复,则认为链接已关闭。
在这种情况下,一个节点标记为 KEEPALIVED 主节点,第二个节点标记为 KEEPALIVED 备份节点。
主节点将保持 rcron 状态活动,而备份节点将保持 rcron 状态被动。
一旦主节点宕机,它将向备份节点发送一个 0 优先级信号,备份节点将切换并充当主节点,并在主节点再次启动时连续将 rcron 标记为活动状态,备份节点将切换到备份模式。
CentOS/RHEL上RCRON的安装配置步骤
在我的场景中,我有两台 Linux 机器,一台是主机器,第二台是从机器。
步骤 1:在两个节点上启用 IP 转发。
编辑文件 /etc/sysctl.conf 并进行以下更改
net.ipv4.ip_forward = 1 # sysctl -p ; Save the Changes without rebooting the Machine
步骤 2:在两个节点上添加 EPEL 存储库。
# wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm # rpm -ivh epel-release-6-8.noarch.rpm
步骤 3:在两个节点上安装必要的软件包。
# yum install subversion byacc flex gcc
步骤 4:如果我们从代理服务器获取互联网,则为 svn 设置 http_proxy。
# mkdir /root/.subversion/ # vi ~/.subversion/servers http-proxy-exceptions = *.example.com http-proxy-host = www.example.com http-proxy-port = 8080 http-compression = no
步骤 5:如果我们直接获得 Internet 连接,则跳过代理设置。
从SVN下载rcron软件。
# cd /root; # svn co http://rcron.googlecode.com/svn/trunk rcron # cd rcron/rcron # ./configure # make # make install
步骤 6:在两个节点上创建目录。
# mkdir /etc/rcron/
# 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
在主节点上运行以下命令:
# mkdir /var/run/rcron # touch /var/run/rcron/state # echo "active" > /var/run/rcron/state
在从节点上运行以下命令:
# mkdir /var/run/rcron # touch /var/run/rcron/state # echo "passive" > /var/run/rcron/state
步骤 7:现在在两个节点上安装 keepalive 包。
a) 下载最新的源 tar包:
# cd /root # wget http://cgit.luffy.cx/keepalived/snapshot/keepalived-1.2.7.tar.gz
b) 安装 RPM BUILD 包:
# yum -y install rpm-build
c) 解压 tar 球并编辑 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/
从版本 1.2.2 替换为版本: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
上面的命令将从以下位置的 Source 创建一个已编译的 RPM:
/root/rpmbuild/RPMS/x86_64/keepalived-1.2.7-5.x86_64.rpm
现在使用 rpm 命令安装 rpm:
# rpm -ivh /root/rpmbuild/RPMS/x86_64/keepalived-1.2.7-5.x86_64.rpm
步骤 8:设置 keepalived 配置。
对于主节点,设置以下内容:
# 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" }
对于备份节点:
# 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" }
其中“172.16.243.145”和“172.16.243.144”是Linux机器的IP地址。
步骤 9:在 master 和 slave 上创建示例 crontab 条目。
* * * * * /usr/local/bin/rcron --conf /etc/rcron/rcron.conf echo `date` >> /tmp/output
在两个节点上启动 Keepalive 服务:
# service keepalived start ; chkconfig keepalived on
注意:如果 keepalived 守护进程被杀死,我们将创建一个 crontab 脚本。
* * * * * * /root/keep-alive-monitor
脚本内容:
# 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