Perforceブローカ
ブローカとは
Perforceブローカ(P4Broker)を使用すれば、実行可能なコマンドを制限すること、または代替(レプリカまたはエッジ)Perforceサーバへ特定のコマンドをリダイレクトすることで、Perforce環境でローカルポリシーを実装することができます。
PerforceブローカはPerforceクライアントアプリケーションとPerforceサーバ(プロキシサーバを含む)の間に介在するサーバプロセスです。例えば、Perforceクライアントアプリケーションをブローカに接続しているプロキシサーバに接続して、さらにブローカをPerforceサーバに接続するという構成が可能です。あるいは、Perforceクライアントアプリケーションはレポート関連コマンドを読み取り専用レプリカサーバにリダイレクトし、その他のコマンドをマスターサーバに送るように構成されたブローカに接続できます。
エンドユーザの側から見るとブローカは透過的であり、ユーザは他のPerforceサーバと接続するときと全く同様にPerforceブローカに接続します。
動作環境
Perforceブローカを使用するには、以下のものが必要です。
-
リリース2007.2以降のPerforceサーバ(SSLを使用するには2012.1以降)
-
リリース2007.2以降のPerforceアプリケーション(SSLを使用するには2012.1以降)
PerforceブローカはPerforceサーバ(P4D)の近くに位置するホストで動作するように設計されています。可能であれば、同一マシン上で実行することが推奨されます。
ブローカをインストールする
P4Brokerをインストールするには、以下のことを行います。
-
p4broker
実行ファイルをPerforce Webサイトからダウンロードします。 -
P4Brokerをホスト上の適当なディレクトリ(
/usr/local/bin
など)にコピーし、バイナリを実行可能な状態にします。chmod +x p4broker
ブローカを実行する
コンフィギュレーションファイルを作成したら(ブローカを構成するを参照)、コマンドラインで次のコマンドを実行して、Perforceブローカを起動します。
p4broker -c config_file
あるいは、ブローカを起動する前にP4BROKEROPTIONS
を設定し、それによって使用するブローカコンフィギュレーションファイル(またはその他のオプション)を指定することができます。
例えば、Unixの場合:
$ export P4BROKEROPTIONS="-c /usr/perforce/broker.conf" $ p4broker -d
Windowsの場合:
> p4 set -s P4BROKEROPTIONS="-c c:\p4broker\broker.conf" > p4broker
Perforceブローカは指定したブローカコンフィギュレーションファイルを読み取ります。また、Unixプラットフォームで-d
オプションを指定すると、Perforceブローカは制御端末から分離し、バックグラウンドで実行されます。
Perforceブローカが自動的に起動するように構成するには、P4BROKEROPTIONS
を設定し、適切なp4brokerコマンドを実行するような起動スクリプトを作成します。
Windowsシステムでは、P4BROKEROPTIONS
を設定してブローカをサービスとして実行することもできます。これを行うには、次の手順に従います。
cd C:\p4broker\ copy p4broker.exe p4brokers.exe copy "C:\Program Files\Perforce\Server\svcinst.exe" svcinst.exe svcinst create -nP4Broker
-e "C:\p4broker\p4brokers.exe" -a p4 set -SP4Broker
P4BROKEROPTIONS="-c C:\p4broker\p4broker.conf" svcinst start -nP4Broker
svcinst.exeは標準的なWindowsプログラムです。P4Broker
が、Windowsサービスに与えられた名前です。詳細については、Perforceナレッジベースの「Installing P4Broker on Windows and Unix systems」を参照してください。
http://answers.perforce.com/articles/KB_Article/Installing-P4Broker-on-Windows-and-Unix-systems
SSLのサポートを有効にする
Perforceブローカとエンドユーザとの間の接続を暗号化するには、ブローカに有効なプライベートキーと証明書のペアがP4SSLDIR
環境変数で指定されたディレクトリに登録されている必要があります。ブローカに対する証明書とキーの生成および管理は、Perforceサーバで行う場合と同様に行われます。詳細については、SSLのサポートを有効にするを参照してください。ユーザのPerforceアプリケーションは、ブローカのフィンガープリントを信頼するように設定されていなければなりません。
PerforceブローカとPerforceサーバとの間の接続を暗号化するには、ブローカがPerforceサーバのフィンガープリントを信頼するように設定されていなければなりません。したがって、p4brokerを実行するユーザ(通常はサービスユーザ)はPerforceサーバのフィンガープリントを認識するP4TRUST
ファイルを(p4 trustを使用して)作成する必要があります。また、そのファイルへのパスを指定するP4TRUST
を設定する必要があります(P4TRUST
)はブローカコンフィギュレーションファイルでは指定できません。
ブローカ情報
p4 infoを実行して、ブローカに接続されているかどうかを知ることができます。ブローカに接続されると、出力にBroker address
とBroker version
が表示されます。
$ p4 info
User name: bruno
Client name: bruno-ws
Client host: bruno.host
Client root: /Users/bruno/Workspaces/depot
Current directory: /Users/bruno/Workspaces/depot/main/jam
Peer address: 192.168.1.40:55138
Client address: 192.168.1.114
Server address: perforce:1667
Server root: /perforce/server/root
Server date: 2014/03/13 15:46:52 -0700 PDT
Server uptime: 92:26:02
Server version: P4D/LINUX26X86_64/2014.1/773873 (2014/01/21)
ServerID: master-1666
Broker address: perforce:1666
Broker version: P4BROKER/LINUX26X86_64/2014.1/782990
Server license: 10000 users (support ends 2016/01/01)
Server license-ip: 192.168.1.40
Case Handling: sensitive
ブローカに接続されると、p4 brokerコマンドを使用してブローカ情報の簡略レポートを表示させることができます。
$ p4 broker Current directory: /Users/bruno/Workspaces/depot/main/jam Client address: 192.168.1.114:65463 Broker address: perforce:1666 Broker version: P4BROKER/LINUX26X86_64/2014.1/782990
ブローカとプロテクション
ブローカユーザのワークステーションのIPアドレスをプロテクションテーブルに対して適用するには、ワークステーションのIPアドレスの先頭にproxy-
という文字列を追加します。
例えば、192.168.10.0/24
というサブネット上のワークステーションでリモート開発を行っている組織を考えてみます。この組織には、ローカル開発を行っている中央オフィスもあり、この中央オフィスは10.0.0.0/8
というサブネット上に存在しています。Perforceサービスは10.0.0.0/8
のサブネット上にあり、ブローカは192.168.10.0/24
のサブネット上にあります。リモートサイトのユーザはremotedev
グループに属しており、時々中央オフィスにアクセスします。各サブネットには、対応するIPv6アドレスのセットも存在しています。
remotedev
グループのメンバーが、リモートサイトでの作業時にはブローカを使用し、ローカルサイトを使用している場合にはブローカを使用しないようにするには、プロテクションテーブルに以下の行を追加します。
list group remotedev 192.168.10.0/24 -//... list group remotedev [2001:db8:16:81::]/48 -//... write group remotedev proxy-192.168.10.0/24 //... write group remotedev proxy-[2001:db8:16:81::]/48 //... list group remotedev proxy-10.0.0.0/8 -//... list group remotedev proxy-[2001:db8:1008::]/32 -//... write group remotedev 10.0.0.0/8 //... write group remotedev proxy-[2001:db8:1008::]/32 //...
1行目では、192.168.10.0/24
のサブネット上のワークステーションからブローカを使用せずPerforceにアクセスしようと試みた場合に、remotedev
グループのすべてのユーザに対してlist
アクセスが拒否されます。2行目では、IPV6のサブネット[2001:db8:16:81::]/48
からアクセスしようとした場合に、1行目と同じ方法でアクセスが拒否されます。
3行目では、192.168.10.0/24
のサブネット上のワークステーションから作業していて、ブローカを使用している場合に、remotedev
グループのすべてのユーザに対してwrite
アクセスが許可されます。リモートサイトにあるワークステーションのユーザは、ブローカを使用しなければなりません。(ブローカ自体がこのサブネット内に存在している必要はありません。例えば、192.168.20.0
に存在していても構いません。)4行目では、IPV6 [2001:db8:16:81::]/48
サブネットからアクセスが試みられた場合に、同様にアクセスが拒否されます。
同様に、5行目と6行目では、中央オフィスのサブネット(10.0.0.0/8
と[2001:db8:1008::]/32
)上のワークステーションからブローカの使用を試みた場合、remotedev
ユーザに対してlist
アクセスが拒否されます。7行目と8行目では、中央オフィスのサブネット上のワークステーションから直接Perforceサーバにアクセスするremotedev
ユーザに対して、書き込みアクセス権が許可されます。remotedev
グループのユーザがローカルサイトにアクセスする場合は、Perforceサーバに直接アクセスする必要があります。
Perforceサービスがプロテクションテーブルのエントリを評価する際に、dm.proxy.protects
構成も評価されます。
dm.proxy.protects
デフォルトを1
に設定すると、媒介(プロキシ、ブローカ、またはエッジサーバ)を経由して接続するすべてのクライアントホストアドレスの先頭に、プレフィックスproxy-
が追加されます。これは、接続が直接でないことを示します。
dm.proxy.protects
を0
に設定すると、proxy-
プレフィックスが削除され、プロテクションエントリを1セット書き込むことができます。これは、直接接続しているクライアントと媒介を経由して接続しているクライアントの両方に適用されます。これは便利ですが、媒介を経由して接続することに問題がある場合、安全性が低下します。この設定を使用する場合は、すべての媒介がリリース2012.1以降になっている必要があります。
P4Brokerオプション
オプション |
意味 |
||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|
コンフィギュレーションファイルを指定します。 |
||||||||||
|
サンプルのコンフィギュレーションファイルを出力し、終了します。 |
||||||||||
|
デーモンとして(バックグラウンドで)実行されます。 |
||||||||||
|
(フォークなしの)シングルスレッドプロセスとして実行されます。 |
||||||||||
|
ヘルプメッセージを出力し、終了します。 |
||||||||||
|
起動メッセージなどを表示せずに実行します。 |
||||||||||
|
ブローカバージョンを表示して、終了します。 |
||||||||||
|
サーバトレースオプションを設定します。 サーバコマンドトレースオプションおよびそれらの意味は、以下の通りです。
コマンドトレーシングでは、出力は特定のログファイルに表示され、日付、時間、ユーザ名、IPアドレス、およびサーバにより処理される各リクエストのコマンドを示します。 |
||||||||||
|
ブローカのSSL資格情報ファイルを生成します。
|
||||||||||
|
ブローカのパブリックキーのフィンガープリントを表示し、終了します。 管理者はこのフィンガープリントをエンドユーザに伝え、ユーザはp4 trustコマンドを使用して(接続先のサーバの)フィンガープリントが正確かどうかを知ることができます。 |
ブローカを構成する
P4Brokerはブローカコンフィギュレーションファイルにより制御されます。ブローカコンフィギュレーションファイルは、次を行うにあたってのルールを含むテキストファイルです。
個々のユーザが使用できるコマンドを指定する
指定されたレプリカサーバにリダイレクトすべきコマンドを定義する
ブローカコンフィギュレーションファイルのサンプルを生成するには、次のコマンドを実行します。
p4broker -C > p4broker.conf
新規作成したp4broker.conf
ファイルを編集して、要件を指定することができます。
ブローカコンフィギュレーションファイルの形式
ブローカコンフィギュレーションファイルには、次の3つの部分が含まれています。
-
グローバル設定: すべてのブローカ操作に適用される設定
-
代替サーバの定義: 特定の状況下で、コマンドがリダイレクトできるレプリカサーバのアドレスと名前
-
コマンドハンドラの仕様: 個々のコマンドが処理される方法を指定します。任意の与えられたコマンドに対してコマンドハンドラが存在しない場合、Perforceブローカがそのコマンドの実行を許可します
ホストを指定する
ブローカの設定には、target
設定の指定が必要であり、この設定では、コマンドの送信先のPerforceサービス、ブローカがPerforceクライアントアプリケーションからのコマンドを待機するアドレスを識別するlisten
アドレス、Perforceサービスに接続されているレプリカやプロキシなどのブローカを識別するオプションのaltserver
代替サーバアドレスが識別されます。
ホストの仕様は、
の形式を使用します。ここで、protocol
:host
:port
protocol
は通信プロトコル(SSLの場合はssl:
から、プレーンテキストではtcp:
から始まる)、host
は接続先マシンのIPアドレスの名前、port
はホストにあるポートの数を示します。
プロトコル |
動作 |
---|---|
|
構成可能変数の
IPv4のリテラルアドレス(例: |
|
|
|
IPv4アドレス/ポートにのみ接続待機または接続します。 |
|
IPv6アドレス/ポートにのみ接続待機または接続します。 |
|
IPv4アドレス/ポートに対して接続待機または接続を試みます。失敗した場合、IPv6への接続または接続待機を試みます。 |
|
IPv6アドレス/ポートに対して接続待機または接続を試みます。失敗した場合、IPv4への接続または接続待機を試みます。 |
|
|
|
IPv4アドレス/ポートにのみ、SSL暗号化を使用して接続待機または接続します。 |
|
IPv6アドレス/ポートにのみ、SSL暗号化を使用して接続待機または接続します。 |
|
IPv4アドレス/ポートに対して接続待機または接続を試みます。失敗した場合、IPv6への接続または接続待機を試みます。接続後は、SSLによる暗号化を必要とします。 |
|
IPv6アドレス/ポートに対して接続待機または接続を試みます。失敗した場合、IPv4への接続または接続待機を試みます。接続後は、SSLによる暗号化を必要とします。 |
host
フィールドには、ホストのホスト名またはそのIPアドレスを入力します。IPv4アドレスおよびIPv6アドレスの両方がサポートされています。listen
設定で、ワイルドカードの「*
」を使用して、すべてのIPアドレスを参照することができます。ただし、CIDR表記を使用していない場合に限られます。
ワイルドカードの「*
」をIPv6アドレスで使用する場合、IPv6アドレス全体を角括弧で囲む必要があります。例えば、[2001:db8:1:2:*]
と[2001:db8:1:2::]/64
は同じ意味になります。CIDR表記を使用してIPv6アドレスを角括弧で囲み、ワイルドカードの「*
」は使用しないことをお勧めします。
グローバル設定
ブローカに対して指定するすべての操作に、次の設定が適用されます。
設定 |
意味 |
例 |
---|---|---|
|
コンフィギュレーションファイルの他の設定で書き換えられない限り、コマンドの送信先となるデフォルトのPerforceサーバ(P4D)。 |
|
|
PerforceブローカがPerforceクライアントアプリケーションからのコマンドを待機するアドレス。 |
|
|
Perforceブローカのホームディレクトリ。ブローカコンフィギュレーションファイルで指定される他のパスは、この位置に相対的である必要があります。 |
|
|
Perforceブローカのログファイルへのパス。 |
|
|
ログに記録するデバッグ出力レベル。 |
|
|
Perforce管理者の名前。特定のエラーメッセージ内に表示されます。 |
|
|
Perforce管理者の問い合わせ先電子メールアドレス。ブローカの構成に問題が発生した場合にユーザに表示されます。 |
|
|
Perforce管理者の電話番号。 |
|
|
使用するリダイレクトモード:
デフォルトのモードは |
|
|
ブローカがターゲットサーバと通信する際に、自身を認証するために用いるオプションのユーザアカウント。
セキュリティ上の問題があるとされているため、ブローカ構成にはパスワードを指定する設定が含まれていません。p4 login -u
ブローカを継続的に動作させるには、 |
|
|
|
|
|
ブローカとサーバ間の通信を圧縮します。WANなどの低速のリンクでは、圧縮によりパフォーマンスを向上させることができます。ブローカおよびサーバが互いに近接している場合(特に同じ物理マシンに配置されている場合)、帯域幅は問題となりません。CPUサイクルを節約するために、圧縮は無効にしてください。 |
|
|
ターゲットサーバのロードを削減するオプションの代替サーバ。代替サーバに割り当てられている
各代替サーバに1つのブローカコンフィギュレーションファイルに、複数の |
|
コマンドハンドラの仕様
コマンドハンドラでは、異なる環境から異なるユーザが異なるコマンドを実行した場合に、ブローカがどう応答するかを指定することができます。ユーザがコマンドを実行する時、Perforceブローカは一致するコマンドハンドラを検索し、最初に見つかった一致を使用します。ユーザのコマンドに一致するコマンドハンドラが存在しない場合、コマンドはターゲットのPerforceサーバに転送され、通常処理されます。
コマンドハンドラの仕様の一般的なシンタックスは、broker.conf
のサンプルに示されています。
command:commandpattern
{ # Conditions for the command to meet (optional) # Note that with the exception of 'flags', these are regex patterns. flags =required-flags
; args =required-argument
s; user =required-user
; workspace =required-client-workspace
; prog =required-client-program
; version =required-version-of-client-program
; # What to do with matching commands (required) action = pass | reject | redirect | filter | respond ; # How to go about it destination =altserver
; # Required for action = redirect execute =/path/to/filter/program
; # Required for action = filter message =rejection-message
; # Required for action = reject }
commandpattern
パラメータには正規表現を使用でき、ワイルドカード「.*
」を含めることができます。例えば、commandpattern
の「user.*
」は「p4
user」コマンドと「p4 users」コマンドの両方に一致します。詳しくは、正規表現の概要を参照してください
以下の表はパラメータについて詳しく説明しています。
パラメータ |
意味 |
---|---|
|
処理されるコマンドのコマンドラインに指定される可能性のあるオプションのリスト。 この機能により、ユーザが指定するオプションに応じて、同じp4コマンドに異なる処理を指定することができます。ここでは1文字のオプションのみが指定できることにご注意ください。複数の文字からなるオプションや、引数をとるオプションは、フィルタプログラムを使用して処理してください。 |
|
処理されるコマンドのコマンドラインで指定される可能性のある引数のリスト。 |
|
コマンドを実行したユーザの名前。 |
|
コマンド実行時に有効だったPerforceクライアントワークスペースの設定。 |
|
ユーザがコマンドを実行したPerforceクライアントアプリケーション。この機能により、アプリケーションごとにコマンドを処理することができます。 |
|
ユーザがコマンドを実行したPerforceアプリケーションのバージョン。 |
|
Perforceブローカが指定のコマンドを処理する方法を定義します。有効な値は、 |
|
リダイレクトされたコマンドについては、コマンドのリダイレクト先のレプリカの名前。リダイレクト先は、
リダイレクト先をキーワード
リダイレクト先をコマンドのリダイレクト先のサーバの |
|
実行するフィルタプログラムへのパス。フィルタプログラムについて詳しくは、フィルタプログラムを参照してください。 |
|
ユーザに送信されるメッセージ。一般的には、コマンドが実行される前に送信されます。上記のアクションのいずれとも併用できます。 |
例えば、次のコマンドハンドラはユーザjoe
がbuildonly
クライアントワークスペースでp4 submitを起動することを禁止します。
command: submit { user = joe; workspace = buildonly; action = reject; message = "Submit failed: Please do not submit from this workspace." }
正規表現の概要
正規表現、またはregexとは、文字列とのパターン一致に使用される、検索パターンをなす一続きの文字列のことです。以下は、コマンドハンドラの仕様で使用できる正規表現の機能の概要です。
正規表現は、0以上のブランチからなります。ブランチは、|
で区切ります。正規表現は、少なくとも1つのブランチと一致する任意の文字列と一致します。
ブランチは、0以上の連結されるピースからなります。ブランチは、すべてのピースが順番に一致する場合に一致します。つまり、最初のピースの一致の次に、2つ目のピースの一致が続きます。
ピースは、原子、あるいは原子とそれに続く量指定子(*
、+
、または?
)からなります。原子に*
が続くと、原子が0回以上並んだインスタンスに一致します。原子に+
が続くと、原子が1回以上並んだインスタンスに一致します。原子に?
が続くと、原子が0回または1回並んだインスタンスに一致します。
原子は、以下のいずれかからなります。
-
括弧で囲まれた下位の正規表現 - その下位の正規表現に一致
-
範囲(以下を参照)
-
.
- 任意の1文字と一致 -
^
- 文字列の最初に一致 -
$
- 文字列の最後に一致 -
\
に1文字が続いたもの - その文字に一致 -
他に意味を持たない1文字 - その文字に一致
範囲は、角括弧([]
)に囲まれた一続きの文字列であり、通常はそのシーケンスの任意の1文字に一致します。シーケンスが^
で始まる場合、そのシーケンスに含まれない任意の1文字に一致します。シーケンス内の2文字が-
で区切られている場合、この記号は2つの文字間に含まれるすべてのASCII文字の短縮形です(例:[0-9]
は10進数の任意の1文字に一致し、[a-z]
は小文字のアルファベットの任意の1文字に一致します)。シーケンスにリテラル]
を含めるには、それを最初の1文字にします(^
に続けることもできます)。シーケンスにリテラル-
を含めるには、それを最初か最後の1文字にします。
フィルタプログラム
コマンドハンドラのaction
がfilter
である場合、Perforceブローカはexecute
パラメータにより指定されるプログラムを実行し、プログラムによって返されるアクションを実行します。フィルタプログラムを使用すると、ブローカコンフィギュレーションファイルによって提供される機能を超えて規則を実施することができます。
Perforceブローカは、コマンドの詳細を次の形式でプログラムの標準入力に渡すことによって、フィルタプログラムを起動します。
コマンドの詳細 |
定義 |
---|---|
|
ユーザコマンド |
|
ブローカが接続待機しているポート |
|
ターゲットサーバが接続待機しているポート |
|
クライアントアプリケーションプログラム |
|
クライアントアプリケーションプログラムのバージョン |
|
クライアントプロトコルのレベル |
|
APIプロトコルのレベル |
|
中止前にテーブルをロックする最大ロック時間(ミリ秒単位) |
|
コマンドによりスキャンされるデータの最大行数 |
|
結果として返されるデータの最大行数 |
|
クライアントワークスペースの名前 |
|
要求ユーザの名前 |
|
クライアントのIPアドレス |
|
プロキシのIPアドレス(ある場合) |
|
クライアントの作業ディレクトリ |
|
コマンドへの引数の数 |
|
1番目の引数(ある場合) |
|
2番目の引数(ある場合) |
|
クライアントのホスト名 |
|
ブローカの内部バージョンレベル。 |
|
プロキシの内部バージョンレベル(ある場合)。 |
コマンドの引数に印字不能文字が含まれている場合、%記号のあとにその印字不能文字のASCIIコードを表す2桁の16進数を続けたものが、フィルタプログラムに送信されます。例えば、タブ文字は%09
とエンコードされます。
スクリプトがデータを必要としているかどうかにかかわらず、フィルタプログラムは他の処理を実行する前に標準入力(stdin)からこのデータを読ま込まなければなりません。フィルタスクリプトが標準入力からデータを読み込まない場合、「パイプの破損」エラーが発生し、ブローカがユーザのコマンドを拒否する場合があります。
フィルタプログラムは、以下の4つのいずれかの形式でデータを表示し、標準出力(stdout)のブローカに応答しなければなりません。
action: PASS message: a message for the user (optional)
action: REJECT message: a message for the user (required)
action: REDIRECT altserver: (an alternate server name) message: a message for the user (optional)
action: RESPOND message: a message for the user (required)
action: CONTINUE message: a message for the user (required)
Note
action
の値は、大文字と小文字を区別します。
action
キーワードは常に必須であり、ユーザの要求への応答方法をブローカに指示します。使用可能なaction
は、以下のとおりです。
操作 |
定義 |
---|---|
|
ユーザのコマンドを変更せずに実行します。ユーザへの |
|
ユーザのコマンドを拒否し、エラーメッセージを返します。ユーザへの |
|
コマンドを別の(代替)レプリカサーバにリダイレクトします。 |
|
コマンドを実行せずに、情報提供メッセージを返します。ユーザへの |
|
与えられたコマンドに一致する次のコマンドハンドラまで繰り延べます。 複数のハンドラの使用について詳しくは、http://answers.perforce.com/articles/KB/11309を参照してください。 |
フィルタプログラムが、上記4つのメッセージによるもの以外の応答を返した場合、ユーザのコマンドは拒否されます。フィルタスクリプトコードの実行中にエラーが発生したためブローカがユーザのコマンドを拒否した場合、ブローカはエラーメッセージを返します。
代替サーバの定義
ターゲットサーバの負荷を軽減させるために、Perforceブローカがユーザの要求を代替サーバにリダイレクトする場合があります。これらの代替サーバは、対象のターゲットサーバに接続されているレプリカ(またはブローカ、プロキシ)である必要があります。
レプリカサーバのセットアップと構成について詳しくは、“Perforceの複製機能”を参照してください。ブローカはメタデータ専用のレプリカと、メタデータとバージョンファイルの両方にアクセス可能なレプリカの両方で動作します。
ブローカコンフィギュレーションファイルで定義可能な代替レプリカサーバの数は制限されていません。
代替サーバの指定に用いるシンタックスは、以下のとおりです。
altserver
name
{ target= [protocol
:]host
:port
}
代替サーバに割り当てられた名前はコマンドハンドラの仕様で使用されます。詳しくは、コマンドハンドラの仕様を参照してください。
集中認証サーバで動作するように代替サーバを構成する
代替サーバでは、ユーザはコマンドの実行時に自身を認証することが要求されます。このため、Perforceブローカは集中認証サーバ(P4AUTH
)およびバージョン2007.2以降のPerforceサーバと共に使用する必要があります。集中認証サーバのセットアップに関する詳細については、集中認証サーバとチェンジリストサーバを構成するを参照してください。
集中認証サーバと共に使用すれば、1つのp4 loginリクエストでPerforceブローカの構成におけるすべてのサーバのユーザに対して有効なチケットを作成できるため、すべてのユーザが一度にログインできます。Perforceブローカは、ターゲットサーバによって与えられたチケットが、すべての代替サーバに対して有効であると見なします。
ブローカコンフィギュレーションファイルのターゲットサーバが集中認証サーバである場合、target
パラメータに割り当てられた値が代替サーバマシンのP4AUTH
設定と正確に一致する必要があります。同様にブローカコンフィギュレーションファイルに定義されている代替サーバが集中認証サーバとして使用されている場合、代替サーバのtarget
パラメータに割り当てられている値が他のサーバマシンのP4AUTH
の設定に一致する必要があります。
ブローカをロードバランシングルータとして使用する
ここまでのセクションでは、ブローカを使用して特定のコマンドを特定のサーバに転送する方法を説明しました。ブローカをロードバランシングルータとして動作するように構成することもできます。ブローカをルータとして動作するように構成を行う場合、Perforceはdb.routing
テーブルを作成します。このテーブルはルータによって処理され、入力されたコマンドをどのサーバにルーティングするべきかを決定するのに使用されます。(db.routing
テーブルは、クライアントおよびユーザの、それぞれのサーバへのマッピングを示します。db.routing
テーブルをリセットするには、db.routing
ファイルを削除します。)
このセクションでは、ブローカをルータとして動作するように構成する方法について説明します。また、ルーティングポリシーおよび動作についても説明します。
ブローカをルータとして構成する
ブローカをルータとして構成するには、ブローカ構成の最上位階層にrouter
ステートメントを追加します。ブローカルータのターゲットサーバは、コミットサーバまたはマスターサーバとしてください。
target = commitserv.example.com:1666; listen = 1667; directory = /p4/broker; logfile = broker.log; debug-level = server=1; admin-name = "Perforce Admins"; admin-phone = 999/911; admin-email = perforce-admins@example.com; router;
次に、ブローカルータのターゲットサーバとなるコミットサーバ(またはディポマスターのワークスペースサーバ)の特定のエッジサーバにaltserver
ステートメントを含めます。
altserver: edgeserv1 { target = edgeserve1.example.com:1669; }
ブローカを使用してコミットエッジアーキテクチャでメッセージをルーティングしている場合、既存のエッジサーバをすべて代替サーバとしてリストする必要があります。
ルーティングポリシーと動作
コマンドがブローカに届くと、ブローカはdb.routing
テーブルを参照し、コマンドのルーティング先を決定します。ルーティングロジックは、ユーザをすでにクライアントのあるサーバに結びつけようとします。P4コマンドラインでルーティングの選択を変更するには、以下の引数を使用して当該のコマンドのルーティングをオーバーライドします。
-Zroute=serverID
クライアントおよびユーザが既存のエッジサーバにバインドされていない場合、ルーティングロジックは、ランダムに選択したデフォルトの接続先サーバを使用します。つまり、特定の送信先が与えられていない場合、リクエストはランダムに選択された既存の代替サーバにルーティングされます。
-
リクエストをコミットサーバにルーティングするには、次のように接続先フォームを使用します。
target = commitserv.example.com:1666; listen = 1667; directory = /p4/broker; logfile = broker.log; debug-level = server=1; admin-name = "Perforce Admins"; admin-phone = 999/911; admin-email = perforce-admins@example.com; router; destination target;
-
新規ユーザを既存のエッジサーバではなく新規のエッジサーバにバインドするには、次のように接続先フォームを使用します。
target = commitserv.example.com:1666; listen = 1667; directory = /p4/broker; logfile = broker.log; debug-level = server=1; admin-name = "Perforce Admins"; admin-phone = 999/911; admin-email = perforce-admins@example.com; router; destination "myNewEdge";
-
コマンドを強制的にコミットサーバにルーティングするには、次の例のように
action = redirect
ルールをdestination target
ステートメントと一緒に使用します。command:
regex pattern
{ action=redirect; destination target; }
Note
クライアントを別のワークスペースやエッジサーバに移動する場合、db.routingファイルを削除する必要があります。