Create: 2013/05/22
LastUpdate: 2013/05/23
ここでは、負荷分散クラスタを試してみます。
負荷分散クラスタでは、Order を振り分けて複数のJobSchedulerで実行してくれます。
負荷分散クラスタの詳細は、「JobScheduler - Document」を参照してください。
負荷分散クラスタの構築手順は、ほとんど「 [CentOS6][SOS JobScheduler] バックアップ・クラスタの構築」と同じなので、違うところだけ以下に記述します。
1.負荷分散クラスタの構築
今回構築する負荷分散クラスタは、「 [CentOS6][SOS JobScheduler] バックアップ・クラスタの構築」と同じサーバの構成にして、Managerサーバ(JobSchedlerEngine)2台で負荷分散します。
MySQLやNFSのセットアップの手順は同じですが、JobSchedulerのインストール時には負荷分散クラスタを指定するようにします。
GUIでJobSchedulerをインストールする場合は、下図の画面で自身が負荷分散クラスタのメンバーであると設定します。
バッチインストールする場合は、以下のように "-distributed-orders" を指定します。
<com.izforge.izpack.panels.UserInputPanel id="cluster">
<userInput>
<entry key="clusterOptions" value="-distributed-orders"/>
</userInput>
</com.izforge.izpack.panels.UserInputPanel>
負荷分散クラスタのJobScheduler は、以下のように起動します。$ cd /opt/sos-berlin.com/jobscheduler/scheduler/bin $ ./jobscheduler.sh start -distributed-orders
2.動作確認
ブラウザで以下のURLにアクセスして、負荷分散クラスタのJOCを開きます。
IPアドレスは、上記1で JobScheduler をインストールしたサーバで、カッコ内はホスト名です。
- 1台目のJobScheduler(centos6g) : http://192.168.1.67:4444/
- 2台目のJobScheduler(centos6h) : http://192.168.1.68:4444/
"This Scheduler" が自分自身です。
[Status]欄に "active distributed orders" と表示されていれば、正常に負荷分散クラスタが機能しています。
試しに JobChain を作成して、負荷分散されるか確認してみます。
まず、以下のようにOrderJobを作成します。3秒スリープするだけの処理です。
<?xml version="1.0" encoding="ISO-8859-1"?> <job order="yes" stop_on_error="no"> <script language="shell"> <![CDATA[ echo "$SCHEDULER_JOB_NAME processed $SCHEDULER_ORDER_ID" echo "Current Timestamp: `date '+%Y-%m-%d %H:%M:%S'`" echo "Current Hostname: `uname -n`" echo "Current Username: `whoami`" sleep 3 exit 0 ]]> </script> <run_time/> </job>次に、以下のように JobChain を作成します。
上記の同じジョブを5回実行します。また、赤字で示したパラメータで、負荷分散することを指示します。
<?xml version="1.0" encoding="ISO-8859-1"?>
<job_chain distributed="yes">
<job_chain_node state="01" job="job1" next_state="02" error_state="error"/>
<job_chain_node state="02" job="job1" next_state="03" error_state="error"/>
<job_chain_node state="03" job="job1" next_state="04" error_state="error"/>
<job_chain_node state="04" job="job1" next_state="05" error_state="error"/>
<job_chain_node state="05" job="job1" next_state="success" error_state="error"/>
<job_chain_node state="success"/>
<job_chain_node state="error"/>
</job_chain>
JobScheduler(centos6h)で、この JobChain を続けて、計画実行(即時)して2つの Order を作成します。下図の例では、OrderIDが 798 と 797 の2つです。
OrderIDが 797 の実行結果は、以下のとおり。 centos6h で実行されたことがわかります。
2013-05-22 10:39:30.066 [info] (Task test/job1:9808) SCHEDULER-842 Task is going to process Order test/JobChain02:797, state=01, on Scheduler http://centos6h:4444 2013-05-22 10:39:30.066 [info] (Task test/job1:9808) 2013-05-22 10:39:30.066 [info] (Task test/job1:9808) Task test/job1:9808 - Protocol starts in /home/jobs/sos-berlin.com/jobscheduler/scheduler/logs/task.test,job1.log 2013-05-22 10:39:30.068 [info] (Task test/job1:9808) SCHEDULER-918 state=starting (at=never) 2013-05-22 10:39:30.068 [info] (Task test/job1:9808) SCHEDULER-987 Starting process: '/bin/sh' '-c' '"/tmp/jobs/sos.3Noo31"' 2013-05-22 10:39:31.107 [info] (Task test/job1:9808) job1 processed 797 2013-05-22 10:39:31.107 [info] (Task test/job1:9808) Current Timestamp: 2013-05-22 10:39:30 2013-05-22 10:39:31.107 [info] (Task test/job1:9808) Current Hostname: centos6h ~ 省略 ~OrderIDが 798 の実行結果は、以下のとおり。 centos6g で実行されたことがわかります。
2013-05-22 10:39:48.021 [info] (Task test/job1:9815) SCHEDULER-842 Task is going to process Order test/JobChain02:798, state=01, on Scheduler http://centos6g:4444 2013-05-22 10:39:48.021 [info] (Task test/job1:9815) 2013-05-22 10:39:48.021 [info] (Task test/job1:9815) Task test/job1:9815 - Protocol starts in /home/jobs/sos-berlin.com/jobscheduler/scheduler/logs/task.test,job1.log 2013-05-22 10:39:48.022 [info] (Task test/job1:9815) SCHEDULER-918 state=starting (at=never) 2013-05-22 10:39:48.022 [info] (Task test/job1:9815) SCHEDULER-987 Starting process: '/bin/sh' '-c' '"/tmp/jobs/sos.jThQVK"' 2013-05-22 10:39:49.037 [info] (Task test/job1:9815) job1 processed 798 2013-05-22 10:39:49.037 [info] (Task test/job1:9815) Current Timestamp: 2013-05-22 10:39:48 2013-05-22 10:39:49.037 [info] (Task test/job1:9815) Current Hostname: centos6g ~ 省略 ~この結果を見ると、負荷分散されたようです。
Orderの実行中は、それぞれ、振り分けられたJobScheduleのJOCで実行している様子を確認できます。
また、Orderの実行履歴は、両方のJOCで確認できます。
負荷分散クラスタで負荷分散できるのは、 distributed="yes" を設定した JobChain の Order だけです。StandaloneJob や、distributed="yes" を設定していない JobChain は、<add_job> や <add_order> を実施した JobScheduler だけで実行されます。