GNU/Linux >> Linux の 問題 >  >> Linux

RCRON – cron ジョブの高可用性のセットアップ

rcron は、システム管理者が cron ジョブの冗長性とマシン グループのフェイルオーバーを設定するのに役立つ強力なツールです。 RCRON は、複数のマシンにインストールされたジョブが常にアクティブなマシンでのみ実行されるようにします。

RCRONの働き

RCRON を使用した高可用性 (1 つのノードがアクティブとしてスタンプされ、2 番目のノードがパッシブとしてスタンプされます)。両方で同じ cron 構成が使用されます。唯一の違いは、ファイル内のアクティブ/パッシブ状態です。

アクティブ/パッシブ状態の自動切り替えのために、2 つのノード間の通信にキープアライブ信号を利用する KEEPALIVED Daemon を使用します。シグナルが送信された後、応答が受信されない場合、リンクはダウンしていると見なされます。

このシナリオでは、1 つのノードが KEEPALIVED マスターとしてマークされ、2 番目のノードが KEEPALIVED バックアップとしてマークされます。マスター ノードは rcron 状態をアクティブに保ち、バックアップ ノードは rcron 状態をパッシブに保ちます。マスター ノードがダウンするとすぐに、バックアップ ノードに優先度 0 の信号が送信されます。バックアップ ノードは、マスター ノードとして切り替えて動作し、マスター ノードが再びアップするとすぐに rcron をアクティブとして連続的にマークします。バックアップモードに切り替わります。

CentOS/RHEL での RCRON のインストールと構成の手順

私のシナリオでは、2 つの Linux マシンがあり、1 つがプライマリで、2 つ目がスレーブです。

ステップ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 :インターネット接続を直接取得している場合は、プロキシ設定をスキップします。 SVN から rcron ソフトウェアをダウンロードします。

# cd /root;
# svn co http://rcron.googlecode.com/svn/trunk rcron
# cd rcron/rcron
# ./configure
# make
# make install

ステップ 6 :両方のノードにディレクトリを作成してください。

# 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

マスター ノードで以下のコマンドを実行 :

# 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 :両方のノードにキープアライブ パッケージをインストールします。

a) 最新のソース tarball をダウンロードします:

# 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

上記のコマンドは、次の場所にあるソースからコンパイル済みの 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 :マスターとスレーブの両方でサンプル crontab エントリを作成します。

* * * * * /usr/local/bin/rcron --conf /etc/rcron/rcron.conf echo `date` >> /tmp/output

両方のノードでキープアライブ サービスを開始します。

# 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


Linux
  1. cronジョブのトラブルシューティング

  2. cronジョブを削除する方法

  3. CWPにcronジョブを追加する

  1. cronジョブ/自動タスク

  2. Crontabを使用してcronジョブをスケジュールする方法

  3. CRON ジョブを使用して URL にアクセスしますか?

  1. Crontabを使用したcronジョブのスケジューリング

  2. Linuxでcronジョブを一覧表示する方法

  3. 自分のマシンでスケジュールされているすべての cron ジョブのリストを取得するにはどうすればよいですか?