複数のHelixサーバインスタンス
1つのSwarmサーバを複数のHelix Coreサーバ (P4D)インスタンスに接続することができます。このセクションでは、Swarmを複数のHelixサーバインスタンスに接続する設定方法について説明します。
問題: <swarm_root>/data/config.phpファイルのenvironmentブロックでbase_url構成可能変数の値を変更すると、Helixサーバに対するSwarmの接続がすべて失われます。この場合、システムの動作が停止します。
解決策: base_url構成可能変数を<swarm_root>/data/config.phpのenvironmentブロックから削除します。
既知の制約事項は、グローバルダッシュボードを使用する場合にのみ適用されます。
- 問題: Helix認証サービスがSwarmに対して有効になっていて、ログインダイアログで[この資格情報を使用して使用可能なすべてのサーバへのログインを試行する]チェックボックスまたは[使用可能なすべてのサーバ]オプションが選択されている場合、Swarmは、Helix認証サービスに対して設定されているHelixサーバインスタンスへのログイン処理を実行しない。
- Swarmは、専用の仮想ホスト内にインストールする必要があります。
回避策: サイドバーの[ログイン]ボタン()を使用するか、サーバインスタンス名をURLに含めて(例: https://swarm.company.com/serverA)、個別にログインを実行します。
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.phpのp4項目に追加できます。ただし、各Helixサーバインスタンスは、サーバインスタンスを特定できるラベルを持つ必要があります。これにより、p4項目でSwarmがHelixサーバに接続することが可能になります。
すべての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です。
- port、user、password、ssoは、ネストされているHelixサーバインスタンス固有の項目です。
SwarmトリガトークンとSwarmホスト変数を各Helixサーバ用に設定する
Helixサーバは、Swarmトリガトークンを使用して、Swarmからのトリガ要求が有効であることを確認します。各Helixサーバインスタンスは、swarm-trigger.confファイルに有効なSwarmトリガトークンを持つ必要があります。swarm-trigger.confファイルには、Helixサーバインスタンス用のSwarmホストURLも含まれています。
SwarmトリガトークンとSwarmホスト変数を各Helixサーバ用に設定するには、以下を実行します。
- インスタンス用のSwarm URLに移動します。
- Swarmにsuper ユーザとしてログインします。
- メインツールバーの userid をクリックして、[バージョン情報]Swarmを選択します。
- ダイアログからトリガトークンの値をコピーします。
- Helixサーバインスタンス用にswarm-trigger.confファイルを開きます。
- swarm-trigger.confファイルで、以下を実行します。
- SWARM_HOST URLを設定します。
- 前述の手順でコピーをしたSwarmトリガトークンを貼り付けて、SWARM_TOKENを設定します。
- swarm-trigger.confファイルを保存します。
- 各Helixサーバに対し、これらの手順を繰り返します。
例: https://swarm.company.com/serverA
[Swarmのバージョン情報]ダイアログにトリガトークンが表示されます。トリガートークンが存在しない場合は、Swarmによってトリガトークンが生成されます。
swarm-trigger.confファイルの保管場所については、「WindowsまたはLinuxでホストされるHelixサーバを使用してSwarmトリガを設定する」を参照してください。
以下に例を示します。
# 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"
または、<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を指定する必要があります。
- Swarm用に設定されている実際のSwarmのホスト名、ポート番号、サーバラベルを含めることができるように
swarm-cron-hosts.conf
ファイルを編集します。 - [http[s]://]: httpがデフォルト値として使用されます。
- <swarm-host>: Swarmのホスト名を指定する必要があります。
- [:<port>] 80
- [/<base-url>]: サーバラベルです。指定する必要があります。
swarm-cron-hosts.conf
ファイルを保存します。- Swarmが、複数のHelixサーバインスタンスに接続するように設定されました。
1つのHelixサーバに対して以下の構文の各行を使用します。
[http[s]://]<swarm-host>[:<port>][/<base-url>]
値を指定しなかった場合に適用されるデフォルト設定は以下のとおりです。
例えば、デフォルトのポート値80を使用して設定されたhttps://swarm.company.comのSwarmホストのserverAおよびserverBについて考えます。swarm-cron-hosts.confファイルのエントリは以下のようになります。
https://swarm.company.com/serverA https://swarm.company.com/serverB
Swarmワーカーの構成を確認する方法(または変更する方法)については、「ワーカーの構成」を参照してください。
SwarmTarballを使用したインストールのみ
Swarmをtarballを使用してインストールした場合、またはcronを手動で設定した場合は、helix-swarmというファイルを作成し、Swarmに接続したすべてのHelixサーバインスタンスを追加する必要があります。
- /etc/cron.dで、helix-swarmという名前のファイルを作成します(まだ存在しない場合)。
- 以下のコンテンツを含むよう、helix-swarmファイルを編集します。
- helix-swarmファイルを保存します。
- Swarm用に設定されている実際のSwarmのホスト名、ポート番号、サーバラベルを含めることができるように
swarm-cron-hosts.conf
ファイルを編集します。 - [http[s]://]: httpがデフォルト値として使用されます。
- <swarm-host>: Swarmのホスト名を指定する必要があります。
- :<port> 80
- [/<base-url>]: サーバラベルです。指定する必要があります。
swarm-cron-hosts.conf
ファイルを保存します。- Swarmが、複数のHelixサーバインスタンスに接続するように設定されました。
# # 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
1つのHelixサーバに対して以下の構文の各行を使用します。
[http[s]://]<swarm-host>[:<port>][/<base-url>]
値を指定しなかった場合に適用されるデフォルト設定は以下のとおりです。
例えば、デフォルトのポート値80を使用して設定されたhttps://swarm.company.comのSwarmホストのserverAおよびserverBについて考えます。swarm-cron-hosts.confファイルのエントリは以下のようになります。
https://swarm.company.com/serverA https://swarm.company.com/serverB
Swarmワーカーの構成を確認する方法(または変更する方法)については、「ワーカーの構成」を参照してください。
詳細情報
ユーザ
- グローバルダッシュボードにアクセスするには、Helixサーバインスタンス名なしで、基本的なSwarm URLを入力します。例えば、https://swarm.company.comと入力します。
- グローバルダッシュボードを経由せずに、Swarmの特定のHelixサーバインスタンスにアクセスするには、URLにサーバ名を含めます。例えば、https://swarm.company.com/serverAと入力します。
SwarmでHelixサーバを表示すると、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
に移動すると、serverAがp4設定項目のプライマリ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にリダイレクトされます。これは、serverAがp4設定項目のプライマリHelixサーバであるためです。