Amazon Web Services ブログ
Perforce Helix Core を AWS 上に構築する (Part3)
イントロダクション
3回にわたるAWSでのPerforce構築シリーズもこれで最後になりました。
Part1ではAWS 上で Perforce Helix Core を構築することの利点と技術的ポイントを俯瞰しました。
前回のPart2では AWS CloudFormation を用いてPerforceサーバーを構築する方法を解説しました。
今回のPart3では、Part2の手順7、CloudFormationの設定において「Enable Replica」をYesにしてReplica Serverの構築を有効にした場合のReplica ServerのSetup手順を紹介します。
Part2の手順で、Master Serverのみの構築を希望した場合は、こちらの手順は必要ありません。
もちろん、もう一度前回の記事の手順を最初からやり直して、Replica構築を有効にして、本記事の手順を実行していただくこともできます。
さて、実際の Replica server の構築手順ですが、これはAWS特有というわけではなく、Perforceの通常の構築手順に従って手動でコマンドを実行して行くというものになります。
それでは実際に手順を見ていきましょう!
事前準備
- こちらのPart2の手順を実行していることが前提になります。実行されていない方はまずは前回の記事の手順を実行し、その際に必ず「手順7」の「Enable Replica」をYesにして有効にします。
- こちらを参考にして東京リージョンで任意の名前のS3バケットを用意しておいてください。S3バケットの名前は全世界で一意の名前にする必要があります。
- 例えば次のようなS3バケットの名称にすると他のバケット名との衝突を避けることができます。
- (例) perforce-test-[自分の名前]-[日付] など
- 例えば次のようなS3バケットの名称にすると他のバケット名との衝突を避けることができます。
Replica Serverをセットアップする
Replicaの動作を定義するには、Perforceのコマンドである“p4 configure set”コマンドを使用して、Master serverのdb.configファイルに構成情報を入力する必要があります。Replicaを作るにはまず最初にMaster serverを設定します。Master serverの設定が、後でReplica serverに複製されます。
Mater Server側で設定を行う
- まずは、Master Serverにsshログインします。下記では適宜、自分のssh keyとEIPアドレスに置き換えてください。
- 前回Part2でp4adminユーザーをサーバー側に作成していない場合は作成します。作成済みの場合はスキップして次に進みます。下記のコマンドを実行するとviが起動しますので内容を確認して、「:wq」をタイプして保存します。
- 下記のコマンドを実行してReplicaサーバの設定を記述します。Replica Serverには「p4d-ha-awsnva」という固有のServer IDを付けます。なお、Master ServerのServer IDは、「master.1」です(すでに設定済み)。
- 実行するとviが開きますので、「Services:」と「Description:」を下記のように設定して、保存します。
- 下記のコマンドを実行して、出力されるジャーナルファイルのprefixがp4_1になるように設定します。
- 下記のコマンドを実行してReplica serverとしてp4d-ha-awsnvaという名前のサーバを設定し、同期先のMaster serverとして10.0.0.63:1666を設定します。この設定によりReplicaはMasterからメタデータとバージョンファイルを取得して同期します。
- Replicaの複製プロセスを作成します。以下に示す5つのstartup.nコマンドを構成します(スペースで区切られた複数の値を受け渡す場合は、その値のセット全体をダブルクォーテーションで囲む必要があります)。以下の起動プロセスはジャーナルデータやアーカイブデータを1秒間隔でポーリングするようにp4 pullが設定されます。
- startup.2からstartup.5までは、同一のコマンドを実行するのでループで実行させます。
- 下記のコマンドを実行して構成可能変数のdb.replication(メタデータへのアクセス)とlbr.replication(ディポファイルへのアクセス)を読み取り専用に設定します。
- ReplicaがMasterへ接続しに行く際のサーバ間通信の認証を設定します。認証にはサービスユーザーという特殊なユーザーが使われますので、接続を許可するサービスユーザー名「svc_replica」を設定します。
- ここでは下記のコマンドを実行して、実際のサービスユーザー「svc_replica」を作成します。
- viが開いて下記のように表示されているのを確認して、「:wq」をタイプして保存します。
- サービスユーザーのパスワードを設定します。パスワードは自分が覚えやすい任意のものでいいですが、こちらは後ほどの手順で使いますので、しっかりと覚えておいてください。
- ServiceUsersというユーザーグループを設定します。
- viが起動しますので、下記のように「Timeout:」と「Users:」の設定値を変更します。「:wq」をタイプして保存します。
- p4 protectコマンドを実行することでサービスユーザにsuper権限を付与します。
- viが起動しますので、下記のようにProtections:の最後の行に「super group ServiceUsers * //…」という設定を一行追加します。追加したら「:wq」をタイプして保存します。
- 下記のコマンドを実行してMaster serverでチェックポイントを作成します。そのチェックポイントをReplicaに復元することにより、Replica serverを構築します。
- 下記を実行してチェックポイントとジャーナルファイルを書き出します。
- 下記のように現在までのチェックポイントが「p4_1.ckp.1.gz」という名前で書き出されているのがわかります。これをReplica Server側にコピーして適用し、Replicaをスタートさせればレプリケーションが開始されます。
- 今回作成したS3バケットへ一旦checkpoint fileをコピーして保存しておきます。下記のコマンド内の<YOUR BUCKET>の部分を「事前準備」の項目で作成した自分のバケット名(perforce-test-[自分の名前]-[日付]など)に置き換えてください。
- 同様にMasterにあるdepotのデータもS3バケットにコピーして一旦保存しておきます。
- ここまででMaster Server側で行う作業は終了です。次にReplica Server側で設定を行います。
Replica Server側で設定を行う
- Replica Serverで設定を行いますので、Replica Serverにsshログインします。下記では適宜、自分のssh keyとEIPアドレスに置き換えてください。Replica ServerのIPアドレスは、CloudFormationスタックの「出力」タブの「PerforceReplicaEIP」で確認できます。
- Master Serverと同じようにサーバーの接続先を環境変数として設定しておきます。
- 今度は先ほどS3に保存したcheckpoint fileとdepotをReplica Server側にコピーします。下記のコマンド内の<YOUR BUCKET>の部分を「事前準備」の項目で作成した自分のバケット名(perforce-test-[自分の名前]-[日付]など)に置き換えてください。
- コピーしてきたデータからMasterの現在の設定をReplicaに反映しますので、一旦Replicaのp4d processを終了します。
- 現在Replica側に残っているdatabaseファイルを全て消去します。
- Replica側にcheckpoint fileを適用してdatabaseを復元します。
- 下記のスクリプトを実行します。
- 先ほど設定したReplicaのサービスユーザーとしてMasterに接続しに行きます。この際に使用するpasswordは先ほど「Mater Server側で設定を行う」の手順11で自分の設定した任意のパスワードとなります。
- 設定が反映されたのでReplicaとしてサーバーを起動させます。
- サーバが起動したら「p4 info」コマンドを実行すると、「Server services: replica」「Replica of: 10.0.0.63:1666」と表示されており、Replicaとして起動していることが確認できます。
- Masterのデータと定期的に同期するためのp4 pullコマンドのプロセスが動いているかどうかを確認するためには下記のコマンドを実行します。Master側のp4 configureで設定した、5つの同期プロセスが稼働していれば正常にMasterとReplicaが同期されています。(もし「You don’t have permission for this operation.」というエラーが出る場合は、一度ログアウトして、もう一度sshでログインしてから実行してみてください。)
- 下記のコマンドを実行してReplicationのステータスを確認します。[Current replica journal state]が[Current master journal state]と同一のポジションを指していれば、最新の状態に同期されています。SequenceがMasterとずれていて、Replicaの方が遅れている場合には、少し待ってからもう一度コマンドを実行して確認します。
- Master serverのバージョンファイルをReplica serverにコピーすると、オペレーティングシステムによってそれらのファイルが転送されます。この転送プロセス中にデータの破損が発生していないかどうかを確認するには、Replica server上で以下のようにp4 verifyコマンドを実行します。
- これでReplica serverの構築手順は終了です。お疲れ様でした。
Replicaへのファイルの複製をテストする
ここでは、Master serverで新規に作成したファイルが、Replica側に複製されているかテストしてみます。
- Master serverにSSHでログインします。下記では適宜、自分のssh keyとEIPアドレスに置き換えてください。
- 記事Part2のコミットテストで作成したrepositoryに移動して、新規にtest2.configというテスト用のファイルを作成します。
- 下記のコマンドで、作成したファイルをチェンジリストに追加します。
- 下記のコマンドでディポに変更をsubmitします。
- コマンドを実行するとviが開くので「Description:」の部分に任意の変更理由を記述します。
- 次に、Replica serverにSSHでログインします。下記では適宜、自分のssh keyとEIPアドレスに置き換えてください。
- Replicaの同期状態を確認します。 先ほどよりもSequenceの番号が進んでいることが確認できます。
- p4 printコマンドを実行して、Replica側に複製されたファイルとその内容を確認してみます。先ほど追加したファイルの内容「test2」がきちんと表示されています。
- ローカルに該当ファイルを保存したい場合は、下記のコマンドを実行します。
まとめ
3回のシリーズに渡ってPerforceをAWSに構築する方法を紹介してきました。みなさん、いかがだったでしょうか?
実際の本番環境にサーバを構築する際は、これ以外にPerforceのライセンスの設定が必要となります(5⼈のユーザと20個のワークスペースまでの環境ならライセンスがなくても利用できます)。
また、セキュリティを考慮するとSSLの設定が必要だったり、今回のようにインターネットアクセスを許容せず、VPC内のPrivate Subnetにサーバーを構築して実際のアクセスはVPNを介して通信を閉域にするといった工夫が必要でしょう。
今回はご紹介しきれなかった部分は、下記の参考資料をご参照いただければと思います。
AWS上にPerforceを構築する利点と手順を理解してただけたら、まずはお試しで動かしていただければ幸いです。
参考資料
- レプリカを作成する
- ライセンスの追加と更新
- Perforceライセンス情報
- Perforceサービスに接続待ちするポートを指定する (SSLでの接続について)
- Perforceサーバへの接続を暗号化する
- PerforceをAWSに構築するAWS CloudFormation templateのソースコード
著者について
保里 善太 (Zenta Hori)
AWS 技術統括本部 ソリューションアーキテクト
半導体関連精密機器の組み込み制御エンジニアとして研究開発のキャリアをスタートさせ、モバイルゲーム業界での開発経験、FinTech 業界でのエンジニア経験、スタートアップでの CTO 経験を生かして日々技術支援を必要としている AWS ユーザー様をサポートしています。現在はもっぱら機械学習を利用したセキュリティリスクの自動検知や機械学習をゲーム開発にどう活用するかに興味関心があり、日々研究や学習に励んでいます。