传奇双公网双物理机负载分流架设教程与高在线稳定排错实录

来源: 作者: 点击:
双公网双机做传奇负载,核心不是简单开两个区,而是把登录、选区、游戏网关、数据库、M2逻辑按公网入口和机器资源拆开。下面按主机A、从机B两套公网IP落地,适用于Hero、BLUE、GOM、GEE类传统服务端,思路可套到其他引擎。

一、整体拓扑与分工

主机A公网IP:1.1.1.1,负责LoginSrv、SelGate、DBServer、LogSrv、部分RunGate、部分M2地图逻辑。
从机B公网IP:2.2.2.2,负责另一组RunGate、另一组M2实例或同一区第二节点,按ServerIndex分担地图与玩家连接。

两种落地方式:
1. 同区多机负载:AB共用一个区名,Mir200按servertable分配0号、1号节点,MapInfo按0/1把比齐、盟重、祖玛、赤月分给不同机,DBServer集中主机A,所有角色数据回写同一库。
2. 双公网双入口单区互备:LoginGate/SelGate在AB都起,玩家按电信/联通或按域名进不同公网;后端RunGate分别连各自M2,M2都连主机A的DBServer。此方案重点解决跨网延迟,不解决单库压力,人数极高仍要加从机M2。

二、主机A基础配置

Mir200\!runaddr.txt加入本机和从机公网:
1.1.1.1
2.2.2.2

Mir200\!servertable.txt按节点分端口:
0 1.1.1.1 7200 1.1.1.1 7210 1.1.1.1 7220
1 2.2.2.2 7201 2.2.2.2 7211 2.2.2.2 7221

Mir200\!setup.txt关键项:
[Server]
ServerIndex=0
ServerNumber=0
ServerName=传奇双机
DBAddr=1.1.1.1
DBPort=6000
IDSAddr=1.1.1.1
IDSPort=5600
MsgSrvAddr=1.1.1.1
MsgSrvPort=4900
GateAddr按实际写本机公网或0.0.0.0,GatePort保持7000一类登录端口。
ServiceMode=TRUE可根据需要开,TestServer按测试环境写TRUE或FALSE。

Mud2\DBSrv200\!serverinfo.txt只写主机A给本机RunGate的地址组:
1.1.1.1 1.1.1.1 7200 1.1.1.1 7210 1.1.1.1 7220
若从机B的RunGate跨公网直连主机A的DBServer,需要另开DBServer监听公网并在serverinfo追加从机网关地址组;很多版本DBServer只认本机M2回环,跨公网建议从机M2连主机DB,而不是从机RunGate直连主机DB。

Mud2\LogSrv\!addrtable.txt:
传奇双机 Line1-255 1.1.1.1 1.1.1.1 1.1.1.1:7100 1.1.1.1:7100
Mud2\LogSrv\!serveraddr.txt:
1.1.1.1 1.1.1.1
2.2.2.2
Logsrv.ini中ReadyServers按实际入口数写,双公网单区可写1或2,以网关能起来为准,写错常导致LogSrv不接第二个入口。

LoginSrv\!addrtable.txt加入从机公网入口,格式与主机同区名不同Line或不同标题,具体看引擎;多机负载常用在DBServer和LoginSrv的addrtable各加从机IP。

三、从机B配置

从机B同样装DBC或引擎依赖,不单独开第二区,而是做同一区节点1。
RunGate三个Config.ini分别写从机公网:
ListenIP=2.2.2.2
GatePort=7201/7211/7221,后端ServerAddr写本机M2若B独立跑M2,或写主机A M2内网/公网地址若B只做网关。
纯网关模式:B只起RunGate,ServerAddr填A的M2监听地址,A的M2需允许B公网连接;安全组放通7201、7211、7221。

若B也跑M2做逻辑节点:
Mir200\!setup.txt:
ServerIndex=1
ServerNumber=0(同区共号)
ServerName=传奇双机
DBAddr=1.1.1.1(连主机A的DBServer)
DBPort=6000
其余IDS、Msg按主机A地址填。
servertable已在主机配过0号A、1号B,B本机servertable保留同样两行即可,避免B只写自己导致跨节点地图传送找不到服务器。

四、地图负载分配

Mir200\Envir\MapInfo.txt按ServerIndex分流:
[0 比齐省 0] 表示比齐由主机A的ServerIndex0处理;
[0 盟重省 1] 表示盟重交给从机B的ServerIndex1;
祖玛、赤月、沙巴克可按人数再切,比如主城和回城地图留A,打宝地图给B,减少单程跨机。改完不要全部写1,B机器配置低于A时会反压;初期可A占60%地图、B占40%,观察两台CPU再调。

五、双公网入口与网关绑定

双公网若分别是电信、联通,LoginGate/SelGate/RunGate不要都写0.0.0.0随意听,高稳定做法按入口绑:
A机LoginGate\Config.ini:ListenIP=1.1.1.1,GatePort=7000,后端SelGate/LogSrv地址填1.1.1.1。
B机LoginGate\Config.ini:ListenIP=2.2.2.2,GatePort=7001或7000若两台独立,后端填B本机或A的LogSrv公网。
SelGate选区端口A用7100,B用7101;RunGate A用7200/7210/7220,B用7201/7211/7221。
GOM/GEE可视化面板可直接勾多IP接入,填1.1.1.1,2.2.2.2;老Hero/BLUE改Config.ini更稳。

双物理网卡同机双公网时,只允许一个网卡设默认网关,另一个写静态路由或靠网关程序绑IP回应;两个都设默认网关会路由表打架,表现为电信进得来、联通偶发超时。

六、数据库与回档防护

主机A单独跑DBServer,所有M2连同一DBAddr,不从机各写各库。若AB各建HeroDB副本,角色上线A、下线B一定回档。
DBC2000环境:A机HeroDB指向Mir200数据目录或统一数据盘;B机不另建独立HeroDB,只通过网络连A的DBServer。
SQL类引擎:账号库、角色库放A,B连接串只改IP不改库名;每天定时备DBServer数据、Mir200\Envir、LogSrv日志。
多机并发写同一角色时,靠DBServer单点锁;不要在B再开一个DBServer写同一批数据文件。

七、启动顺序

主机A:DBServer→LoginSrv→LogSrv→M2(ServerIndex0)→RunGate(7200/7210/7220)→LoginGate→SelGate。
从机B纯网关:RunGate(7201/7211/7221)→如需独立M2再起M2(ServerIndex1)。
都起来后用主机公网登录一次、从机公网登录一次,各建角色、各走分配地图。单用主机公网能进、从机公网进不去,先查B防火墙、RunGate ListenIP、LogSrv addrtable是否缺B IP。

八、压测与高在线参数

RunGate超时:Config.ini中ClientTimeOutTime或KeepConnectTimeOut调大,默认过短会进图几秒掉;人多建议按引擎默认值上浮,不盲目设几十万毫秒。
单IP连接数:Setup.txt的MaxConnectionOfIPs按实际外网出口设,家庭宽带多玩家同NAT可放宽,公网独立IP可收紧防刷。
多RunGate:单公网高在线开3组RunGate,双公网AB各3组;M2的GateLoad类参数按CPU核数和网关数调。
系统层:Windows防火墙把Mir200、LoginGate、SelGate、RunGate、DBServer、M2全部放行;杀软加白,核心隔离、内存完整性会拦老网关通信。

九、常见故障

1. 从机登录后3秒掉:RunGate超时短、ListenIP绑错、登录器GatePort与RunGate不一致。先netstat看7201是否监听,再看RunGate配置ServerAddr是否指向M2公网或内网可达地址。
2. 地图不分流:servertable只写主机、MapInfo没改ServerIndex,或B的M2没起、ServerIndex和主机不一致。主机0从机1,MapInfo第三字段对应0/1才生效。
3. 双公网一进一卡:两网卡双默认网关,改单默认网关加静态路由;或者网关0.0.0.0随机出网,按入口强制绑公网IP。
4. 回档:AB各开DBServer写同一数据目录、HeroDB路径不同、M2的DBAddr一个写127一个写公网但后端不是同一库。统一主机DB、统一库名。
5. LogSrv只接一个入口:addrtable缺从机、serveraddr没加从机、ReadyServers数不对。先单入口通再加第二公网,逐行加避免整服务起不来。
6. 端口冲突:A/B同端口必撞,按7000/7001、7100/7101、7200/7201梯度分;改前在A、B分别netstat -ano确认端口空闲。
7. 选区慢或登录二次:LoginSrv与LogSrv地址不一致、SelGate后端端口和M2 GatePort不对;双机方案有版本会出现首次登录二次验证,确认LoginSrv addrtable、LogSrv serveraddr、M2 GateAddr三点统一。

十、落地小规格建议

百人在线:单公网单机三RunGate足够,不必双机。
三百到八百人在线:双公网双机,A跑DB+Login+Log+M2主城,B跑RunGate+M2打宝地图,MapInfo把祖玛赤月沙巴克放B。
千人在线以上:DBServer独立物理机,Login/Sel独立,AB各多组RunGate,M2按地图再拆第三、第四节点,servertable继续加2、3,数据库每日增量备、二进制数据盘做RAID。

配置完不要直接对外放人,先用两台公网各建号、各跑半小时,观察A/B CPU、RunGate发包、DBServer写盘、M2日志有无地址拒绝;确认不回档、不3秒掉、地图按设定分流,再逐步加人。