MC群组服开服教程系列三: 代理端搭建
代理端的选择
服务器人数太多话,单靠一个核心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:25577
添加登录和生存分区
我们上个主城分区已经使用paper搭建了一个启动在33301的端口上的,我们复制下文件夹,启动一个登录分区和生存分区。
具体操作如下,这里只仅仅演示dl分区的操作,生存分区同理。
# 从主城的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(主城分区)+sc1(生存1区),下面就讲讲如何配置代理端来完成分区移动操作。
变更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启用下创造模式,放置一些木牌。
关于转发
我们启动好了代理端,也配置了2个分区,通过/server 指令可以完成分区切换了, 还有个关键的信息没有弄,那就是用户ip信息和UUID等信息的转发透传。也就是代理需要将信息透传给下面的代理端。
具体配置参考官方文档:
具体操作需要下面2个步骤。
- 在代理端的config.yml 设置enable_ip_forward 为true。
- 在后端的paper服务spigot.yml中,设置bungeecord为true。
WF重要配置说明
这个部分可以不着急看的,有需要了可以在看的。
water的配置文件分为2个部分,一个部分是BC的配置文件,一个是WF的配置文件,2个都会被WF使用到的。
BC配置文件说明: https://www.spigotmc.org/wiki/bungeecord-configuration-guide/
WF配置文件说明: https://docs.papermc.io/waterfall/configuration
常见问题
BC配置说明
配置文件还是看官方文档比较靠谱,我这里只是简单翻译和使用的经验推荐。
posted on 2023-01-14 12:58 LinuxPanda 阅读(1057) 评论(0) 编辑 收藏 举报