Redis構成
Swarmでは、Redisを使用してキャッシュを管理する必要があります。デフォルト設定の場合、Swarmは、Swarmマシン上で専用のRedisサーバを使用します。 Swarmは、Helixサーバのデータをキャッシュすることにより、Swarmで実行される一般的な検索処理のパフォーマンスを改善し、Helixサーバに対する負荷を軽減します。 Redisは、Swarm Tarballに付属しています。
このセクションでは、Swarmマシン上でSwarm Redisサービスを設定する方法について説明します。 Swarm Redisサーバを使用する場合は、以下の構成ファイルのデフォルト値を変更しないでください。
必要な場合は、Swarm Redisサーバの代わりに、自分専用のRedisサーバを使用することができます。 自分専用のRedisを使用するようにSwarmを設定する手順については、「自分専用のRedisサーバを使用する」を参照してください。
SwarmのSWARM_ROOT/p4-bin/bin.linux26x86_64/ディレクトリには、以下に示す2つのRedisバイナリが保管されています。
- redis-server-swarm
- redis-cli-swarm
- Redisキャッシュデータベースを設定し、/opt/perforce/etc/ディレクトリ内のredis-server.confファイルを開いて、以下の情報を入力します。
- 以下の設定は、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キャッシュデータベースが保存されるディレクトリ
- Swarmを開始する前にRedisキャッシュデータベースを実行する必要があります。そのため、Redisキャッシュデータベースを、システムの起動時に自動的に開始されるサービスとして設定することをお勧めします。
- このサンプルスクリプトにより、RedisサービスがPerforceユーザとして稼働します。
- このサンプルスクリプトでは、/opt/perforce/etc/redis-server.confディレクトリ内の構成ファイルが使用されます。
- このサンプルスクリプトは、/opt/perforce/swarm/p4-bin/bin.linux26x86_64/にデータベースサーバがインストールされていることを前提としています。
SWARM_ROOT/data/config.php
ファイルが存在しない場合は、新しく作成します。SWARM_ROOT/data/config.php
ファイルのredisブロックには、Swarm Redisサーバのpassword、namespace、host、portに関する情報が記述されています。- password: Redisサーバのパスワード。 デフォルト値はnullです。Swarm Redisサーバを使用する場合は、デフォルト値のままにしておく必要があります。
- namespaceには、Redisキャッシュのキー値で使用されるプレフィックスを指定します。 デフォルト値はSwarmです。Swarm Redisサーバを使用する場合は、デフォルト値のままにしておく必要があります。
- host: Redisサーバのホスト名。 デフォルト値はlocalhostです。Swarm Redisサーバを使用する場合は、デフォルト値のままにしておく必要があります。
- port: Redisサーバのポート番号。 デフォルト値は「7379」です。 ネットワーク上の他のRedisサーバとの競合を避けるため、Swarmではポート7379がデフォルトのポートとして使用されます。 Swarm Redisサーバを使用する場合は、デフォルト値のままにしておく必要があります。 Swarm Redisサーバ以外のサーバについては、ポート6379がデフォルトのポートとして使用されます。
- items_batch_sizeには、Redisに対するmset呼び出しで許可されるキーと値のペアの最大数を指定します。 この最大数を超えた場合は、処理効率を考慮して一括処理されます。 デフォルト値は「100000」です。
- check_integrity: Swarmが停止している状態でHelixサーバで変更を行った場合や、更新中にエラーが発生した場合など、特定の状況において、RedisキャッシュがHelixサーバと同期されていない状態になることがあります。 Swarmでは、通常の整合性チェックを実行して、RedisキャッシュとHelixサーバが同期されているかどうかを確認することができます。 整合性チェックで同期されていないキャッシュファイルが見つかった場合は、Swarmにより、そのキャッシュ内のデータが自動的に更新されます。
- population_lock_timeout: キャッシュに初めてデータを取り込む際のタイムアウトを秒単位で指定します。 Swarmシステムの規模が大きいために、キャッシュへのデータ取り込みがタイムアウトになった場合は、このタイムアウト時間の値を増やしてください。 デフォルト値は300秒です。
bind 127.0.0.1
port 7379
supervised auto
save ""
dir /opt/perforce/swarm/redis
デフォルト値:
Redisサーバの設定を変更する場合は、Laminas Redisアダプタ内で変更を行ってください。 Laminas Redisアダプタの詳細については、Laminas Redisアダプタのドキュメントを参照してください。
以下に示すサンプルスクリプトの動作は以下のようになります。
Redisをサービスとして設定するには、以下に示すいずれかのサンプルスクリプトを使用します。
redis-server-swarm.service
[Unit] Description=Redis Server for Swarm After=network.target [Service] ExecStart=/opt/perforce/swarm/p4-bin/bin.linux26x86_64/redis-server-swarm /opt/perforce/etc/redis-server.conf ExecStop=/opt/perforce/swarm/p4-bin/bin.linux26x86_64/redis-cli-swarm shutdown Restart=always RestartSec=10 StandardOutput=syslog StandardError=syslog SyslogIndentifier=redis User=perforce Group=perforce [Install] WantedBy=multi-user.target
redis-server-swarm.initd
#!/bin/sh # # redis-server-swarm init file for starting up the redis daemon used by Helix Swarm # # chkconfig: - 20 80 # description: Starts and stops the redis daemon. # ### BEGIN INIT INFO # Provides: redis-server-swarm # Required-Start: $local_fs $remote_fs $network # Required-Stop: $local_fs $remote_fs $network # Short-Description: start and stop Redis server # Description: A persistent key-value database used by Helix Swarm. Should not clash with # any Redis server used by other products. ### END INIT INFO # Source function library. . /etc/rc.d/init.d/functions name="redis-server-swarm" exec="/opt/perforce/swarm/p4-bin/bin.linux26x86_64/$name" shut="/opt/perforce/swarm/p4-bin/bin.linux26x86_64/redis-cli-swarm" RUNDIR="/opt/perforce/swarm/redis" pidfile="$RUNDIR/redis.pid" REDIS_CONFIG="/opt/perforce/etc/redis-server.conf" PORT=`grep port $REDIS_CONFIG | cut -d " " -f 2` lockfile="$RUNDIR/redis.lock" if [ ! -d "$RUNDIR" ] then mkdir -p "$RUNDIR" chown perforce:perforce "$RUNDIR" chmod 750 "$RUNDIR" fi start() { [ -f $REDIS_CONFIG ] || exit 6 [ -x $exec ] || exit 5 echo -n $"Starting $name: " daemon --user perforce "$exec $REDIS_CONFIG --daemonize yes --pidfile $pidfile" retval=$? echo [ $retval -eq 0 ] && touch $lockfile return $retval } stop() { echo -n $"Stopping $name: " [ -x $shut ] && $shut -p $PORT shutdown retval=$? if [ -f $pidfile ] then # shutdown haven't work, try old way killproc -p $pidfile $name retval=$? else success "$name shutdown" fi echo [ $retval -eq 0 ] && rm -f $lockfile return $retval } restart() { stop start } rh_status() { status -p $pidfile $name } rh_status_q() { rh_status >/dev/null 2>&1 } case "$1" in start) rh_status_q && exit 0 $1 ;; stop) echo stop rh_status_q || exit 0 $1 ;; restart) $1 ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 restart ;; reload|force-reload) exit 3 ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart}" exit 2 esac exit $?
<?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.
),
構成可能変数:
1つのRedisサーバに対して複数のSwarmインスタンスが稼働している場合、各Swarmサーバで異なるRedis名前空間を使用する必要があります。 これにより、個別のSwarmインスタンスのキャッシュデータを識別できるようになります。 名前空間の長さは128文字以内に制限されています。
1つ以上のSwarmインスタンスが複数のHelixサーバに接続されている場合、Redisの名前空間にはserver labelが含められるため、名前空間の長さが127文字以内に制限されます。詳細については、「複数のHelixサーバインスタンス」を参照してください。
この「100000」というデフォルト値は、処理効率とプロジェクトデータの複雑度のバランスを考慮して決定された値です。 通常、このデフォルト値を変更する必要はありませんが、変更する必要がある場合は、事前にサポートチームに連絡してください。
check_integrity構成可能変数を使用して、Redisキャッシュの整合性チェックを実行するタイミングを指定することができます。 一日のうちの特定の時間を指定することも(24時間形式で指定、1桁の時間の場合は先頭にゼロを付加)、チェック処理の実行間隔を秒数(正の整数)で指定することもできます。 整合性チェックを無効にする場合は、値として「0」を設定します。 デフォルト値は「03:00」です。
Apacheを構成します。詳細については、「Apache構成」を参照してください。