intra-mart Accel Platform サービス仕様書 第3版 2016-08-01

複数のサーバで起動するサービスの選出

ここでは複数のサーバで起動するサービスの選出方法について説明します。

複数のサーバで起動するサービスには、以下のサービスが該当します。
  • TaskService
  • JobSchedulerService

標準設定での選出方法

サービスの選出方法を特に指定せずに、 標準のまま intra-mart Accel Platform を起動した場合、全てのサーバ上でサービスが起動されます。
標準設定の状態で分散環境を構築するサーバが追加された場合、以下のようにサービスが起動します。
../../_images/multiple_service_1_1.png
  1. APServer1で intra-mart Accel Platform を起動します。
  2. APServer1 上で全てのサービスが起動します。
  3. APServer2、APServer3で intra-mart Accel Platform を起動します。
  4. サーバ間で通信が行われ、分散環境を構築します。
    • APServer1 が APServer2、APServer3 を検知します。
    • APServer2 が APServer1、APServer3 を検知します。
    • APServer3 が APServer1、APServer2 を検知します。
  5. ServerManagerが起動します。
    (ServerManagerの選出・起動については、 1つのサーバで起動するサービスの選出 を参照してください。)
  6. ServerManager で TaskServiceを起動するサーバの選出が行われます。
    • 全てのサーバ(APServer1、APServer2、APServer3)が選出されます。
  7. ServerManager が TaskServiceの開始依頼を送信します。
    • TaskServiceが起動していない APServer2、APServer3 へ TaskServiceの開始依頼を送信します。
      (APServer1 では既にTaskServiceが起動しているので開始依頼は送信されません。)
  8. ServerManager で JobSchedulerServiceを起動するサーバの選出が行われます。
    • 全てのサーバ(APServer1、APServer2、APServer3)が選出されます。
  9. ServerManager が JobSchedulerServiceの開始依頼を送信します。
    • JobSchedulerServiceが起動していない APServer2、APServer3 へ JobSchedulerServiceの開始依頼を送信します。
      (APServer1 は既にJobSchedulerServiceが起動しているので開始依頼は送信されません。)

サービスが起動するサーバを指定する方法

特定のサーバでサービスを起動させたい場合は <service-selecter-config.xml>の「assign-hosts」にサービスを起動するサーバを指定します。
「assign-hosts」に指定されたサーバで intra-mart Accel Platform が起動している場合、そのサーバにサービスが割り当てられます。
<service service-id="server.service.task.management">
  <assign-hosts>
    <host>192.168.0.2</host>
    <host>192.168.0.3</host>
  </assign-hosts>
</service>
<service service-id="server.service.job_scheduler">
  <assign-hosts>
    <host>192.168.0.3</host>
  </assign-hosts>
</service>
上記のように<assign-hosts>を設定した場合、以下のようにサービスが選出されます。
../../_images/multiple_service_1_2.png
  1. APServer1で intra-mart Accel Platform を起動します。
  2. 「assign-hosts」に指定されたサーバが起動していないので、APServer1 上で全てのサービスが起動します。
  3. APServer2、APServer3で intra-mart Accel Platform を起動します。
  4. サーバ間で通信が行われ、分散環境を構築します。
    • APServer1 が APServer2、APServer3 を検知します。
    • APServer2 が APServer1、APServer3 を検知します。
    • APServer3 が APServer1、APServer2 を検知します。
  5. ServerManagerが起動します。
    (ServerManagerの選出・起動については、 1つのサーバで起動するサービスの選出 を参照してください。)
  6. ServerManager で TaskServiceを起動するサーバの選出が行われます。
    • 「assign-hosts」に指定されている APServer2、APServer3 が選出されます。
  7. ServerManager が TaskServiceの開始依頼を送信します。
    • 既に、TaskServiceが起動している APServer1 へ TaskServiceの停止依頼を送信します。
    • 選出された APServer2、APServer3 へ TaskServiceの開始依頼を送信します。
  8. ServerManager で JobSchedulerServiceを起動するサーバの選出が行われます。
    • 「assign-hosts」に指定されている APServer3 が選出されます。
  9. ServerManager が JobSchedulerServiceの開始依頼を送信します。
    • 既に、JobSchedulerServiceが起動している APServer1 へ JobSchedulerServiceの停止依頼を送信します。
    • 選出された APServer3 へ JobSchedulerServiceの開始依頼を送信します。

コラム

「assign-hosts」指定したサーバが起動していない場合、動的にサービスを割り当てるサーバが選出されます。
その際に選出されるサーバは1台になります。

サービスを起動させないサーバを指定する方法

特定のサーバでサービスを起動させたくない場合は <service-selecter-config.xml>の「invalid-hosts」にサービスを起動させないサーバを指定します。
「invalid-hosts」に指定されたサーバのみで intra-mart Accel Platform が起動している場合、そのサービスは開始されません。
<service service-id="server.service.task.management">
  <invalid-hosts>
    <host>192.168.0.2</host>
  </invalid-hosts>
</service>
<service service-id="server.service.job_scheduler">
  <invalid-hosts>
    <host>192.168.0.1</host>
  </invalid-hosts>
</service>
上記のように<invalid-hosts>を設定した場合、以下のようにサービスが選出されます。
../../_images/multiple_service_1_3.png
  1. APServer1で intra-mart Accel Platform を起動します。
  2. APServer1 が「invalid-hosts」に指定されていない、TaskManagerが起動します。
    (JobSchedulerServiceは「invalid-hosts」に APServer1 が指定されているので起動しません。)
  3. APServer2、APServer3で intra-mart Accel Platform を起動します。
  4. サーバ間で通信が行われ、分散環境を構築します。
    • APServer1 が APServer2、APServer3 を検知します。
    • APServer2 が APServer1、APServer3 を検知します。
    • APServer3 が APServer1、APServer2 を検知します。
  5. ServerManagerが起動します。
    (ServerManagerの選出・起動については、 1つのサーバで起動するサービスの選出 を参照してください。)
  6. ServerManager で TaskServiceを起動するサーバの選出が行われます。
    • 「invalid-hosts」に指定されていない APServer1、APServer3 が選出されます。
  7. ServerManager が TaskServiceの開始依頼を送信します。
    • TaskServiceが起動していない APServer3 へ TaskServiceの開始依頼を送信します。
      (APServer1 では既にTaskServiceが起動しているので開始依頼は送信されません。)
  8. ServerManager で JobSchedulerServiceを起動するサーバの選出が行われます。
    • 「invalid-hosts」に指定されていない APServer2、APServer3 が選出されます。
  9. ServerManager が JobSchedulerServiceの開始依頼を送信します。
    • 選出された APServer2、APServer3 へ JobSchedulerServiceの開始依頼を送信します。

割り当てを行うサーバの範囲指定

「assign-hosts」や「invalid-hosts」に複数のサーバを一括で指定する場合には、以下のように指定することができます。
  • セグメント単位の指定

    指定したセグメント内の全てのアドレスを指定する場合に利用します。
    192.168.0.*
  • レンジ指定

    対象とするサーバアドレスの範囲を指定する場合に利用します。
    192.168.0.[1-100]

コラム

範囲指定を行った場合、指定した範囲に含まれるサーバの内、先に起動したサーバから順に選出されます。
「assign-hosts」に指定したサーバ以外のサーバでサービスを起動させたくない場合は、以下のように設定します。
<service service-id="server.service.task.management">
  <assign-hosts>
    <host>192.168.0.1</host>
  </assign-hosts>
  <invalid-hosts>
    <host>*</host>
  </invalid-hosts>
</service>
上記の設定を行うと、「assign-hosts」に指定された”192.168.0.1”のサーバ以外の全てのサーバが「invalid-hosts」に該当するようになります。
そのため、”192.168.0.1”のサーバ上でのみ、サービスが起動するようになります。

サービスを起動するサーバ数の設定

複数のサーバで起動するサービスでは、「select-num」属性を指定することでサービスの起動するサーバ数を指定することができます。
TaskServiceを起動するサーバを2台にする場合は、以下のように設定します。
<service service-id="server.service.task.management" select-num="2">
  <assign-hosts>
    <host>192.168.0.*</host>
  </assign-hosts>
</service>
上記の設定では、「assign-hosts」に指定された”192.168.0”のセグメントに属するサーバの内、先に起動したサーバ2台でサービスが起動します。