RCRON - 设置 cron 作业的高可用性

rcron 是一个强大的工具,可帮助系统管理员设置 cron 作业冗余和故障转移机器组。
RCRON 确保安装在多台机器上的作业在任何时候都只会在活动的机器上运行。

RCRON的工作

使用 RCRON 的高可用性(一个节点将被标记为活动,第二个节点将被标记为被动),相同的 cron 配置将在两者上进行,唯一的区别是文件中的活动/被动状态。

对于主动/被动状态的自动切换,我们将使用 KEEPALIVED 守护进程,它利用 keepalive 信号在 2 个节点之间进行通信。
发送信号后,如果没有收到回复,则认为链接已关闭。

在这种情况下,一个节点标记为 KEEPALIVED 主节点,第二个节点标记为 KEEPALIVED 备份节点。
主节点将保持 rcron 状态活动,而备份节点将保持 rcron 状态被动。
一旦主节点宕机,它将向备份节点发送一个 0 优先级信号,备份节点将切换并充当主节点,并在主节点再次启动时连续将 rcron 标记为活动状态,备份节点将切换到备份模式。

https://onitroad.com 更多教程

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
日期:2020-09-17 00:14:40 来源:oir作者:oir