配置指南¶
配置文件位置:plugins/cross-server/config.yml
完整配置示例¶
server:
id: "server-1"
cluster: "my-cluster"
database:
jdbc-url: "jdbc:mysql://127.0.0.1:3306/cross_server?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8"
username: "root"
password: "your-password"
maximum-pool-size: 10
messaging:
enabled: true
redis-uri: "redis://127.0.0.1:6379/0"
channel: "cross-server:sync"
session:
lock-seconds: 30
heartbeat-seconds: 10
kick-message: "你的跨服会话正在同步中,请稍后重试"
node:
heartbeat-seconds: 15
offline-seconds: 45
teleport:
handoff-seconds: 30
arrival-check-delay-ticks: 10
cooldown-seconds: 10
gateway:
type: "proxy-plugin-message"
plugin-message-channel: "BungeeCord"
connect-subchannel: "Connect"
server-map:
server-1: "server-1"
server-2: "server-2"
modules:
auth: true
homes: true
warps: true
tpa: true
route-config: true
transfer-admin: true
economy-bridge: true
permissions: false
web-panel:
enabled: false
host: "127.0.0.1"
port: 8765
token: "change-this-token"
master-server-id: "server-1"
cluster-lease-seconds: 30
cluster-heartbeat-seconds: 10
配置项详解¶
language — 语言设置¶
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
locale |
String | zh-CN |
插件服务端默认语言 |
web-default-locale |
String | zh-CN |
Web 面板默认语言 |
当前内置目标语言:
zh-CNen-US
说明:
- 这一版已经接入语言配置底座与 Web 切换框架
- 后续版本会继续把剩余用户可见文案逐步迁移到统一语言系统
server — 服务器标识¶
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
id |
String | server-1 |
当前节点的唯一标识,集群内不能重复 |
cluster |
String | default |
集群名称,同一集群的子服应保持一致 |
database — 数据库¶
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
jdbc-url |
String | — | MySQL JDBC 连接串,必须包含数据库名 |
username |
String | — | 数据库用户名 |
password |
String | — | 数据库密码 |
maximum-pool-size |
Int | 10 |
HikariCP 连接池最大连接数 |
插件启动时会自动创建所有数据表,无需手动建表。但数据库(如
cross_server)需提前创建。
messaging — 跨服消息¶
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
enabled |
Boolean | false |
是否启用 Redis PubSub 实时广播 |
redis-uri |
String | redis://127.0.0.1:6379/0 |
Redis 连接串 |
channel |
String | cross-server:sync |
PubSub 频道名,同一集群的子服应保持一致 |
关闭
messaging.enabled后插件仍可运行,但跨服实时通知(如 TPA 请求更新、Warp 变更广播)将不可用。
session — 会话管理¶
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
lock-seconds |
Int | 30 |
会话锁超时时间(秒),防止同玩家在多服写入 |
heartbeat-seconds |
Int | 10 |
本地会话心跳间隔(秒) |
kick-message |
String | 你的跨服会话正在同步中,请稍后重试 |
会话冲突时踢出玩家的消息 |
node — 节点监控¶
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
heartbeat-seconds |
Int | 15 |
节点心跳间隔(秒) |
offline-seconds |
Int | 45 |
节点超过此秒数未心跳则视为离线 |
teleport — 跨服传送¶
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
handoff-seconds |
Int | 30 |
handoff 超时时间(秒),超时后目标服不再接受 |
arrival-check-delay-ticks |
Int | 10 |
玩家到达后延迟多少 tick 再检查 handoff |
cooldown-seconds |
Int | 10 |
同一玩家两次跨服传送的冷却时间(秒) |
teleport.gateway — 传送网关¶
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
type |
String | proxy-plugin-message |
网关类型,当前仅 proxy-plugin-message 可用 |
plugin-message-channel |
String | BungeeCord |
插件消息通道名(Velocity 用 BungeeCord) |
connect-subchannel |
String | Connect |
连接子频道名 |
server-map |
Map | {} |
本服 ID → 代理中注册的服务器名映射(大小写敏感) |
server-map的 value 必须和代理中注册的服务器名完全一致。
modules — 模块开关¶
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
auth |
Boolean | true |
登录认证模块(注册/登录/改密 + 跨服免重登 Ticket) |
homes |
Boolean | true |
跨服家园(/sethome /home /homes) |
warps |
Boolean | true |
全局 Warp(/setwarp /warp /delwarp + GUI) |
tpa |
Boolean | true |
跨服 TPA(/tpa /tpahere /tpaccept /tpdeny) |
route-config |
Boolean | true |
路由配置管理(/crossserver route + GUI) |
transfer-admin |
Boolean | true |
转服诊断管理(/crossserver transfer + GUI) |
economy-bridge |
Boolean | true |
经济桥接(兼容 Vault,跨服共享余额) |
permissions |
Boolean | false |
权限同步(仅同步 crossserver.* 权限节点) |
模块开关支持通过集群共享配置中心统一覆盖。本地 config.yml 中的值是"默认值",可通过
/crossserver modules set或 Web 面板设置"共享覆盖",最终生效值 = 共享覆盖 ?? 本地默认。
web-panel — 内置 Web 面板¶
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
enabled |
Boolean | false |
是否让当前节点加入 Web 面板集群登记 |
host |
String | 127.0.0.1 |
主控节点绑定的 HTTP 地址 |
port |
Int | 8765 |
主控节点监听的 HTTP 端口 |
token |
String | change-this-token |
访问令牌,请务必改成强随机值 |
master-server-id |
String | 当前 server.id |
指定哪个节点是主控节点(通常填大厅服) |
cluster-lease-seconds |
Int | 30 |
面板成员登记过期时间(秒) |
cluster-heartbeat-seconds |
Int | 10 |
面板成员刷新状态间隔(秒) |
集群行为:
- 开启
web-panel.enabled: true的节点会把自己登记到共享配置中心 - 只有
web-panel.master-server-id对应的节点会真正监听 HTTP 端口 - 其他开启节点作为受管节点,只上报成员状态,不会重复绑定端口
- 节点正常关闭时会主动注销自己的面板成员记录
- 心跳定时任务会周期性执行主控选举、日志发布、配置快照刷新
- 若主控节点未开启或离线,面板页面不会由其他节点自动接管
访问面板:
浏览器访问 http://host:port/,输入 X-CrossServer-Token 后即可使用。
面板包含以下标签页:
| 标签页 | 功能 |
|---|---|
| 仪表盘 | 集群状态总览、节点列表、面板成员信息 |
| 模块 | 查看并修改共享模块开关(local / shared / effective) |
| 路由 | 查看并修改共享路由(新增 / 整体覆盖 / 删除) |
| 配置文档 | 查看并编辑已注册配置文档的 JSON / YAML payload、schema/source/summary,并展示 schema 约束与最近历史 |
| 节点配置 | 查看各节点配置快照,在线编辑 messaging / webPanel / modules 并提交 |
| 日志中心 | 按节点查看 CrossServer 插件同步日志 |
| 转服诊断 | 查看最近转服记录,按玩家名查询详细诊断 |
注意:
- 在面板中保存共享模块开关或共享路由后,只是写入共享配置中心;当前节点通常仍需触发一次本节点 reload 才会立即生效
/crossserver reload、路由菜单里的"重载本节点"、面板内的"重载本节点"现在都使用同一套安全排队式 reload 逻辑(AtomicBoolean防并发)- 面板触发重载时会短暂断开,然后自动尝试重连
- 配置文档页会在保存前提示风险操作确认,并显示最近历史记录
配置中心 schema 约束¶
CrossServer 现在支持为配置文档注册 schema 规则,用于对共享配置做最基本的服务端字段约束校验。
当前第一版支持:
- 必填字段路径校验
- 字段类型校验(
object/array/string/boolean/number/integer) - 枚举值校验
- 数值最小值 / 最大值校验
- 非空字段校验
- 数组元素类型校验
运维历史记录¶
CrossServer 现在会自动记录最近的关键配置变更历史,便于面板回看:
- 配置文档历史
- 共享模块开关历史
- 共享路由历史
- 节点配置申请历史
当前默认保留最近 20 条,主要用于:
- 排查最近是谁改了配置
- 快速回顾一段时间内的运维操作
- 在 Web 面板中做轻量审计查看
目前 Web 面板已经支持对以下内容执行“从历史版本回滚”:
- 配置文档
- 共享模块开关
- 共享路由
这项能力适合:
- 防止 Web 面板误保存错误字段结构
- 给第三方插件的共享配置提供最基础的格式保护
- 在多人协作运维时减少误操作风险
节点配置远程管理¶
主控节点可在"节点配置"标签页中,查看各子服上报的配置快照,并在线修改以下白名单字段:
| 分类 | 可编辑字段 | 说明 |
|---|---|---|
messaging |
enabled, redisUri, channel |
Redis 消息层配置 |
webPanel |
enabled, host, port, masterServerId, token |
Web 面板配置(token 留空表示不修改) |
modules.* |
auth, homes, warps, tpa, routeConfig, transferAdmin, economyBridge, permissions |
各模块开关 |
工作流程:
- 目标节点启动后自动发布配置快照到集群配置中心(命名空间
node.config) - 主控节点在面板中查看快照并编辑白名单字段
- 主控节点提交"申请"到目标节点
- 目标节点收到申请后,将变更写入本地
config.yml并排队重载
安全限制:
- 只能修改白名单内的字段,不会意外覆盖数据库连接、代理配置等敏感信息
- 每次申请只影响一个目标节点
- 申请状态可在面板中实时追踪(pending -> applying -> applied / failed)
日志中心¶
Web 面板的"日志中心"标签页可按节点查看 CrossServer 插件同步到配置中心的日志,便于集群排障。日志通过共享配置中心的 web.panel.log 命名空间同步,主控和受管节点均可参与。
GitHub 自动构建与发版¶
仓库默认已配置两条 GitHub Actions 工作流:
build.yml:push 到master时自动执行mvn clean packagebuild.yml的 release job:pushv*tag 时自动创建 GitHub Release 并上传 JARdocs.yml:push 到master时自动执行mkdocs build并部署文档站点
推荐版本管理方式:
- 修改
pom.xml中的<version>,按小版本递增,例如1.0.2 - 推送
master,触发普通构建 - 创建并推送同版本 tag,例如
v1.0.2,触发 Release 打包与上传