[CentOS6][SOS JobScheduler] 負荷分散クラスタの構築


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/
下図のように[Cluster]タブに2行表示されればOKです。
"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 だけで実行されます。