Photon Server LoadBalancing搭建
准备:申请3台Windows虚拟机。
3台虚拟机上都部署上Photon Server.
一、主虚拟机上部署MasterServer。
(1)在第一台虚拟机中,部署的Photon Server目目录下找到Loadbalancing目录,删除GameServer文件夹
(2)修改Master的配置文件。Photon.LoadBalancing.dll.config (在目录Master/bin/中)
(3)修改PhotonServer.config 配置文件。(在目录 bin_Win64/ 中) 删除跟Game相关的配置
<?xml version="1.0" encoding="Windows-1252"?>
<!--
(c) 2015 by Exit Games GmbH, http://www.exitgames.com
Photon server configuration file.
For details see the photon-config.pdf. This file contains two configurations: "LoadBalancing"
Loadbalanced setup for local development: A Master-server and a game-server.
Starts the apps: Game, Master, CounterPublisher
Listens: udp-port 5055, tcp-port: 4530, 843 and 943 --> <Configuration>
<!-- Multiple instances are supported. Each instance has its own node in the config file. --> <LoadBalancing
MaxMessageSize="512000"
MaxQueuedDataPerPeer="512000"
PerPeerMaxReliableDataInTransit="51200"
PerPeerTransmitRateLimitKBSec="256"
PerPeerTransmitRatePeriodMilliseconds="200"
MinimumTimeout="5000"
MaximumTimeout="30000"
DisplayName="LoadBalancing (MyCloud)"> <!-- 0.0.0.0 opens listeners on all available IPs. Machines with multiple IPs should define the correct one here. -->
<!-- Port 5055 is Photon's default for UDP connections. -->
<UDPListeners>
<UDPListener
IPAddress="0.0.0.0"
Port="5055"
OverrideApplication="Master">
</UDPListener>
</UDPListeners> <!-- 0.0.0.0 opens listeners on all available IPs. Machines with multiple IPs should define the correct one here. -->
<TCPListeners>
<!-- TCP listener for Game clients on Master application -->
<TCPListener
IPAddress="0.0.0.0"
Port="4530"
OverrideApplication="Master"
PolicyFile="Policy\assets\socket-policy.xml"
InactivityTimeout="10000"
>
</TCPListener> <!-- DON'T EDIT THIS. TCP listener for GameServers on Master application -->
<TCPListener
IPAddress="0.0.0.0"
Port="4520">
</TCPListener>
</TCPListeners> <!-- Policy request listener for Unity and Flash (port 843) and Silverlight (port 943) -->
<PolicyFileListeners>
<!-- multiple Listeners allowed for different ports -->
<PolicyFileListener
IPAddress="0.0.0.0"
Port="843"
PolicyFile="Policy\assets\socket-policy.xml">
</PolicyFileListener>
<PolicyFileListener
IPAddress="0.0.0.0"
Port="943"
PolicyFile="Policy\assets\socket-policy-silverlight.xml">
</PolicyFileListener>
</PolicyFileListeners> <!-- WebSocket (and Flash-Fallback) compatible listener -->
<WebSocketListeners>
<WebSocketListener
IPAddress="0.0.0.0"
Port="9090"
DisableNagle="true"
InactivityTimeout="10000"
OverrideApplication="Master">
</WebSocketListener> </WebSocketListeners> <!-- Defines the Photon Runtime Assembly to use. -->
<Runtime
Assembly="PhotonHostRuntime, Culture=neutral"
Type="PhotonHostRuntime.PhotonDomainManager"
UnhandledExceptionPolicy="Ignore">
</Runtime> <!-- Defines which applications are loaded on start and which of them is used by default. Make sure the default application is defined. -->
<!-- Application-folders must be located in the same folder as the bin_win32 folders. The BaseDirectory must include a "bin" folder. -->
<Applications Default="Master">
<Application
Name="Master"
BaseDirectory="LoadBalancing\Master"
Assembly="Photon.LoadBalancing"
Type="Photon.LoadBalancing.MasterServer.MasterApplication"
ForceAutoRestart="true"
WatchFiles="dll;config"
ExcludeFiles="log4net.config"
>
</Application> <!-- CounterPublisher Application -->
<Application
Name="CounterPublisher"
BaseDirectory="CounterPublisher"
Assembly="CounterPublisher"
Type="Photon.CounterPublisher.Application"
ForceAutoRestart="true"
WatchFiles="dll;config"
ExcludeFiles="log4net.config">
</Application>
</Applications>
</LoadBalancing> </Configuration>
(4)启动服务。
二、在另外两台虚拟机上部署GameServer服务
(1)在目前中删除Master
(2)修改GameServer/bin/Photon.LoadBalancing.dll.config 配置文件。
先删除MasterServer配置项
修改GameServerSetting项中的 MasterIPAddress 一项。
总体配置
<?xml version="1.0"?> <configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="Photon.LoadBalancing.Common.CommonSettings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
requirePermission="false" />
<section name="Photon.LoadBalancing.GameServer.GameServerSettings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
requirePermission="false" />
<section name="Photon.LoadBalancing.MasterServer.MasterServerSettings"
type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
requirePermission="false" />
<section name="Photon.Common.Authentication.Settings"
type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
requirePermission="false" />
</sectionGroup>
<section name="Photon" type="Photon.SocketServer.Diagnostics.Configuration.PhotonSettings, Photon.SocketServer" />
<section name="PluginSettings" type="Photon.Hive.Configuration.PluginSettings, PhotonHive" />
<section name="WebRpcSettings" type="Photon.Hive.WebRpc.Configuration.WebRpcSettings, PhotonHive" />
<section name="AuthSettings" type="Photon.Common.Authentication.Configuration.Auth.AuthSettings, Photon.Common" />
</configSections>
<applicationSettings> <Photon.LoadBalancing.Common.CommonSettings>
<setting name="NodesFileName" serializeAs="String">
<value>Nodes.txt</value>
</setting>
<setting name="NodesFilePath" serializeAs="String">
<value>..\..\</value>
</setting>
<setting name="EnablePerformanceCounters" serializeAs="String">
<value>True</value>
</setting>
</Photon.LoadBalancing.Common.CommonSettings> <Photon.Common.Authentication.Settings>
<setting name="AuthCacheUpdateInterval" serializeAs="String">
<value>300</value>
</setting> <setting name="AuthTokenKey" serializeAs="String">
<value>76B2814E-2A50-4E29-838A-20411D335FC9</value>
</setting> <setting name="AuthTokenExpiration" serializeAs="String">
<value>10000</value>
</setting> <!-- Custom Authentication Queue Settings -->
<setting name="MaxConcurrentRequests" serializeAs="String">
<value>50</value>
</setting>
<setting name="MaxQueuedRequests" serializeAs="String">
<value>5000</value>
</setting>
<setting name="MaxErrorRequests" serializeAs="String">
<value>10</value>
</setting>
<setting name="MaxTimedOutRequests" serializeAs="String">
<value>10</value>
</setting>
<setting name="HttpRequestTimeoutMS" serializeAs="String">
<value>30000</value>
</setting>
<setting name="ReconnectIntervalS" serializeAs="String">
<value>60</value>
</setting>
<setting name="QueueTimeoutS" serializeAs="String">
<value>20</value>
</setting>
<setting name="MaxBackoffTimeInMiliseconds" serializeAs="String">
<value>10000</value>
</setting>
</Photon.Common.Authentication.Settings> <Photon.LoadBalancing.GameServer.GameServerSettings>
<setting name="AppStatsPublishInterval" serializeAs="String">
<value>1000</value>
</setting>
<!-- GameServer-to-Master connections. -->
<setting name="ConnectReytryInterval" serializeAs="String">
<value>15</value>
</setting>
<setting name="EnableNamedPipe" serializeAs="String">
<value>False</value>
</setting>
<!-- Path for Client-to-Gameserver HTTP connections -->
<setting name="GamingHttpPath" serializeAs="String">
<value>photon/g</value>
</setting>
<!-- Client-to-Gameserver HTTP connections. Needs to match the RHTTPListener in PhotonServer.config -->
<setting name="GamingHttpPort" serializeAs="String">
<value>80</value>
</setting>
<!-- Client-to-Gameserver HTTPS connections. Needs to match the RHTTPListener in PhotonServer.config -->
<setting name="GamingHttpsPort" serializeAs="String">
<value>443</value>
</setting>
<!-- Client-to-Gameserver Secure WebSocket connections. Needs to match the secure WebSocketListener in PhotonServer.config -->
<setting name="GamingSecureWebSocketPort" serializeAs="String">
<value>19091</value>
</setting>
<!-- Client-to-Gameserver TCP connections. Needs to match the TCPListener in PhotonServer.config -->
<setting name="GamingTcpPort" serializeAs="String">
<value>4531</value>
</setting>
<!-- Client-to-Gameserver UDP connections. Needs to match the UDPListener in PhotonServer.config -->
<setting name="GamingUdpPort" serializeAs="String">
<value>5056</value>
</setting>
<!-- Client-to-Gameserver WebSocket connections. Needs to match the WebSocketListener in PhotonServer.config -->
<setting name="GamingWebSocketPort" serializeAs="String">
<value>9091</value>
</setting>
<setting name="HttpQueueMaxErrors" serializeAs="String">
<value>30</value>
</setting>
<setting name="HttpQueueMaxTimeouts" serializeAs="String">
<value>30</value>
</setting>
<setting name="HttpQueueRequestTimeout" serializeAs="String">
<value>30000</value>
</setting>
<setting name="HttpQueueMaxBackoffTime" serializeAs="String">
<value>10000</value>
</setting>
<setting name="HttpQueueMaxQueuedRequests" serializeAs="String">
<value>5000</value>
</setting>
<setting name="HttpQueueQueueTimeout" serializeAs="String">
<value>90000</value>
</setting>
<setting name="HttpQueueReconnectInterval" serializeAs="String">
<value>60000</value>
</setting>
<setting name="HttpQueueMaxConcurrentRequests" serializeAs="String">
<value>1</value>
</setting>
<setting name="LastTouchCheckIntervalSeconds" serializeAs="String">
<value>60</value>
</setting>
<setting name="LastTouchSecondsDisconnect" serializeAs="String">
<value>0</value>
</setting>
<!-- Set to the IP Address of the Photon instance where your Master application is running. -->
<setting name="MasterIPAddress" serializeAs="String">
<value>15.24.15.114</value>
</setting>
<setting name="MaxEmptyRoomTTL" serializeAs="String">
<value>60000</value>
</setting>
<!-- Gameserver-to-Master connections. -->
<setting name="OutgoingMasterServerPeerPort" serializeAs="String">
<value>4520</value>
</setting>
<setting name="PublicIPAddress" serializeAs="String">
<value></value>
</setting>
<setting name="PublicIPAddressIPv6" serializeAs="String">
<value></value>
</setting>
<!-- the hostname for this gameserver. Required for HTTP & websocket connections. Change it to a useful entry, like hostname.mydomain.com, for a production scenario. -->
<setting name="PublicHostName" serializeAs="String">
<!--<value>%COMPUTERNAME%.mydomain.com</value>-->
<value>localhost</value>
</setting> <!-- The domain name for this gameserver. Required for websocket connections and needs to match the certificate for secure websocket / https connections.
For example: mydomain.com -->
<setting name="PublicDomainName" serializeAs="String">
<value />
</setting>
<setting name="RelayPortHttp" serializeAs="String">
<value>0</value>
</setting>
<setting name="RelayPortSecureWebSocket" serializeAs="String">
<value>0</value>
</setting>
<setting name="RelayPortTcp" serializeAs="String">
<value>0</value>
</setting>
<setting name="RelayPortUdp" serializeAs="String">
<value>0</value>
</setting>
<setting name="RelayPortWebSocket" serializeAs="String">
<value>0</value>
</setting>
<setting name="ServerStateFile" serializeAs="String">
<value>ServerState.txt</value>
</setting>
<setting name="WorkloadConfigFile" serializeAs="String">
<value>Workload.config</value>
</setting>
</Photon.LoadBalancing.GameServer.GameServerSettings>
</applicationSettings> <Photon>
<CounterPublisher enabled="True" updateInterval="1">
<Sender
endpoint="udp://255.255.255.255:40001"
protocol="PhotonBinary"
initialDelay="10"
sendInterval="10" />
</CounterPublisher>
</Photon>
<!-- Enable webhooks plugin by setting Enabled to "true" -->
<PluginSettings Enabled="false">
<Plugins>
<Plugin
Name="WebHooksPlugin1.2"
Version=""
AssemblyName="PhotonHive.WebhooksPlugin1.2.dll"
Type="Photon.Hive.Plugin.WebHooks.PluginFactory"
BaseUrl="http://photon-photon-pluginsdk-v1.webscript.io"
IsPersistent="true"
HasErrorInfo="true"
PathClose="GameClose"
PathCreate="GameCreate"
PathEvent="GameEvent"
PathGameProperties="GameProperties"
PathJoin="GameJoin"
PathLeave="GameLeave"
PathLoad="GameCreate" />
</Plugins>
</PluginSettings>
<!-- Enable webRPCs by setting Enabled to "true" -->
<WebRpcSettings Enabled="false">
<BaseUrl Value="http://photon-photon-pluginsdk-v1.webscript.io" />
</WebRpcSettings> <!-- Enable Custom Authentication by setting Enabled to "true" -->
<AuthSettings Enabled="false" ClientAuthenticationAllowAnonymous="true">
<AuthProviders>
<AuthProvider Name="Custom"
AuthenticationType="0"
AuthUrl="http://photon.webscript.io/auth-demo"
secret="customauthsecret" /> <AuthProvider Name="Facebook"
AuthenticationType="2"
AuthUrl=""
secret="Val1"
appid="Val2" />
</AuthProviders>
</AuthSettings> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
</startup>
</configuration>
(3)修改服务器启动配置 /deploy/bin_Win64/PhotonServer.config 。删除跟Master修改配置
<?xml version="1.0" encoding="Windows-1252"?>
<!--
(c) 2015 by Exit Games GmbH, http://www.exitgames.com
Photon server configuration file.
For details see the photon-config.pdf. This file contains two configurations: "LoadBalancing"
Loadbalanced setup for local development: A Master-server and a game-server.
Starts the apps: Game, Master, CounterPublisher
Listens: udp-port 5055, tcp-port: 4530, 843 and 943 --> <Configuration>
<!-- Multiple instances are supported. Each instance has its own node in the config file. --> <LoadBalancing
MaxMessageSize="512000"
MaxQueuedDataPerPeer="512000"
PerPeerMaxReliableDataInTransit="51200"
PerPeerTransmitRateLimitKBSec="256"
PerPeerTransmitRatePeriodMilliseconds="200"
MinimumTimeout="5000"
MaximumTimeout="30000"
DisplayName="GameLoab (MyCloud)"> <!-- 0.0.0.0 opens listeners on all available IPs. Machines with multiple IPs should define the correct one here. -->
<!-- Port 5055 is Photon's default for UDP connections. -->
<UDPListeners>
<UDPListener
IPAddress="0.0.0.0"
Port="5056"
OverrideApplication="Game">
</UDPListener> </UDPListeners> <!-- 0.0.0.0 opens listeners on all available IPs. Machines with multiple IPs should define the correct one here. -->
<TCPListeners>
<!-- TCP listener for Game clients on Master application --> <TCPListener
IPAddress="0.0.0.0"
Port="4531"
OverrideApplication="Game"
PolicyFile="Policy\assets\socket-policy.xml"
InactivityTimeout="10000">
</TCPListener> <!-- DON'T EDIT THIS. TCP listener for GameServers on Master application -->
<TCPListener
IPAddress="0.0.0.0"
Port="4520">
</TCPListener>
</TCPListeners> <!-- Policy request listener for Unity and Flash (port 843) and Silverlight (port 943) -->
<PolicyFileListeners>
<!-- multiple Listeners allowed for different ports -->
<PolicyFileListener
IPAddress="0.0.0.0"
Port="843"
PolicyFile="Policy\assets\socket-policy.xml">
</PolicyFileListener>
<PolicyFileListener
IPAddress="0.0.0.0"
Port="943"
PolicyFile="Policy\assets\socket-policy-silverlight.xml">
</PolicyFileListener>
</PolicyFileListeners> <!-- WebSocket (and Flash-Fallback) compatible listener -->
<WebSocketListeners>
<WebSocketListener
IPAddress="0.0.0.0"
Port="9091"
DisableNagle="true"
InactivityTimeout="10000"
OverrideApplication="Game">
</WebSocketListener> </WebSocketListeners> <!-- Defines the Photon Runtime Assembly to use. -->
<Runtime
Assembly="PhotonHostRuntime, Culture=neutral"
Type="PhotonHostRuntime.PhotonDomainManager"
UnhandledExceptionPolicy="Ignore">
</Runtime> <!-- Defines which applications are loaded on start and which of them is used by default. Make sure the default application is defined. -->
<!-- Application-folders must be located in the same folder as the bin_win32 folders. The BaseDirectory must include a "bin" folder. -->
<Applications Default="Game"> <Application
Name="Game"
BaseDirectory="LoadBalancing\GameServer"
Assembly="Photon.LoadBalancing"
Type="Photon.LoadBalancing.GameServer.GameApplication"
ForceAutoRestart="true"
WatchFiles="dll;config"
ExcludeFiles="log4net.config">
</Application> <!-- CounterPublisher Application -->
<Application
Name="CounterPublisher"
BaseDirectory="CounterPublisher"
Assembly="CounterPublisher"
Type="Photon.CounterPublisher.Application"
ForceAutoRestart="true"
WatchFiles="dll;config"
ExcludeFiles="log4net.config">
</Application>
</Applications>
</LoadBalancing> </Configuration>
(4) 启动服务
三、第3台虚拟机跟第二台虚拟机配置一样
四、测试。在第一天MasterServer虚拟机中直接用服务器自带的测试工具。
测试发现MasterServer服务器已经能够连上另外两个GameServer服务器了。(这里conneting ip 就是另外两台GameServer服务器的Ip地址).
查看文档: https://doc.photonengine.com/en-us/server/current/applications/loadbalancing/application
https://gitchat.csdn.net/columnTopic/5a39d5a575e5a577886d6c20
Photon Server LoadBalancing搭建的更多相关文章
- Photon Server伺服务器在LoadBalancing的基础上扩展登陆服务
一,如何创建一个Photon Server服务 参见此博客 快速了解和使用Photon Server 二, 让LoadBalancing与自己的服务一起启动 原Photonserver.config文 ...
- 看过自会理解, Photon Server 常见概念分析.
http://stackoverflow.com/questions/10823915/photon-server-newbie-questions/11653419#11653419 Channel ...
- Photon Server初识(四) --- 部署自己的服务Photon Server
准备工作: 1.一台 window 虚拟机(本机是window也行) 2.下载SDK : https://www.photonengine.com/zh-CN/sdks#server 一:SDK介绍 ...
- Windows Server 2003搭建邮件服务器
Windows Server 2003搭建邮件服务器 由于Windows Server 2003默认是没有安装我们搭建邮件服务器所需要的POP3和SMTP服务的,因此需要我们自己来安装.方法如下: 1 ...
- Ubuntu server下搭建Maven私服Nexus
Ubuntu server下搭建Maven私服Nexus Maven私服Nexus的作用,主要是为了节省资源,在内部作为maven开发资源共享服务器来使用. 1.下载 通过root用户进去Ubuntu ...
- 使用FileZilla Server轻松搭建个人FTP服务器
Linux平台下快速搭建FTP服务器 服务器FTP Server环境搭建 针对以上遇到的问题的解决方案如下: 1)如何上传文件到云服务器上 关于这个问题,我首先想到的是使用FileZ ...
- Windows Server 2008搭建域控制器《转载51CTO.com》
Windows Server 2008搭建域控制器 引入 在小型网络中,管理员通常独立管理每一台计算机,如最为常用的用户管理.但当网络规模扩大到一定程度后,如超过 10 台计算机,而每台计算机上有 1 ...
- 使用IIS Server Farms搭建应用服务负载均衡
当公司的业务扩大, 伴随着大量的请求,应用服务器的承受能力已经不能满足不断增长的业务需求,使用IIS Server Farms搭建应负载均衡的方式,把请求分发给不同的应用服务器进行处理,这个时候就降低 ...
- 【阿里云】在 Windows Server 2016 下使用 FileZilla Server 安装搭建 FTP 服务
Windows Server 2016 下使用 FileZilla Server 安装搭建 FTP 服务 一.安装 Filezilla Server 下载最新版本的 Filezilla Server ...
随机推荐
- 有向网络(带权的有向图)的最短路径Dijkstra算法
什么是最短路径? 单源最短路径(所谓单源最短路径就是只指定一个顶点,最短路径是指其他顶点和这个顶点之间的路径的权值的最小值) 什么是最短路径问题? 给定一带权图,图中每条边的权值是非负的,代表着两顶点 ...
- redis之哨兵集群
一.主从复制背景问题 Redis主从复制可将主节点数据同步给从节点,从节点此时有两个作用: 一旦主节点宕机,从节点作为主节点的备份可以随时顶上来. 扩展主节点的读能力,分担主节点读压力. 但是问题是: ...
- 三十、CentOS 7之systemd
一.系统启动流程 POST --> bootloader --> MBR工作 --> kernel(initramfs/initrd) --> ro rootfs --> ...
- 64位linux下玩32位汇编编程
利用下假期,打算把linux下的汇编语言给熟悉下,结果是以32位为版本的,只能在办公室的机器上跑了个opensuse的32位版本,家里的suse挂了,无法输入中文.打算再安装下32位系统,今天找到了个 ...
- Ubuntu验证查看库的安装情况
以下是ubuntu系统安装完成一些库后,验证查看各个库的安装情况. 1. CUDA8.0 yuanlibin@yuanlibin:~$ nvcc -V nvcc: NVIDIA (R) Cuda co ...
- Jenkins修改显示语言为中文
1 安装插件 主界面 -> 系统管理 -> 插件管理 -> 可选插件 1.1 安装插件Locale plugin 1.2 安装插件Localization: Chinese(Simp ...
- tensorflow训练时用到的一些“工具”
1.graph和参数的store和restore 2.tensorboard查看 2.1tensorboard根据.meta文件查看图 2.2如何看图
- PostgreSQL SELECT INTO和INSERT INTO SELECT 两种表复制语句
SELECT INTO和INSERT INTO SELECT两种表复制语句都可以用来复制表与表之间的数据,但是它们之间也有区别. 建表语句: bas_custom_rel表 CREATE TABLE ...
- 记录Redis连接未正确释放,TCP连接过多,造成服务器上部分功能不可用和linux服务器内存一直增加问题
问题1 多人共享开发服务器(windows系统),我们小组有个程序,定时检测mongodb,redis,mysql连接是否正常,程序启动一段时间后,服务器管理人员找到我们说,我们的某个pid的程序把T ...
- mod 运算与乘法逆元
mod 运算与乘法逆元 %运算 边乘边mod 乘法 除法 mod 希望计算5/2%7=6 乘法 除法 mod 希望计算5/2%7=6 两边同时/x 在取mod(p)运算下,a/b=a*bp-2 bp- ...