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