全局大厅与 BC 接入操作手册
本文说明如何部署并验收一套「BC → 全局大厅集群 → 业务小区」拓扑。它只描述运维步骤;业务插件负责大厅内选区、排队、小区默认服与后续转服,Beacon 不接管这些行为。
实现本文拓扑需先明确三条前提,它们决定了后续所有操作步骤:
- 每个 namespace 有且仅有一个全局 LobbyCluster,成员必须是同 namespace 的已确认 backend;BC 自身的首次落脚只从该大厅 的可调度成员中选择。
- Agent 本地只保留控制面地址与 namespace 接入 token,serverId、区服归属和大厅归属均由控制面分配,未经确认的身份不会启动依赖权威 serverId 的运行循环。
- 地址以控制面保存的 endpoint 记录为准:BC 的全部 listener 都会被登记,外部可达地址由控制面探测得出,必要时按 listener 单独覆盖。
1. 目标拓扑
一个 BC 服务一个 namespace。大区与小区仅是业务虚拟分隔;全局大厅独立于它们。
玩家
└─ BC 的任一 listener
└─ 全局 LobbyCluster(login-1 / login-2 / …)
└─ 业务插件:选区、排队、转入目标小区
└─ Region / Zone 内的小区大厅与游戏服
- BC 的首次连接只会从
LobbyCluster的可调度成员中选择落点。 - 同一 namespace 只能有一个
LobbyCluster。 - 全球大厅成员不能同时属于 Region/Zone;小区大厅和游戏服也不能误加入全球大厅。
- 当前选择规则为:最高健康分优先;同分时选择容量占用更低者;仍相同时随机。因此短时间偏向某一大厅是预期行为,不承诺严格轮询。
2. 准备条件
- 准备已启动的 Beacon 控制面,并使用 HTTPS 或受控内网访问。
- 为 BC 准备 BungeeCord 与
BeaconAgentProxy;为每个 Paper/Bukkit 服务准备BeaconAgent。 - 规划至少一台 BC、两台全球登录服、一台小区大厅和一台普通小区游戏服。
- 为每个服务分配唯一的游戏监听端口;BC 可有多个 listener。
- 备份控制面数据库、各 Agent 的
plugins/Beacon*本地状态和原有服务配置后再迁移。
不要把 token、密码、真实公网地址或实际端口写进仓库、截图或日志。
3. 创建 namespace 与接入 token
- 以完整管理员权限登录管理台。
- 在「命名空间」创建本次集群的 namespace。
- 为该 namespace 创建接入 token,并仅通过受控的部署渠道交给同 namespace 的 Agent。
- 记录 token 的保管位置,不在聊天、配置模板或版本库中复制明文。
namespace 由 token 权威推导;Agent 不再在本地持续声明 namespace、serverId、大区、小区或大厅归属。
4. 配置 Agent
4.1 Bukkit / Paper
将 BeaconAgent 放入对应服务的 plugins/ 目录。最小引导配置只需要控制面 endpoint 列表与 namespace token:
beacon:
endpoints:
- "https://beacon.example.invalid"
bootstrap-token: "<仅通过受控渠道注入的 namespace token>"
首次启动会生成本机 identityId。不要手工填写或复制以下业务字段:namespace、serverId、address、大区、小区、LobbyCluster、容量或调度权重。
4.2 BC / BungeeCord
将 BeaconAgentProxy 放入 BC 的 plugins/ 目录,并使用与 Bukkit 相同的最小 beacon 配置。BC 必须在其原生配置中声明至少一个 listener;多 listener 会被 Agent 全部上报。
新 BC 不再使用 proxy.home-group、proxy.home-zone 或 listener priorities 决定玩家首次落点。保留这些旧字段仅为兼容历史配置,不能作为新拓扑的正确性依据。
5. 启动与身份审批
按以下顺序启动,可减少待确认状态的排障成本:
- 启动控制面。
- 启动两台全球登录服、小区大厅和普通小区游戏服。
- 启动 BC。
- 打开管理台「服务器 → 待确认」,核对 Agent 的平台角色与监听事实。
- 为每台待确认身份填写审批原因并申请分配唯一 serverId;由另一位 human 在审批中心批准,等待 worker 执行。
建议角色与归属如下:
| 服务 | Agent 角色 | 控制面归属 |
|---|---|---|
| BC | proxy | BCCluster |
login-* | backend | 全局 LobbyCluster |
| 小区大厅 | backend | 对应 Region / Zone |
| 普通游戏服 | backend | 对应 Region / Zone |
审批完成后,身份应从 pending 变为 active。新身份在 pending 时不会启动依赖权威 serverId 的完整运行循环;这不是故障。
6. 配置拓扑
- 创建或选择 BCCluster,并把 BC 分配给它。
- 创建业务 Region 与 Zone,把小区大厅和游戏服分配到对应 Zone。
- 打开「LobbyCluster」页面,确认该 namespace 的唯一全局大厅集群存在。
- 将两台及以上
login-*backend 加入 LobbyCluster。 - 确认
login-*已不再带 Region/Zone 归属;确认小区大厅和游戏服不在 LobbyCluster。 - 等待健康状态收敛,直到 LobbyCluster 显示成员数、可调度数与预期一致。
在线服务的迁移受 drain 门保护;启用排空是强审计止损动作,取消排空和拓扑改派会创建审批申请。若管理台拒绝移动,先按既有运维流程排空或处理玩家,再重试。不要通过直接修改数据库绕过归属约束。