Helix Swarm管理者ガイド (2020.1)

複数のHelixサーバインスタンス

1つのSwarmサーバを複数のHelix Coreサーバ (P4D)インスタンスに接続することができます。 このセクションでは、Swarmを複数のHelixサーバインスタンスに接続する設定方法について説明します。

警告

問題: <swarm_root>/data/config.phpファイルのenvironmentブロックでbase_url構成可能変数の値を変更すると、Helixサーバに対するSwarmの接続がすべて失われます。 この場合、システムの動作が停止します。

解決策: base_url構成可能変数を<swarm_root>/data/config.phpenvironmentブロックから削除します。

注意

既知の制約事項は、グローバルダッシュボードを使用する場合にのみ適用されます。

  • 多要素認証(MFA)がSwarmに対応している場合は、グローバルダッシュボードからHelixサーバインスタンスにログインすることはできません。
  • 回避策: URLにサーバインスタンス名を含めて各インスタンスに個別にログインする(例: https://swarm.company.com/serverA)。

  • Helix認証サービスまたはHelix SAMLSwarmに対して有効になっていて、ログインダイアログで[この資格情報を使用して使用可能なすべてのサーバへのログインを試行する]チェックボックスが選択されている場合は、Swarmは、Helix認証サービスまたはHelix SAMLに設定されているHelixサーバインスタンスにログインを試行しません。 サイドバーにあるインスタンスの[ログイン]ボタン グローバルダッシュボードのログインボタンの画像 を使用して個々にログインします。
  • Swarmは、専用の仮想ホスト内にインストールする必要があります。

Swarmを複数のHelixサーバインスタンスに接続するには、以下の手順を完了してください。

Swarm構成ファイルをHelixサーバ用に設定する

Swarm Helixサーバの接続の詳細は、<swarm_root>/data/config.php構成ファイル内のp4項目を使用して設定されています。

ヒント

構成情報を変更しても、構成キャッシュを再ロードしない限り、その構成情報がSwarmで使用されることはありません。構成キャッシュを再ロードすると、変更した構成情報がSwarmで強制的に使用されます。 Swarm構成キャッシュを再ロードするには、admin ユーザまたはsuper ユーザでなくてはなりません。 [ユーザID]ドロップダウンメニューに移動して[システム情報]を選択し、[キャッシュ情報]タブをクリックしてから[構成の再ロード]ボタンをクリックします。

Swarmが単一のHelixサーバインスタンス用に設定されている場合は、p4項目は以下のようになります。

<?php
    return array(
        'p4' => array(
            'port'      => 'my-helix-core-server:1666',
            'user'      => 'admin_userid',
            'password'  => 'admin user ticket or password',
            'sso_enabled' => false, // defaults to false
         ),
    );

各項目の意味は以下のとおりです。

  • port: HelixサーバのP4PORTを意味します。
  • user: Helixサーバに対しadmin 権限を持つuserid を意味します。
  • password: Helixサーバユーザ用のチケット、またはパスワードを意味します。
  • sso_enabled: HelixサーバHelix認証サービスまたはHelix SAMLに設定されている場合は、trueに設定します。
  • 重要
    • Helix認証サービスは、Perforceの優先SSOソリューションです(Helix認証サービスを参照)。
    • SwarmHelix SAMLを使用する場合:
      • Helixサーババージョン2018.2以降が必要です。
      • Helix SAML用のHelixサーバトリガを作成します。 Helix SAML用のHelixサーバトリガの開発手順については、『Helix Coreサーバ管理者ガイド』の「トリガを起動して外部認証を使用する」を参照してください。
      • sso_enabled構成可能変数を使用して、SwarmHelix SAMLを有効にします。詳細については、「Swarmの構成」を参照してください。
      • Swarm管理者ユーザがチケットベースの認証を使用するように設定する方法については、「Swarmの構成」を参照してください。
      • Helix SAML用にSwarmを設定します。 Helix SAML用のSwarmの設定手順については、「Helix SAML」を参照してください。

複数のHelixサーバインスタンスをconfig.phpp4項目に追加できます。ただし、各Helixサーバインスタンスは、サーバインスタンスを特定できるラベルを持つ必要があります。 これにより、p4項目でSwarmHelixサーバに接続することが可能になります。

ヒント

すべてのHelixサーバインスタンスが同じバージョンである必要はありませんが、すべてSwarmがサポートするバージョンである必要があります。 HelixサーバがサポートするSwarmバージョンのリストについては、Helix Coreサーバ要件を参照してください。

p4項目の最初のHelixサーバはプライマリHelixサーバです。このインスタンスがグローバルダッシュボードをレンダリングします。 SwarmがプライマリHelixサーバへの接続に失敗すると、SwarmはどのHelixサーバインスタンスもグローバルダッシュボードに表示できなくなります。 各インスタンスのURLにHelixサーバラベルを含めることで、他のP4Dインスタンスに直接接続することはできます。例: https://swarm.company.com/serverA

Swarm構成ファイルを複数のHelixサーバインスタンス用に設定する

Helixサーバインスタンスのラベルを入力して、サーバラベルの下にサーバ接続の詳細を入力します。

以下に例を示します。

<?php
    return array(
        'p4' => array(
            'serverA' => array(
                'port'      => 'p4d-A:1666',
                'user'      => 'admin_userid_serverA',
                'password'  => 'admin user ticket or password for serverA',
                'sso_enabled' => false, // defaults to false
            ),
            'serverB' => array(
                'port'      => 'p4d-B:1666',
                'user'      => 'admin_userid_serverB',
                'password'  => 'admin user ticket or password for serverB',
                'sso_enabled' => true, // defaults to false
            ),		
        );

各項目の意味は以下のとおりです。

  • serverAおよびserverBは、個々のHelixサーバを特定するラベルです。
    • ラベルは、URLに適した形式で指定する必要があります。
    • URLエンコードが必要なスペースや文字をラベル内で使用することはできません。
    • サーバラベルの長さとRedis namepaceの長さの合計が127文字を超えないようにしてください。 namespaceのデフォルト値はSwarmです。
  • portuserpasswordsso_enabledの項目は、それらがネストされているHelixサーバインスタンスに固有です。

SwarmトリガトークンとSwarmホスト変数を各Helixサーバ用に設定する

Helixサーバは、Swarmトリガトークンを使用して、Swarmからのトリガ要求が有効であることを確認します。 各Helixサーバインスタンスは、swarm-trigger.confファイルに有効なSwarmトリガトークンを持つ必要があります。 swarm-trigger.confファイルには、Helixサーバインスタンス用のSwarmホストURLも含まれています。

SwarmトリガトークンとSwarmホスト変数を各Helixサーバ用に設定するには、以下を実行します。

  1. インスタンス用のSwarm URLに移動します。
  2. 例: https://swarm.company.com/serverA

  3. Swarmsuperユーザとしてログインします。
  4. メインツールバーのuseridをクリックして、[バージョン情報]Swarmを選択します。
  5. [バージョン情報]Swarmダイアログがトリガトークン付きで表示されます。 Swarmは、トリガトークンが存在しない場合はトリガトークンを生成します。

  6. ダイアログからトリガトークンの値をコピーします。
  7. Helixサーバインスタンス用にswarm-trigger.confファイルを開きます。
  8. ヒント

    swarm-trigger.confファイルの場所について詳しくは、「WindowsまたはLinuxでホストされるHelixサーバを使用してSwarmを設定する」を参照してください。

  9. swarm-trigger.confファイルで、以下を実行します。
    1. SWARM_HOST URLを設定します。
    2. 前述の手順でコピーをしたSwarmトリガトークンを貼り付けて、SWARM_TOKENを設定します。
  10. 以下に例を示します。

    # SWARM_HOST (required)
    # Hostname of your Swarm instance, with leading "http://" or "https://".
    SWARM_HOST="https://swarm.company.com/serverA"
    
    # SWARM_TOKEN (required)
    # The token used when talking to Swarm to offer some security. To obtain the
    # value, log in to Swarm as a super user and select 'About Swarm' to see the
    # token value.
    SWARM_TOKEN="TRIGGER-TOKEN-FOR-SERVERA"
    

  11. swarm-trigger.confファイルを保存します。
  12. Helixサーバに対し、これらの手順を繰り返します。
ヒント

または、<Swarm root>/data/servers/<serverid>/tokensの各フォルダでファイルをタッチするのみで設定することもできます。 ファイルコンテンツは無視され、ファイル名そのものがトークンになります。

これによって、すべてのHelixサーバインスタンスによって使用される共通のトークンを指定できるようになります。

ただし、各Helixサーバインスタンスに対して別のトークンを使用することをお勧めします。 これにより、必要に応じてサーバのtokensフォルダ内のファイルを削除することによって、特定のHelixサーバのトークンを無効にすることが容易になります。

cronジョブを各Helixサーバインスタンス用に設定する

Swarmに接続している各サーバに対してワーカーを自動的に生成するには、各サーバに対してcronジョブを手動で構成する必要があります。

SwarmパッケージのインストールとOVAのインストールのみ

swarm-cron-hosts.confファイルは、Swarmのcronジョブの接続タイプ(HTTPまたはHTTPS)、ホスト名、ポート番号、サーバラベルを指定します。

パッケージを使用してSwarmをインストールした場合、またはSwarm OVAを実行している場合、/opt/perforce/etc/swarm-cron-hosts.conf内ですべてのHelixサーバ URLを指定する必要があります。

  1. Swarm用に設定されている実際のSwarmのホスト名、ポート番号、サーバラベルを含めることができるようにswarm-cron-hosts.confファイルを編集します。
  2. 1つのHelixサーバに対して以下の構文の各行を使用します。

    [http[s]://]<swarm-host>[:<port>][/<base-url>]

    値を指定しなかった場合に適用されるデフォルト設定は以下のとおりです。

    • [http[s]://]: httpがデフォルト値として使用されます。
    • <swarm-host>: Swarmのホスト名を指定する必要があります。
    • [:<port>] 80
    • [/<base-url>]: サーバラベルです。指定する必要があります。

    例えば、デフォルトのポート値80を使用して設定されたhttps://swarm.company.comSwarmホストのserverAおよびserverBについて考えます。 swarm-cron-hosts.confファイルのエントリは以下のようになります。

    https://swarm.company.com/serverA
    https://swarm.company.com/serverB
  3. swarm-cron-hosts.confファイルを保存します。
  4. Swarmが、複数のHelixサーバインスタンスに接続するように設定されました。
  5. ヒント

    Swarmワーカーの構成を確認する方法(または変更する方法)については、ワーカーの構成を参照してください。

SwarmTarballを使用したインストールのみ

Swarmをtarballを使用してインストールした場合、またはcronを手動で設定した場合は、helix-swarmというファイルを作成し、Swarmに接続したすべてのHelixサーバインスタンスを追加する必要があります。

  1. /etc/cron.dで、helix-swarmという名前のファイルを作成します(まだ存在しない場合)。
  2. 以下のコンテンツを含むよう、helix-swarmファイルを編集します。
  3. #
    # Cron job to start Swarm workers every minute
    #
    * * * * * nobody [ -x /opt/perforce/swarm/p4-bin/scripts/swarm-cron.sh ] && /opt/perforce/swarm/p4-bin/scripts/swarm-cron.sh

  4. helix-swarmファイルを保存します。
  5. Swarm用に設定されている実際のSwarmのホスト名、ポート番号、サーバラベルを含めることができるようにswarm-cron-hosts.confファイルを編集します。
  6. 1つのHelixサーバに対して以下の構文の各行を使用します。

    [http[s]://]<swarm-host>[:<port>][/<base-url>]

    値を指定しなかった場合に適用されるデフォルト設定は以下のとおりです。

    • [http[s]://]: httpがデフォルト値として使用されます。
    • <swarm-host>: Swarmのホスト名を指定する必要があります。
    • :<port> 80
    • [/<base-url>]: サーバラベルです。指定する必要があります。

    例えば、デフォルトのポート値80を使用して設定されたhttps://swarm.company.comSwarmホストのserverAおよびserverBについて考えます。 swarm-cron-hosts.confファイルのエントリは以下のようになります。

    https://swarm.company.com/serverA
    https://swarm.company.com/serverB
  7. swarm-cron-hosts.confファイルを保存します。
  8. Swarmが、複数のHelixサーバインスタンスに接続するように設定されました。
  9. ヒント

    Swarmワーカーの構成を確認する方法(または変更する方法)については、ワーカーの構成を参照してください。

詳細情報

ユーザ

  • グローバルダッシュボードにアクセスするには、Helixサーバインスタンス名なしで、基本的なSwarm URLを入力します。例えば、https://swarm.company.comと入力します。
  • グローバルダッシュボードを経由せずに、Swarmの特定のHelixサーバインスタンスにアクセスするには、URLにサーバ名を含めます。例えば、https://swarm.company.com/serverAと入力します。

SwarmHelixサーバを表示すると、Swarmは、標準の単一Helixサーバ Swarmシステムとして動作します。

ヒント
  • serverA上のジョブを表示するには、https://swarm.company.com/serverA/jobsに移動します。
  • serverB上のレビューを表示するには、https://swarm.company.com/serverB/reviewsに移動します。
  • serverB用のダッシュボードを表示するには、https://swarm.company.com/serverB/#actionable-reviewsに移動します。
  • URLにサーバラベルを含めない場合、プライマリのHelixサーバの指定されたページに移動します。
  • 例えば、https://swarm.company.com/reviewsに移動すると、serverAp4設定項目のプライマリHelixサーバであるため、https://swarm.company.com/serverA/reviewsにリダイレクトされます。

管理者

Swarmをホストするサーバでは、Swarmは各Helixサーバインスタンスのデータフォルダを<Swarm_root>/data/serversに自動的に作成します。 これは、各Helixサーバのリクエストがフィールドであるためです。

以下に例を示します。

# ls -la /opt/perforce/swarm/data/servers/serverA
total 362296			
drwx------ 6 apache apache    4096 Sep  8 17:15 .
drwx------ 6 apache apache    4096 Sep  6 15:41 ..
drwx------ 2 apache apache    4096 Sep 20 18:08 cache
drwx------ 3 apache apache    4096 Sep  7 13:25 clients
-rw-r--r-- 1 apache apache 3709543 Sep 26 14:19 log
-r-------- 1 apache apache      84 Sep  6 15:41 p4trust
drwx------ 4 apache apache    4096 Sep 20 14:27 queue
drwx------ 2 apache apache    4096 Sep 20 11:18 sessions
ヒント

Swarmのログファイルが各Helixサーバに対して存在することを理解しておく必要があります。

開発者

Swarm APIを使用して、serverAのプロジェクトの一覧を取得するには、bashで以下のコマンドを実行します。

  • wgetを使用している場合:

    $ wget -u "apiuser:password" https://swarm.company.com/serverA/api/v10/projects
  • curlを使用している場合:

    $ curl -u "apiuser:password" https://swarm.company.com/serverA/api/v10/projects

ヒント

URLにサーバラベルを含めない場合、プライマリのHelixサーバのプロジェクトページに移動します。

例えば、https://swarm.company.com/api/v10/projectsに移動すると、https://swarm.company.com/api/v10/serverA/projectsにリダイレクトされます。これは、serverAp4設定項目のプライマリHelixサーバであるためです。