複数の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ブロックから削除します。

注意

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

  • 問題: Helix認証サービスSwarmに対して有効になっていて、ログインダイアログで[この資格情報を使用して使用可能なすべてのサーバへのログインを試行する]チェックボックスまたは[使用可能なすべてのサーバ]オプションが選択されている場合、Swarmは、Helix認証サービスに対して設定されているHelixサーバインスタンスへのログイン処理を実行しない。
  • 回避策: サイドバーの[ログイン]ボタン(グローバルダッシュボードのログインボタンの画像)を使用するか、サーバインスタンス名をURLに含めて(例: https://swarm.company.com/serverA)、個別にログインを実行します。

  • 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'      => 'disabled', // ['disabled'|'optional'|'enabled'] default value is 'disabled' 
         ),
    );

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

  • port: HelixサーバのP4PORTを意味します。
  • user: Helixサーバに対しadmin 権限を持つuserid を意味します。
  • password: Helixサーバユーザ用のチケット、またはパスワードを意味します。
  • sso: HelixサーバHelix認証サービス用に設定されている場合は、以下のいずれかの値を設定します。
    • enabled: すべてのユーザがHelix認証サービスを使用してSwarmにログインする必要があります。

    • optional: Helix認証サービスを使用してSwarmにログインできますが、必ず使用しなければならないわけではありません。

    • disabled: Helix認証サービスを使用してSwarmにログインすることはできません。これがデフォルト値です。

  • 重要

    Swarm 2021.1以降、sso_enabled構成可能変数は非推奨になりました(ただし、引き続き使用できます)。代わりに、より柔軟性の高いsso構成可能変数が導入されました。sso_enabled構成可能変数とsso構成可能変数の両方をp4構成ブロック内に指定した場合、Swarmではsso構成可能変数が使用されます。

複数の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'      => 'disabled', // ['disabled'|'optional'|'enabled'] default value is 'disabled' 
            ),
            'serverB' => array(
                'port'     => 'p4d-B:1666',
                'user'     => 'admin_userid_serverB',
                'password' => 'admin user ticket or password for serverB',
                'sso'      => 'disabled', // ['disabled'|'optional'|'enabled'] default value is 'disabled' 
            ),		
        );

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

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