Redisサーバ

Swarmでは、Redisを使用してキャッシュを管理する必要があります。デフォルト設定の場合、Swarmは、Swarmマシン上で専用のRedisサーバを使用します。Swarmは、Helixサーバのデータをキャッシュすることにより、Swarmで実行される一般的な検索処理のパフォーマンスを改善し、Helixサーバに対する負荷を軽減します。

Redis構成:

ヒント
  • 必要な場合は、Swarm Redisサーバの代わりに、自分専用のRedisサーバを使用することができます。自分専用のRedisを使用するようにSwarmを設定する手順については、「自分専用のRedisサーバを使用する」を参照してください。
  • Swarmサーバがシャットダウンされている状態で、ユーザとグループの追加、編集、削除をHelixサーバで行うと、SwarmのユーザとグループのRedisキャッシュが同期されていない状態になります。Swarmサーバの再起動後にcurl要求を実行し、RedisキャッシュがHelixサーバと同期されているかどうかを確認してください。Redisキャッシュの確認手順については、「Redisキャッシュを手動で確認する」を参照してください。
  • Swarmを起動すると、Redisキャッシュの確認処理が実行されます。この確認処理の実行中は、Swarmにログインすることはできません。Redisキャッシュの確認処理にかかる時間は、Swarm上のユーザ数、グループ数、プロジェクト数によって異なります。メモリキャッシュを永続化すると、Swarmが起動するまでの時間を短縮することができます。メモリキャッシュを永続化するには、バックグラウンドでの保存機能を無効にして追加保存機能を有効にします(これらの設定は、redis-server.confファイルで行います)。詳しくは、「Redisサーバ構成ファイル」を参照してください。

ヒント

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

SwarmとRedisの接続

SWARM_ROOT/data/config.phpファイルのredisブロックには、Swarm Redisサーバのpasswordnamespacehostportに関する情報が記述されています。

<?php
    // this block should be a peer of 'p4'
    'redis' => array(
        'options' => array(
            'password' => null, // Defaults to null
            'namespace' => 'Swarm',
            'server' => array(
                'host' => 'localhost', // Defaults to 'localhost' or enter your Redis server hostname
                'port' => '7379', // Defaults to '7379 or enter your Redis server port
            ),            
        ),
        'items_batch_size' => 100000,
        'check_integrity' => '03:00', // Defaults to '03:00' Use one of the following two formats: 
                                      // 1) The time of day that the integrity check starts each day. Set in 24 hour format with leading zeros and a : separator
                                      // 2) The number of seconds between each integrity check. Set as a positive integer. Specify '0' to disable the integrity check.
        'population_lock_timeout' => 300, // Timeout for initial cache population. Defaults to 300 seconds. 
    ),

構成可能変数:

  • password: Redisサーバのパスワードを指定します。デフォルト値はnullです。Swarm Redisサーバを使用する場合は、デフォルト値のままにしておく必要があります。
  • namespaceには、Redisキャッシュのキー値で使用されるプレフィックスを指定します。デフォルト値はSwarmです。Swarm Redisサーバを使用する場合は、デフォルト値のままにしておく必要があります。
  • 注意

    1つのRedisサーバに対して複数のSwarmインスタンスが稼働している場合、各Swarmサーバで異なるRedis名前空間を使用する必要があります。これにより、個別のSwarmインスタンスのキャッシュデータを識別できるようになります。名前空間の長さは128文字以内に制限されています。

    1つ以上のSwarmインスタンスが複数のHelixサーバに接続されている場合、Redisの名前空間にはserver labelが含められるため、名前空間の長さが127文字以内に制限されます。詳細については、「複数のHelixサーバインスタンス」を参照してください。

  • host: Redisサーバのホスト名を指定します。デフォルト値はlocalhostです。Swarm Redisサーバを使用する場合は、デフォルト値のままにしておく必要があります。
  • port: Redisサーバのポート番号を指定します。デフォルト値は「7379」です。ネットワーク上の他のRedisサーバとの競合を避けるため、Swarmではポート7379がデフォルトのポートとして使用されます。Swarm Redisサーバを使用する場合は、デフォルト値のままにしておく必要があります。Swarm Redisサーバ以外のサーバについては、ポート6379がデフォルトのポートとして使用されます。
  • items_batch_size: Redisに対するmset呼び出しで許可されるキーと値のペアの最大数を指定します。この最大数を超えた場合は、処理効率を考慮して一括処理されます。デフォルト値は「100000」です。
  • 注意

    この「100000」というデフォルト値は、処理効率とプロジェクトデータの複雑度のバランスを考慮して決定された値です。通常、このデフォルト値を変更する必要はありませんが、変更する必要がある場合は、事前にサポートチームに連絡してください。

  • check_integrity: Swarmが停止している状態でHelixサーバで変更を行った場合や、更新中にエラーが発生した場合などに、RedisキャッシュがHelixサーバに同期されていない状態になる可能性があります。Swarmでは、通常の整合性チェックを実行して、RedisキャッシュとHelixサーバが同期されているかどうかを確認することができます。整合性チェックで同期されていないキャッシュファイルが見つかった場合は、Swarmにより、そのキャッシュ内のデータが自動的に更新されます。
  • check_integrity構成可能変数を使用して、Redisキャッシュの整合性チェックを実行するタイミングを指定することができます。一日のうちの特定の時間を指定することも(24時間形式で指定、1桁の時間の場合は先頭にゼロを付加)、チェック処理の実行間隔を秒数(正の整数)で指定することもできます。整合性チェックを無効にする場合は、値として「0」を設定します。デフォルト値は「03:00」です。

  • population_lock_timeout: キャッシュに初めてデータを取り込む際のタイムアウトを秒単位で指定します。Swarmシステムの規模が大きいために、キャッシュへのデータ取り込みがタイムアウトになった場合は、このタイムアウト時間の値を増やしてください。デフォルト値は「300」秒です。

Redisサーバ構成ファイル

ヒント

Redisサーバの設定を変更する場合は、Laminas Redisアダプタ内で変更を行ってください。Laminas Redisアダプタの詳細については、Laminas Redisアダプタのドキュメントを参照してください。

Swarm用のRedisサーバの構成情報は、/opt/perforce/etc/redis-server.confで定義されています。デフォルト設定は、以下のようになっています。

bind 127.0.0.1
port 7379
supervised auto
save ""
dir /opt/perforce/swarm/redis

デフォルト値:

ヒント
  • 以下の設定は、redis-server.confファイルで定義されているデフォルト設定です。このファイルには、Swarm用のRedis構成に関する詳細情報が記述されています。
  • 多数のユーザ、グループ、プロジェクトが存在するSwarmシステムの場合、メモリキャッシュを永続化すると、起動時間を短縮できる可能性があります。メモリキャッシュを永続化するには、バックグラウンドでの保存機能を無効にして追加保存機能を有効にします。詳細については、redis-server.confファイルのコメントを参照してください。
  • bind 127.0.0.1 - RedisサーバのIPアドレス(ループバックインタフェース)
  • port 7379 - Redisサーバのポート番号
  • supervised autoを指定すると、upstartまたはsystemdの使用状況が自動的に検出され、プロセスでスーパーバイザを使用する準備が整ったことが通知されます。
  • save ""」を指定すると、バックグラウンドでの保存処理が無効になります(推奨)。
  • dir /opt/perforce/swarm/redis - Redisキャッシュデータベースが保存されるディレクトリ

Redisキャッシュを手動で確認する

重要
  • admin 権限を持っているユーザと super 権限を持っているユーザのみが、Redisキャッシュを確認することができます。
  • 多数のユーザ、グループ、プロジェクトが存在するSwarmシステムの場合、キャッシュの検証処理に時間がかかり、パフォーマンスが低下することがあります。

    通常の運用環境では、RedisキャッシュとHelix Coreサーバデータは常に同期された状態になるため、キャッシュを検証する必要はありません。

    多数のユーザ、グループ、プロジェクトがシステム上に存在している場合は、[すべて検証]オプションを使用するのではなく、ユーザキャッシュとグループキャッシュを個別に検証することをお勧めします。

通常の運用環境では、RedisキャッシュとHelix Coreサーバデータは常に同期状態が保たれるため、キャッシュを確認する必要はあります。ただし、Swarmが停止している状態でHelixサーバで変更を行った場合や、更新中にエラーが発生した場合など、特定の状況において、RedisキャッシュがHelixサーバと同期されていない状態になることがあります。

キャッシュに問題がある場合は、[システム情報]ページでキャッシュを手動で確認することができます。

例えば、ユーザキャッシュを確認するには、以下の手順を実行します。

  1. [ユーザID]ドロップダウンメニューに移動します。
  2. [システム情報]を選択します。
  3. [キャッシュ情報]タブをクリックします。
  4. [ユーザの確認]ボタンをクリックします。
  5. ユーザキャッシュの確認が正常に完了したことを通知するメッセージがSwarmによって表示されます。

    確認の結果、キャッシュとHelixサーバが同期されていないことが検出された場合は、Swarmにより、キャッシュ内のデータが自動的に更新されます。

    詳細については、「検証ボタン」を参照してください。

確認処理の進捗状況をチェックする

確認処理の進捗状況を確認するには、以下の手順を実行します。

  1. [キャッシュ情報]タブに移動します。
  2. [ステータスの更新]ボタンをクリックします。