代理端的选择
服务器人数太多话,单靠一个核心paper是扛不住的,我们需要一个代理端来分散用户,比如一个paper作为生存一区,一个paper作为生存二区,这样就通过代理端来分散用户流量到不同的核心paper。
可选择的代理端还是比较少的,主要有以下几个。
- BungeeCord
- Waterfall
- Velocity
BungeeCord
这玩意是spigotmc团队制作的,算是最原始的代理端了吧,非常经典款的,插件生态完善。
官方地址: bc
Waterfall
这个是paper团队fork Bungeecord的,加入了很多优化能力,兼容BungeeCode的所有插件吧。
官方地址: wf
Velocity
这个paper团队自研的代理端,转发性能优越。插件生态还不行。
官方地址: vc
代理对比
代理端 | 适合场景 |
bungeecode | 简单 快速入门,资料比较全面 |
waterfall | 后端为paper的场景,代理端需要安装很多插件的 |
velocity | 代理端不需要安装复杂插件的 |
我们这个教程系列后端paper的,代理端后面需要安装很多插件,我们选择Waterfall。
Java环境安装
java环境安装,我们在前面的教程配置过了,这里主要上个链接吧。
WaterFall的下载安装
WaterFall的官方教程: https://docs.papermc.io/waterfall/getting-started
具体操作如下:
# 进入文件夹 cd /home/mc/instances/ # 创建代理目录waterfall mkdir wf # 进入目录 cd wf/ # 下载最新版本的wf wget https://api.papermc.io/v2/projects/waterfall/versions/1.19/builds/510/downloads/waterfall-1.19-510.jar # 查看下载的 ll # 重命名下,方便配合管控脚本 mv waterfall-1.19-510.jar wf.jar # 启动wf java -jar wf.jar
其中效果如下
[root@mc wf]# java -jar wf.jar [11:20:21 INFO]: Using mbed TLS based native cipher. [11:20:21 INFO]: Using zlib based native compressor. [11:20:21 INFO]: Enabled Waterfall version git:Waterfall-Bootstrap:1.19-R0.1-SNAPSHOT:13085b9:510 [11:20:21 INFO]: Not on Windows, attempting to use enhanced EpollEventLoop [11:20:21 INFO]: Epoll is working, utilising it! [11:20:21 INFO]: Discovered module: ModuleSpec(name=cmd_alert, file=modules/cmd_alert.jar, provider=JenkinsModuleSource()) [11:20:21 INFO]: Discovered module: ModuleSpec(name=cmd_find, file=modules/cmd_find.jar, provider=JenkinsModuleSource()) [11:20:21 INFO]: Discovered module: ModuleSpec(name=cmd_list, file=modules/cmd_list.jar, provider=JenkinsModuleSource()) [11:20:21 INFO]: Discovered module: ModuleSpec(name=cmd_send, file=modules/cmd_send.jar, provider=JenkinsModuleSource()) [11:20:21 INFO]: Discovered module: ModuleSpec(name=cmd_server, file=modules/cmd_server.jar, provider=JenkinsModuleSource()) [11:20:21 INFO]: Discovered module: ModuleSpec(name=reconnect_yaml, file=modules/reconnect_yaml.jar, provider=JenkinsModuleSource()) [11:20:21 INFO]: Attempting to update plugin from null to ModuleVersion(build=510, git=13085b9) [11:20:21 INFO]: Attempting to Jenkins download module cmd_alert v510 [11:20:22 INFO]: Download complete [11:20:22 INFO]: Attempting to update plugin from null to ModuleVersion(build=510, git=13085b9) [11:20:22 INFO]: Attempting to Jenkins download module cmd_find v510 [11:20:22 INFO]: Download complete [11:20:22 INFO]: Attempting to update plugin from null to ModuleVersion(build=510, git=13085b9) [11:20:22 INFO]: Attempting to Jenkins download module cmd_list v510 [11:20:22 INFO]: Download complete [11:20:22 INFO]: Attempting to update plugin from null to ModuleVersion(build=510, git=13085b9) [11:20:22 INFO]: Attempting to Jenkins download module cmd_send v510 [11:20:23 INFO]: Download complete [11:20:23 INFO]: Attempting to update plugin from null to ModuleVersion(build=510, git=13085b9) [11:20:23 INFO]: Attempting to Jenkins download module cmd_server v510 [11:20:23 INFO]: Download complete [11:20:23 INFO]: Attempting to update plugin from null to ModuleVersion(build=510, git=13085b9) [11:20:23 INFO]: Attempting to Jenkins download module reconnect_yaml v510 [11:20:23 INFO]: Download complete [11:20:23 INFO]: Loaded plugin reconnect_yaml version git:reconnect_yaml:1.19-R0.1-SNAPSHOT:13085b9:510 by WaterfallMC [11:20:23 INFO]: Loaded plugin cmd_find version git:cmd_find:1.19-R0.1-SNAPSHOT:13085b9:510 by WaterfallMC [11:20:23 INFO]: Loaded plugin cmd_server version git:cmd_server:1.19-R0.1-SNAPSHOT:13085b9:510 by WaterfallMC [11:20:23 INFO]: Loaded plugin cmd_alert version git:cmd_alert:1.19-R0.1-SNAPSHOT:13085b9:510 by WaterfallMC [11:20:23 INFO]: Loaded plugin cmd_send version git:cmd_send:1.19-R0.1-SNAPSHOT:13085b9:510 by WaterfallMC [11:20:23 INFO]: Loaded plugin cmd_list version git:cmd_list:1.19-R0.1-SNAPSHOT:13085b9:510 by WaterfallMC [11:20:23 WARN]: Forced host server pvp is not defined [11:20:23 INFO]: Enabled plugin reconnect_yaml version git:reconnect_yaml:1.19-R0.1-SNAPSHOT:13085b9:510 by WaterfallMC [11:20:23 INFO]: Enabled plugin cmd_find version git:cmd_find:1.19-R0.1-SNAPSHOT:13085b9:510 by WaterfallMC [11:20:23 INFO]: Enabled plugin cmd_server version git:cmd_server:1.19-R0.1-SNAPSHOT:13085b9:510 by WaterfallMC [11:20:23 INFO]: Enabled plugin cmd_alert version git:cmd_alert:1.19-R0.1-SNAPSHOT:13085b9:510 by WaterfallMC [11:20:23 INFO]: Enabled plugin cmd_send version git:cmd_send:1.19-R0.1-SNAPSHOT:13085b9:510 by WaterfallMC [11:20:23 INFO]: Enabled plugin cmd_list version git:cmd_list:1.19-R0.1-SNAPSHOT:13085b9:510 by WaterfallMC [11:20:23 INFO]: Listening on /0.0.0.0:25577View Code
添加登录分区
我们上个主城分区已经使用paper搭建了一个启动在33301的端口上的,我们复制下文件夹,启动一个登录分区。
具体操作如下
# 从主城的paper复制出来给登陆区 cp -r zc dl # 进入登录分区目录 cd dl/ # 查看文件 ll # 删除世界文件 rm -rf world world_nether/ world_the_end/ # 命名下,适配管理脚本 mv zc.jar dl.jar # 修改端口,避免冲突 sed -i 's@server-port=33301@server-port=33300@g' server.properties # 进入sysv管理目录 cd /etc/init.d/ # 查看文件 ll # 创建链接 ln -s /home/mc/github/mc/scripts/sysv/mc_control mc_dl # 重载sysv文件 systemctl daemon-reload # 启动登录分区 systemctl restart mc_dl # 查看启动状态 systemctl status mc_dl # 查看启动日志。 tail -f /home/mc/instances/dl/logs/latest.log
代理端配置分区操作
现在为止,我们已经有个wf(代理端)+dl(登陆分区)+zc(主城分区),下面就讲讲如何配置代理端来完成分区移动操作。
变更diff
修改代理的config文件,让代理端可以连接到正确的登陆分区和主城分区。
修改的这几个参数简单说明下:
- priorities: 设置下优先级,可以设置多个,让代理选择接收到用户请求,优先给转发到那个服务器。
- max_players: 最大玩家数量,会显示在用户多人游戏界面里面的,这个只是个显示,可以随意写的。
- groups: 控制哪些id应该归属那些组,bc是md_5这个作者开发的,我们需要换成我们自己的ID, 不过后面我们会采用其他的权限系统管理,这种自带的权限系统使用僵硬的很。
- server: 就是控制每个分区的, 核心是地址和名字。
效果测试
我们可以看到,进入游戏后,我们可以输入/server指令后提示我们当前在登陆分区,另外提示我们可以通过/server dl 进入登录分区, 输入/server zc进入主城区域。
进行跨区操作
分区加以区别
我们现在进入分区,没法知道当前分区是主城还是登录分区的。 我们先用木牌标记下。后面我们在通过其他的分区插件来标识。
先通过终端给我们自己添加一个管理权限
[root@mc ~]# /etc/init.d/mc_zc conn "op panda" mc=zc [root@mc ~]# /etc/init.d/mc_dl conn "op panda" mc=dl
游戏内会有这个提示的,我们通过游戏的/gamemode creative启用下创造模式,放置一些木牌。
WF重要配置说明
这个部分可以不着急看的,有需要了可以在看的。
water的配置文件分为2个部分,一个部分是BC的配置文件,一个是WF的配置文件,2个都会被WF使用到的。
BC配置文件说明: https://www.spigotmc.org/wiki/bungeecord-configuration-guide/
WF配置文件说明: https://docs.papermc.io/waterfall/configuration
常见问题
BC配置说明
配置文件还是看官方文档比较靠谱,我这里只是简单翻译和使用的经验推荐。
enforce_secure_profile: 如果设置为true,没有mojang签名公钥的玩家将无法连接到服务器。 query_port: UDP查询的启用端口。 motd: 多人游戏提示界面的信息。 tab_list: TAB按键的效果,GLOBAL_PING显示群组玩家的ping值,GLOBAL显示ping值,但是不会更新的,SERVER只是显示一个分区的。 query_enabled: 是否启用UDP的查询能力 proxy_protocol: 让你有能力支持haproxy过来的代理情况,如果你不知道你在做什么,请不要改这个配置项。 forced_hosts: 特定域名过来的直接进入特定分区。这个是默认的pvp.md-5.net: pvp,用户从pvp.md-5.net这个域名连接代理端,会被分配到pvp 这个server分区。 ping_passthrough: 默认客户端ping的是代理端,设置true会ping穿透代理到我们的默认server的,motd也会是默认server的提示。不推荐改。 priorities: 优先级,用户连接到代理端,具体那个分区是优先的。可以指定多个,如果第一个挂了,代理端会送用户连接你指定第二个分区的。 bind_local_address: 绑定本地地址127.0.0.1的监听。 host: 监听主机和端口,默认0.0.0.0是代表本机的所有ip的。 max_players: 服务器指定的最大用户数量,会在用户连接的时候显示的。 tab_size: tab页面显示的最大用户数量。 force_default_server: 这个配置项还是很关键的,如果是true,用户断开代理端在此连接,代理端会将用户放置到priorities指定的分区, 如果为false,用户断开代理端在此连接,代理端会将用户放置到用户上次最后所在的分区。建议设置为true,将登陆分区放置到priorities。 remote_ping_cache: 使用服务器的缓存,而不是每次ping都真的去给下游的分区进行一次ping. -1表示不使用缓存,人多的话可以开启下 network_compression_threshold: 这个官方也没有给说明,看名字应该是一个网络包最大值。 permissions: 权限,默认他给分了2个组,一个默认组一个管理,分别给了不同的权限。后面我们使用权限组件在详细说明吧。 log_pings: 日志记录ping connection_throttle_limit: 限流能力,如果一个用户在一旦一个IP在connection_throttle毫秒内连接了connection_throttle_limit次,它必须等待connection_throttle毫秒才能再次尝试连接。 server_connect_timeout: BungeeCord在取消连接之前将尝试连接玩家到服务器的时间(以毫秒为单位)。 timeout: 在关闭所有连接之前,BungeeCord代理应该无响应多长时间。 stats: 这个是bstat插件进行统计插件使用量的一个唯一ID,不用动他。 player_limit: 限制最大的玩家数量,这个是真的限制配置,上面的max_player只是显示值。 ip_forward: 是否转发用户ip信息+UUID信息。 需要开启的。这样后端的server看到的ip就是用户的客户端ip而不是代理端的127.0.0.1的ip地址。 groups: 设置用户和组的映射关系,上面的配置permissions是组合权限的映射关系的。后面通过权限插件来详细说明。 remote_ping_timeout: BungeeCord在取消连接之前尝试ping服务器以获得玩家个数的时间(以毫秒为单位)。 connection_throttle: 连接超限等待的时间,配合connection_throttle_limit一起使用。 log_commands: 启用命令记录,这里主要是代理端能执行的命令,你在具体分区执行的/give是不会记录的需要再具体分区看。 online_mode: 启用正版认证 forge_support: 选择你的BungeeCord实例是否支持Forge客户端。 disabled_commands: 设置全局禁用命令,可以设置一些指令禁止玩家查看你的插件列表的。后面有系列专门讲。 servers: 设置一个一个分区的。paper端,fabric端,原生mc服务端都可以的。 key名字: 就是可以/server key名字 进入特定分区的,建议弄成拼音或者英文简写。 motd: 提示信息,好像没啥用。 address: 后端分区的地址信息,ip+port的,建议配置127.0.0.1本机地址。而不是公网地址。 restricted: 组织默认玩家进入特定分区,除非明确指定你有特定分区权限。 标签:11,INFO,20,MC,群组,cmd,510,服开服,分区 From: https://www.cnblogs.com/zhaojiedi1992/p/mc_bc_start.html