share facebook facebook twitter menu hatena pocket slack

AWSで実現するPhoton Loadbalancer(Master)の冗長化

岸上 健太郎

WRITTEN BY 岸上 健太郎

俺です。Photon人気ですね(俺調べ)

ちょっと最近Excel方眼紙er以来のWindowsに再入信してまして、
Photon Serverを弄くってるのですが、
Photon Loadbalancerの冗長化ってできないんじゃないかなあと思ってたら

Route53 DNS Failoverで実現できるんじゃねとアドバイス頂いたので、試してみました。

Photon GameServerはコンフィグファイルにPhoton Loadbalancer(Master)のIP(内部IPなり)やDNS名を指定しなければいけませんが、
EC2のPublic DNS名を指定するとVPC内からは内部IPでPhoton Loadbalancer(Master)に接続され、
インターネット(クライアント)からはEIPまたはPublic IPでPhoton Loadbalancer(Master)に接続されるので最高というやつです。

Route53 setting

Hosted Zones

endpoint namerecord typevaluerouting policyfailover record typehealth check associate
photon-lb.oredayooreda.oreda.beCNAMEec2-XX-XX-XX-XX.ap-northeast-1.compute.amazonaws.comFailoverPrimaryphoton lb healthcheck
photon-lb.oredayooreda.oreda.beCNAMEec2-YY-YY-YY-YY.ap-northeast-1.compute.amazonaws.comFailoverSecondaryなし

Health Checks

health check先のホストにはPhoton Loadbalancer(Master)用EC2のPublic DNS名を指定します。
ヘルスチェックタイムアウトは最小10秒にすることができます。

health check namewhat to monitorSpecify endpoint byProtocolDomain namePortRequest intervalFailure threshold
photon lb healthcheckendpointDomain nametcpec2-XX-XX -XX-XX.ap-north east-1.compute. amazonaws.com4530standard (30sec)1

EC2まわり

EC2
EC2hostPublic DNS名EIPPrivate IP
masterWindows 2012R2ec2-XX-XX-XX-XX.ap-northeast-1.compute.amazonaws.com52.52.52.52172.16.0.10
master(standby)Windows 2012R2ec2-YY-YY-YY-YY.ap-northeast-1.compute.amazonaws.com52.52.52.53172.19.248
Photon

v4を利用。GMOさんが提供してくれてますよ!ライセンスは買いましょう。

Photon Loadbalancer(Master)

  • Active/Standbyとくにやることなし
  • Loadbalancer(Master)として接続受付するようにセットアップして、Photonサービスを起動しておけばOK

Photon GameServer

Photon.LoadBalancing.dll.config
  • %PHOTON_HOME%deployLoadbalancingGameServerbinPhoton.LoadBalancing.dll.config

145行目辺りのMaster Server用エンドポイントに、DNS Failoverを設定してあるDNSレコード名を指定し、Photonサービスを起動します。
Loadbalancer(Master)とGameServerのEC2が同一VPCで稼働していれば、内部IPで接続されます。最高

      
      
      
        photon-lb.oredayooreda.oreda.be
      

Route53 DNS Failoverを実行する

Failover発動前

DNS名とIPのチェック
  • インターネット越しのクライアントから名前解決を実行
orenomac$ dig photon-lb.oredayooreda.oreda.be +short
ec2-XX-XX-XX-XX.ap-northeast-1.compute.amazonaws.com.
52.52.52.52
  • VPC内部のEC2から名前解決を実行
C:UsersAdministrator>nslookup photon-lb.oredayooreda.oreda.be.
サーバー:  ip-172-16-0-2.ap-northeast-1.compute.internal
Address:  172.16.0.2

権限のない回答:
名前:    ec2-XX-XX-XX-XX.ap-northeast-1.compute.amazonaws.com.
Address:  172.16.19.10
Aliases:  photon-lb.oredayooreda.oreda.be

DNS Failover発動

Loadbalancer(Master) Active系のPhoton ServiceなりEC2そのものを停止して、
Route53 Health Checkをfailさせます。

インターネット越しの名前解決
orenomac$ dig photon-lb.oredayooreda.oreda.be
ec2-YY-YY-YY-YY.ap-northeast-1.compute.amazonaws.com.
52.52.52.53
VPC内のEC2による名前解決

こちらもMaster(Standby)のPrivateIPに変わっています

C:UsersAdministrator>nslookup photon-lb.oredayooreda.oreda.be.
サーバー:  ip-172-16-0-2.ap-northeast-1.compute.internal
Address:  172.16.0.2

権限のない回答:
名前:    ec2-YY-YY-YY-YY.ap-northeast-1.compute.amazonaws.com
Address:  172.16.19.248
Aliases:  photon-lb.oredayooreda.oreda.be
Photon Serverのログ

見事にGameServerがStandby側のPhoton Loadbalancer(Master)へ再接続されてます。
HAProxyと違ってエンドポイントにDNS名称を指定しても、IPアドレスをキャッシュせずに
新しいIPで再接続してくれるので、何もしなくて良さそうです。

5dc58d29-ba08-6735-0b70-02a6c68c8b41

フェイルバック

今のところ安全にオンラインで戻す方法は見つけられてません。

DNS Failoverが発動した後、停止したMaster(Active)を正常な状態に戻して、DNSレコードが元の状態に戻っても、
GameServerは再接続しません。フェイルオーバーした方にのみ接続されているのをPhotonのログから確認しました。

とすると、DNSレコードが元に戻ると、Photon Loadbalancer(Master)に接続されているGameServerは存在しないため、
クライアントがGameServerに接続できなくなるので、よろしくないですね。

GameServerが復旧したLoadBalancerへ再接続させるには以下の手段を用いることになります
どちらもクライアントは一時的にゲームへ接続できなくなりますが、(1)であればPhoton GameServerが再接続されるの間、
新規受付が行われないだけになるはずなので、影響は小さそうです。

(1) GameServerが接続中のFailover先であるPhoton Loadbalancer(Master)を停止する
(2) GameServerを再起動する

Next step

とりあえずPhoton Loadbalancerの冗長化はできるようになりましたが、
ゲームサービスの提供を継続できるかは、クライアント・アプリケーションの挙動を見ながらの判断が必要かなとおもいますー。
ほんとにうまくいくのかなーと。

=> ちょっと試した結果. マッチメイキングをPhoton側ではなく、別途REST APIを立てて運用する仕組みであればこの手法はうまくいくかなと

↓な感じの機能をつかわなければOK

https://doc.photonengine.com/en/realtime/current/reference/matchmaking-and-lobby

special thanks

この実装案のヒントというか答えというか議論できた y13i & SatoHiroyuki thanks

元記事はこちら

AWSで実現するPhoton Loadbalancer(Master)の冗長化

岸上 健太郎

岸上 健太郎

頑張るぞ!

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。