传奇服务端同机三独立区与单区三网关三节点负载全量配置教程

来源: 作者: 点击:
一、先定“三开”类型

同机开三个独立区:复制三套MirServer目录,分别叫一区、二区、三区,区名、端口、数据库全部隔离,登录器列表并列多行。适合分1.76、1.80、合击等不同版本,或同版本分三组独立数据。

单区三网关:一个区起三个RunGate,端口7200、7210、7220,DBServer的serverinfo和Mir200的servertable都写三行,缓解多人登录卡顿、7200报错。不算多区,只算网关扩容。

单区三节点负载:三台机或三套M2逻辑节点,ServerIndex分别0、1、2,servertable分配三组网关,MapInfo按0/1/2把地图分给不同节点,DBServer集中一台。适合高在线拆分地图压力。

下面先写同机三独立区,再补单区三网关、三节点。

二、同机三独立区目录与端口规划

一区目录D:\MirServer1,二区D:\MirServer2,三区D:\MirServer3。同机全内网测试IP写127.0.0.1,外网把127.0.0.1换成公网IP并在防火墙放行。

推荐端口梯度,避免任何重叠:

一区
LoginGate 7000
SelGate 7100
RunGate 7200、7300、7400(部分引擎用7200、7210、7220,按本服网关数来)
DBServer 6000
M2通信/IDS 5500、5600
LogData 5000、4900
微端 8000

二区
LoginGate 7005
SelGate 7105
RunGate 7205、7305、7405
DBServer 6005
M2通信/IDS 5505、5605
LogData 5005、4905
微端 8005

三区
LoginGate 7010
SelGate 7110
RunGate 7210、7310、7410(若本服三网关习惯7200系,则三区用7201、7211、7221也可,但别和其他区撞)
DBServer 6010
M2通信/IDS 5510、5610
LogData 5010、4910
微端 8010

改前用cmd执行netstat -ano|findstr ":7000"、findstr ":7005"、findstr ":7010"确认端口空闲;被占用就整体再偏移5。

三、数据库隔离(DBC2000类引擎)

Hero、Blue等老引擎用DBC2000。BDE Administrator新建STANDARD别名:

一区HeroDB,PATH指向D:\MirServer1\Mir200\Mud2\DB
二区HeroDB2,PATH指向D:\MirServer2\Mir200\Mud2\DB
三区HeroDB3,PATH指向D:\MirServer3\Mir200\Mud2\DB

若想三区账号互通但角色数据独立,账号库可共用、角色库分目录;若完全独立就各建别名各指各Mud2\DB。BDE的System-Init里SharedMemLocation按系统设,Win7/10类可参考5BDE,老XP资料有7000写法,但多数据库并行重点还是别名和PATH别串。中文路径、UTF-8编码、DB文件缺失都会让M2起不来,Mud2\DB下StdItems等DB要完整。

GOM/GEE若用自带控制器和Access/MySQL,不走DBC2000;多区时一区二区三区分别设不同DB路径或不同数据库名,Setup里DBName、DBPath/MySQL库名对应即可。

四、控制器与核心文件改法

每个目录单独开GameCenter/配置向导:

一区游戏目录D:\MirServer1\,服务器名“传奇一区”,端口按一区表。
二区游戏目录D:\MirServer2\,服务器名“传奇二区”,端口按二区表,数据库名HeroDB2。
三区游戏目录D:\MirServer3\,服务器名“传奇三区”,端口按三区表,数据库名HeroDB3。

向导保存后会改各Gate的Config.ini和Mir200\!Setup.txt。手动核对以下文件:

Mir200\!Setup.txt
一区ServerName=传奇一区,IPAddress/DBAddr按127.0.0.1或公网,DBPort=6000,IDS端口5500/5600,MsgSrv端口4900,各区对应6000/6005/6010、5500/5505/5510、5600/5605/5610、4900/4905/4910。

LoginSrv\!addrtable.txt
一区写传奇一区 Line1-255 本机IP 本机IP 本机IP:7100 本机IP:7100
二区写传奇二区 Line1-255 本机IP 本机IP 本机IP:7105 本机IP:7105
三区写传奇三区 Line1-255 本机IP 本机IP 本机IP:7110 本机IP:7110
同LoginSrv多区可并列,也可一区用LoginSrv、二区三区手动起各自LoginSrv,看引擎是否支持单LoginSrv多Line。多Line最省资源,但端口和区名必须一一对应。

DBServer\!serverinfo.txt
一区写本机IP 本机IP 7200 本机IP 7300 本机IP 7400(或7200/7210/7220三网关)
二区写本机IP 本机IP 7205 本机IP 7305 本机IP 7405
三区写本机IP 本机IP 7210 本机IP 7310 本机IP 7410
每组对应本区RunGate端口,错一个就会角色入库或网关通信异常。

RunGate\Config.ini(每个区三份)
一区GatePort 7200/7300/7400,ServerAddr填本机M2通信地址,后端端口与M2、DBServer对应。
二区GatePort 7205/7305/7405。
三区GatePort 7210/7310/7410。
若引擎用mirgate.ini而非Config.ini,改GatePort和Server1/Server2后端地址,三份分别对应三端口。

SelGate\Config.ini
一区7100,二区7105,三区7110;后端连LoginSrv/角色服务地址。

LoginGate\Config.ini
一区7000,二区7005,三区7010;后端连SelGate/LoginSrv。

微端目录如有独立端口,一区8000、二区8005、三区8010,登录器资源规则分别指向各区微端。

五、登录器列表

同机多区列表写多行,格式按登录器生成器要求,示例:

传奇一区127.0.0.1 7000
0
传奇二区127.0.0.1 7005
0
传奇三区127.0.0.1 7010
0

外网把127.0.0.1换公网,7000/7005/7010分别对应各LoginGate;若登录器按SelGate或RunGate直连,就换对应7100/7200类端口。列表端口必须和控制器配置向导最终保存的登录网关端口一致,否则卡选择角色或连接服务器。

六、启动顺序(每区独立)

单区标准顺序:DBServer→LoginSrv→LogDataServer→M2Server→SelGate→LoginGate→RunGate(多份依次起)。三区就按一区跑完再跑二区,再跑三区;同机资源够就同时开三个控制器,但先确认端口不撞。

用GameCenter一键控制器时,检查配置向导里“启动组件”是否包含DB、Login、Log、Sel、Gate、Run、M2;手动版缺哪个组件都会表现为能看见列表但进不了游戏。

七、单区三网关(不增区,只扩容)

只做一个区,RunGate复制三份:

RunGate1 Config.ini GatePort=7200
RunGate2 Config.ini GatePort=7210
RunGate3 Config.ini GatePort=7220

DBServer\!serverinfo.txt写:
本机IP 本机IP 7200 本机IP 7210 本机IP 7220

Mir200\!servertable.txt写:
0 本机IP 7200 本机IP 7210 本机IP 7220

M2起来后看网关日志Gate 0 opened、Gate 1 opened、Gate 2 opened即成功。登录器只需配一个区一个7000登录端口,玩家连接由三个RunGate分流,解决单7200高并发卡顿。

八、单区三节点负载(同区三机/三M2)

主机节点0:
Mir200\!runaddr.txt加入主机IP、从机1IP、从机2IP。
Mir200\!servertable.txt:
0 主机IP 7200 主机IP 7210 主机IP 7220
1 从机1IP 7201 从机1IP 7211 从机1IP 7221
2 从机2IP 7202 从机2IP 7212 从机2IP 7222
Mir200\!Setup.txt ServerIndex=0,DBAddr=主机IP,DBPort=6000,IDSAddr=主机IP,IDSPort=5600,MsgSrvAddr=主机IP,MsgSrvPort=4900。
DBServer\!serverinfo.txt按主机三网关写0号节点即可;若从机M2直连主机DB,从机setup的DBAddr也填主机IP。
LogSrv\!addrtable.txt写主机IP、从机1IP、从机2IP对应Line;!serveraddr.txt列全三机IP;Logsrv.ini ReadyServers按实际节点数写。
MapInfo.txt按节点分流,例如:
[0 比奇省 0] 主机0号处理
[0 盟重省 1] 从机1号处理
[0 祖玛寺庙 2] 从机2号处理
第三字段0/1/2对应servertable节点号,全写0全压主机,全写2全压从机2。

从机1:ServerIndex=1,ServerName同主机区名,DBAddr填主机,servertable复制主机全量三行,RunGate监听从机IP7201/7211/7221。
从机2:ServerIndex=2,其余同理用7202/7212/7222。
三节点共享同一角色库,不能各建独立HeroDB,否则跨节点回档。主机跑DB、Login、Log,从机只跑M2+RunGate最省事;从机也跑完整Mir200时,Envir、Map、Castle等通过共享盘或实时同步,避免行会、沙巴克、地图配置不一致。

九、排错

1. 端口被占用:netstat -ano查7000/7100/7200等,任务管理器按PID杀掉重复控制器或其他程序;三区绝不能直接复制一区不改端口。
2. 进列表后选角色卡死:DBServer serverinfo的RunGate端口组和实际RunGate不一致;servertable节点数、端口也要一致。
3. M2起不来报数据库:DBC2000别名、PATH、Mud2\DB文件三处核对;GOM检查Setup里DBType、DBName、MySQL账号密码和库是否存在。
4. 三区互相串数据:一区二区三区HeroDB别名或MySQL库名重复,改HeroDB2/HeroDB3或独立库;Envir若想不同玩法就各改各的,想同玩法再复制但别共享同一运行数据文件。
5. 单区三网关只刷一个Gate也能进但人多卡:把三个RunGate都配进serverinfo和servertable,登录器侧不用改,M2侧认三网关才行。
6. 三节点地图闪退或传送找不到服务器:MapInfo第三字段节点号在servertable不存在,比如写2但只配0和1;或者从机M2没起、RunGate后端地址写错。
7. 外网只一区能进:路由器只映射一区7000/7100/7200,二区三区7005/7105/7205、7010/7110/7210要分别映射;云服务器安全组同样加三套。
8. 微端不加载:三区微端端口独立,登录器资源列表分别绑定各区mmap、Data、Map补丁;同补丁多区可共用微端,不同版本必须分微端。
9. 控制器重复启动:同目录双开GameCenter会抢端口,三区用三个不同目录、三个快捷方式,不在一个目录点两次。
10. 老引擎不支持多开:部分很老Hero/BLUE单实例限制,先升引擎到支持多区多网关版本再按上面改。

十、资源与规模建议

同机三独立区对CPU、内存、磁盘IO都吃三倍。百人级三区建议8核16G起步;若只是单机测试,每区限几十人、RunGate各1个就够了。单区三网关不增加M2逻辑负担多少,主要解决连接排队。单区三节点才真正拆地图和计算,主机DB+Login,两台从机分主城、打宝、沙巴克,比同机三独立区更省角色管理但配置更复杂。改完先单区单网关通,再扩三网关,最后做三独立区或三节点,避免一次性全改无法定位问题。