DreamVoid 11/21/2020, 1:09:07 PM
本帖最后由 DreamVoid 于 2021-5-22 12:04 编辑

前言
RedisBungee也算是一个神器了,主要功能就是将多个BungeeCord端的管理集合到一块。
虽然是付费插件,但是已经开源了。感兴趣的小伙伴可以自行构建。
Wiki翻译过程中或多或少用到了Markdown,奈何论坛对Markdown的支持并不完美,所以可能会有视觉上的误差。

帖子上方目录可点击。

参考链接:

外部链接:

最后更新时间:2020年11月21日

目录:




2021.12 数据,可能有更多内容
前言
RedisBungee也算是一个神器了,主要功能就是将多个BungeeCord端的管理集合到一块。
虽然是付费插件,但是已经开源了。感兴趣的小伙伴可以自行构建。
Wiki翻译过程中或多或少用到了Markdown,奈何论坛对Markdown的支持并不完美,所以可能会有视觉上的误差。


帖子上方目录可点击。


参考链接:

外部链接:

最后更新时间:2020年11月21日


目录:
  • 首页
  • 安装
    • 安装
    • 用法
    • 配置
    • 常见问题
  • 用法
    • 命令
    • API
    • 插件






首页
RedisBungee是先进的BungeeCord玩家同步系统。
RedisBungee使用Redis存储并共享数据。
RedisBungee当前正在被多个大型并知名的Minecraft服务器中使用,如果您想发展您的服务器,它可以很轻松的添加到您的服务器中。


功能
  • 同步大多数玩家信息,包括服务器在线人数。
  • 优雅的玩家分布,如果其中一个BungeeCord服务端出现故障,您的服务器仍会继续运行,并且您的玩家将会分布到其他可用的BungeeCord服务端中。
  • 高度拓展,RedisBungee支持数千个玩家同时在线。不相信吗?尽管尝试!
  • 精心优化,只为最棒的性能体验。
  • Redis技术支持,一个拥有许多可用依赖的密钥库。
  • 易于集成和使用,多数插件都为RedisBungee提供支持。
安装
  • 安装
  • 用法
  • 配置
  • 常见问题
用法
  • 命令
  • API
  • 插件






安装
RedisBungee是先进的BungeeCord玩家同步系统。
安装RedisBungee并连接到您的BungeeCord服务端非常容易。


要求
  • 一个Redis服务器。
    • 如果您正在运行Debian 8或Ubuntu 14.04及以上,您可以使用root用户运行指令 apt-get install redis-server 快速安装。
    • 如果您正在运行CentOS 6,您需要下载并编译Redis的源代码。从0.3.8版本开始,RedisBungee不支持任何EPEL版本
    • 如果您正在运行CentOS 7, 您可以运行指令 yum install redis 快速安装。
    • 如果您的系统不支持直接安装Redis,或其版本不在2.6及以上,您需要到其官方网站下载Redis。
    • (译者注)如果您正在运行Windows,您可以参阅在Windows上安装Redis
  • 确保您用于运行BungeeCord服务端的所有服务器的系统时间同步。如果一个服务器和另一个服务器的系统时间差大于27秒,RedisBungee将会出现问题。配置NTP通常可用解决此问题。

RedisBungee 0.3 及以上
  • 下载RedisBungee插件文件并放置在BungeeCord服务端的插件文件夹。
  • 启动一次BungeeCord服务端,然后关闭。
  • 修改位于 plugins/RedisBungee/config.yml 的文件,调整各类配置尤其是“server-id”项和“redis-server”项。您可以参阅“配置”一节了解更多信息。
  • 再次启动BungeeCord服务端,然后即可开始享受!

RedisBungee 0.2.5 及以下
  • 下载RedisBungee插件文件并放置在BungeeCord服务端的插件文件夹。
  • 启动一次BungeeCord服务端,然后关闭。
  • 修改位于 plugins/RedisBungee/config.yml 的文件,调整各类配置尤其是“server-id”项、“redis-server”项和“linked-servers”项。确保“linked-servers”项中包含您的所有BungeeCord服务端。
  • 再次启动BungeeCord服务端,然后即可开始享受!

有关模块的注意事项
从BungeeCord版本#787开始,BungeeCord加入了一个模块系统。RedisBungee 0.3 将会在这些模块加载后自动加载,但这仅支持较新版本的BungeeCord。如果您必须使用0.2.x版本,您必须禁用cmd_list和cmd_find以让RedisBungee可以接管这些命令。请按下列步骤操作:
  • 停止BungeeCord。
  • 删除“modules/cmd_list.jar”文件和“modules/cmd_find.jar”文件。
  • 编辑“modules.yml”文件并移除以下字段:“jenkins://cmd_list”和“jenkins://cmd_find”,然后保存文件。
  • 重新启动BungeeCord。






用法
RedisBungee是先进的BungeeCord玩家同步系统。
本页介绍了如何配置和使用RedisBungee。


配置您的BungeeCord服务器
此步骤很大程度上取决于您如何配置BungeeCord。


我没有任何其他BungeeCord插件,或者其他插件不与玩家交互。
在此情况下,RedisBungee通常“开箱即用”,并且不需要任何额外配置。但是,请参阅下文中的Bukkit部分。


我有与玩家交互的BungeeCord插件。
在这种情况下,您将可能需要删除这些插件并调整BungeeCord设置,或者配置/更新您的此类插件以让RedisBungee正常工作。


那么我的Bukkit插件呢?
通常,依靠player-targeted信息执行操作的插件(比如连接信息)可以与RedisBungee正常工作。但是需要注意的是,依靠其他玩家和服务端支持的插件可能无法正常工作(比如消息传递)。
译者注:本段包含一些不便翻译的单词,因此保留原文


添加新的BungeeCord服务端
添加新的BungeeCord服务端非常容易:
  • 配置新的BungeeCord端的配置与现有服务端相同
  • 依照安装指南进行配置,但请确保server-id唯一,并且redis-server项和其他BungeeCord端的配置一致。
不正确的执行以上步骤将导致问题





配置
RedisBungee是先进的BungeeCord玩家同步系统。
RedisBungee允许您修改一些配置来指定Redis服务器和其他的一些行为.


例子
译者注:以下是译者翻译后的配置文件

代码:

  1. # RedisBungee 配置文件
  2. # 请阅读指南: https://github.com/minecrafter/RedisBungee/wiki

  3. # 您使用的Redis服务器
  4. # 您可以在 http://redis.io/ 下载Redis
  5. redis-server: 127.0.0.1
  6. redis-port: 6379
  7. # 可选: 如果您的Redis服务器需要身份验证,则您需要设置连接密钥
  8. redis-password: ""
  9. # 同时连接到Redis服务器的最大数量
  10. # 默认值为8。正常情况下不应该修改此设置,
  11. # 除非您的服务器由很多玩家或有一些效率低下的插件。
  12. max-redis-connections: 8

  13. # 当前BungeeCord的ID,必须唯一!
  14. server-id: test1

  15. # RedisBungee是否应注册并接管BungeeCord的一些自带命令
  16. # 通常,您会需要RedisBungee接管自带命令,但是在某些情况下,
  17. # 您或许会希望使用其他插件,此时可以设为false
  18. #
  19. # 如果您只想让玩家无法使用这些命令,默认的BungeeCord的权限系统
  20. # 或您使用的权限组插件即可做到
  21. # (译者注:参阅“命令”的“权限节点”一栏)
  22. #
  23. # 请注意,从787版本开始,RedisBungee接管的大部分命令以移动至模块(modules)
  24. # 并且这些命令必须手动禁用以成功接管。
  25. register-bungee-commands: true

  26. # RedisBungee将不会对以下列出的IP地址修改BungeeCord返回的响应信息,
  27. # 对于需要使用自动重新启动脚本的服务端很好用。
  28. # 译者注:“BungeeCord返回的响应信息”指的是连接到当前BC端的人数等信息,RedisBungee会修改这个信息(比如人数)为整个服务器连接的人数
  29. exempt-ip-addresses: []



配置
redis-server、redis-port和redis-password
这些配置可以帮您指定连接到的Redis服务器。redis-server为服务器IP地址,redis-port为Redis绑定的端口号,redis-password为您设置的身份验证密钥(如果您设置了)。


max-redis-connections
不要修改此设置。默认值通常可以正常工作,仅在建议修改时才修改此项。


server-id
此配置用于RedisBungee标识当前BungeeCord端。这是非常重要的配置 - 不能有两个BungeeCord端使用相同的ID,因为这将会导致数据不一致问题。如果您一定要设置为相同的,那么仅当其中一个服务端离线20秒以上,另一个BungeeCord端的RedisBungee才会启用。


register-bungee-commands
此配置允许您决定是否让RedisBungee注册并接管一些BungeeCord自带命令。其他命令(比如 /serverid、/serverids和/sendtoall)和基本的RedisBungee功能仍会正常工作。


exempt-ip-addresses
如果发送给服务端的Ping请求的IP地址处于此列表内,则RedisBungee不会修改BungeeCord返回的响应信息。
译者注:“BungeeCord返回的响应信息”指的是连接到当前BC端的人数等信息,RedisBungee会修改这个信息(比如人数)为整个服务器连接的人数





常见问题
RedisBungee是先进的BungeeCord玩家同步系统。


什么是RedisBungee?
RedisBungee是一个玩家同步系统。适用于大型、专业的Minecraft服务器。


但是这到底是什么呢?
RedisBungee:
  • 可以通过简单的API方便的管理您拥有的所有BungeeCord服务器的所有玩家
  • 可以将您的所有服务器连接到一起。
  • 不能重新实现BungeeCord的API,因为这很麻烦。
  • 不能自动将您的玩家分布到不同的服务器。
  • 不能同步您的BungeeCord配置。
  • 不能替代BungeeCord的force hosts。

什么是Redis?
引用自官方介绍:
Redis是一个以BSD协议开源的、高级的键值存储。通常被称为“数据结构处理服务器”,因为其包含字符串、哈希值、列表和集合。

我能在Windows使用RedisBungee吗?
是。据我所知,一些RedisBungee的用户正在使用Windows,并且可以正常工作,但是RedisBungee并不建议这样。您必须使用Redis的Microsoft Open Technology端口绑定端口。您也可以使用运行Linux的专用服务器运行Redis服务器,然后在Windows上运行BungeeCord服务端。


RedisBungee支持的最低的Redis版本是多少?
RedisBungee(从0.3.8起)需要Redis服务器的版本为2.6及以上,因为需要Lua脚本支持。欲获得最佳性能,请使用Redis 2.8.10及以上。


当我尝试关闭BungeeCord时,RedisBungee输出了很多错误!
请更新BungeeCord到#1025及以上,即可修复此问题。
译者注:建议始终使用最新版本的BungeeCord。


RedisBungee无法连接到我的Redis服务器!
  • 请确认您的Redis服务器正常运行。
  • 请确保您的Redis版本在2.6及以上。
  • 请确保您可以从域名连接到您的Redis服务器。
  • 如果您在Redis配置中设置了身份验证密钥,则还需要在RedisBungee的配置文件中的redis-password项设置密钥。
  • 尝试使用最新版本的RedisBungee。

Redis Sentinel可以同时和RedisBungee一起运行吗?
RedisBungee当前并不支持Redis Sentinel,因为目前对此的需求不大。将来有可能会支持。
译者注:鉴于作者已经停更,想要支持还是自己改代码吧。


我已经安装RedisBungee,但是无法与另一个BungeeCord端的玩家交互!
首先,请查看此页面了解支持RedisBungee的插件。如果您的插件支持RedisBungee但并不工作,请联系插件作者。


如果您安装的插件不在列表中,则说明它们可能不支持RedisBungee。请记住,RedisBungee不是魔法。它不会立即显示服务器上的所有玩家,因为这会消耗大量本不必消耗的资源。请联系作者(或其他开发者)以让他们使用RedisBungee的API。如果您无法这样做,请与我联系(你必须给点小费)。


我已经安装RedisBungee,但是遇到了方法和类相关的错误!
除非您愿意自己修改插件源代码或为插件付费,否则请不要想着支持旧版本的BungeeCord或Spigot。我们几乎没有想要支持旧版本的Minecraft,因为我们的插件主要基于Minecraft的最新版本开发。


我更新了BungeeCord,然后接收到AccessControlExceptions错误
更新RedisBungee以解决此问题。


我已经安装RedisBungee但是我的TAB列表并未同步!
RedisBungee本身并不能同步TAB列表,因为这不是本插件应该做的。您可以考虑使用诸如BungeeTabListPlus等插件。


我的其中一个BungeeCord服务器没有显示正确的服务器数量,或玩家列表是错误的。
  • 请确保您的配置文件无误。
  • 请确保您可以连接到Redis服务器。
  • 请确保所有BungeeCord服务端已经启动。
  • 请确保运行BungeeCord的服务器的系统时间是同步的。如果BungeeCord服务端所在服务器在30秒内没有更新特定的时间戳,RedisBungee将自动移出此BungeeCord服务端。我已经收集了一些有关Linux发行版本的说明。
  • 请确保所有BungeeCord服务端运行相同版本的RedisBungee。CI构建版特别容易出现此情况,因为经常对master分支进行实验性改动。(译者注:现在CI貌似都不复存在了)
  • 请确保您正在使用最新版本的RedisBungee。
如果以上步骤均无法解决问题,请尝试寻求支持服务。(译者注:请知悉,本插件已经不再维护)


RedisBungee正在刷屏!
译者注:acting up不知道怎么翻译,根据语境,“刷屏”是最好的翻译


  • 您的插件可能向RedisBungee发送了过多的请求。首先尝试移除所有能向RedisBungee发送请求的插件。
  • 尝试在redis.conf文件中设置maxclients为0。需要重新启动Redis服务器以应用更改。

我需要让Redis能够访问外部网络的BungeeCord服务端!
在继续下面的操作前,请阅读http://redis.io/topics/security
将Redis配置文件的“IP绑定”值设为0.0.0.0或者直接注释掉。如果您在意安全问题,还可以更改Redis服务器绑定的端口。


您有两种选择:
  • 限制对Redis服务器的访问
    • IPTables
      • iptables -A INPUT -s 127.0.0.1 -p tcp --dport 6379 -j ACCEPT
      • iptables -A INPUT -s <BC端IP地址> -p tcp --dport 6379 -j ACCEPT
      • iptables -A INPUT -p tcp --dport 6379 -j DROP
  • 其他方法
    • 您也可以使用加密连接,推荐使用spiped
    • 设置密码
      • 在您的Redis配置文件中设置身份验证密码。另请注意,密码是使用明文不加密发送的(您可以使用SSL,但是这会造成性能损失,仅建议小型服务器使用)。您还需要在RedisBungee配置中设置redis-password为您设置的密码
现在,您可以重新启动Redis服务器和BungeeCord服务端。


我想将功能X添加到RedisBungee!
RedisBungee有意限制其作用范围。通常,如果其涉及到当前版本的BungeeCord不可用的功能,除非有可用例子,否则添加的可能性极低。


源代码在哪里浏览?
本插件在GitHub开源并使用Unlicense协议(在2015年6月9日之前,我使用WTFPL协议)。但是,我更希望您可以提交一个PR。


您拥有Maven仓库吗?
md_5-snapshots http://repo.md-5.net/content/repositories/snapshots/
译者注:有对原文进行小幅修改以便阅读。





命令
RedisBungee是先进的BungeeCord玩家同步系统。
RedisBungee添加了几个实用的命令并接管一些BungeeCord的自带命令。[td]
命令
权限节点
描述
/glist
bungeecord.command.list
/glist本身只会返回玩家数量,/glist showall则可以显示所有玩家。
/find
bungeecord.command.find
/find没有任何实质性的改动。
/lastseen
redisbungee.command.lastseen
/lastseen允许您查看某个玩家的最后在线时间。
/ip
redisbungee.command.ip
/ip允许您查看指定在线玩家的IP地址。
/sendtoall
redisbungee.command.sendtoall
/sendtoall允许您发送命令到所有BungeeCord端并以控制台身份执行。
/serverid
redisbungee.command.serverid
/serverid返回您当前连接到的RedisBungee端。
/serverids
redisbungee.command.serverids
/serverids返回服务器中所有已注册(已连接)的服务器ID。
/pproxy
redisbungee.command.pproxy
/pproxy返回指定玩家连接到的服务器的ID。
/plist
redisbungee.command.plist
/plist和/glist相似,但是只会显示当前BungeeCord已连接的玩家。此命令允许一个附加参数,即/plist、/plist atl1和/plist atl1 showall都对atl1有效。






API
RedisBungee是先进的BungeeCord玩家同步系统。
RedisBungee提供好用方便的集成方式。


API稳定性
通常来说,API-breaking(译注:破坏性API)的更改仅在较新的版本中(例如0.2.5到0.3)可用。


推荐:RedisBungee Java API (BungeeCord)
集成RedisBungee的最佳方法是使用RedisBungee Java API,这种方法可用于BungeeCord插件。


有关此API的Javadoc可以在md_5的构建服务器获取。


Maven
下列仓库包含了所有RedisBungee的构建:


md_5-snapshots


之后,您可以在您的插件项目中添加以下依赖项:


com.imaginarycode.minecraftRedisBungee0.3.6-SNAPSHOT provided


译者注:有对原文进行小幅修改以便阅读。


插件消息传递 (Bukkit)
在Bukkit服务端中,您可以通过使用插件消息传递API来集成RedisBungee的一些功能。RedisBungee会监听此API (RedisBungee),并且传递的消息应均为 Data{Input,Output}Stream 格式。


接口例程
发送消息

代码:

  1. ByteArrayDataOutput out = ByteStreams.newDataOutput();
  2. out.writeUTF("PlayerCount");
  3. out.writeUTF("ALL");
  4. player.sendPluginMessage(MyPlugin.getInstance(), "RedisBungee", out.toByteArray());
解析ServerPlayers的返回内容

代码:

  1. private Multiset<String> deserializeNoMembers(ByteArrayDataInput input) {
  2.     int collectionSize = input.readInt();
  3.     Multiset<String> multiset = HashMultiset.create();
  4.     for (int i = 0; i < collectionSize; i++) {
  5.   String in = input.readUTF();
  6.   int cnt = input.readInt();
  7.   multiset.setCount(in, cnt);
  8.     }
  9.     return multiset;
  10. }

  11. private Multimap<String, String> deserializeWithMembers(ByteArrayDataInput input) {
  12.     int collectionSize = input.readInt();
  13.     Multimap<String, String> multimap = HashMultimap.create();
  14.     for (int i = 0; i < collectionSize; i++) {
  15.   String in = input.readUTF();
  16.   int cnt = input.readInt();
  17.   for (int i1 = 0; i1 < cnt; i1++) {
  18.    String in2 = input.readUTF();
  19.    multimap.put(in, in2);
  20.   }
  21.     }
  22.     return multimap;
  23. }
定义
  • 玩家
    • 名称或UUID (Java或Mojang)
命令


[td]
子通道
参数
响应
注释
PlayerList
Server或ALL
此命令将会返回使用逗号分隔的玩家列表(参见注释)。
由于存在一个Bug (0.3.2已修复),第一个字符串将是Players而不是PlayerList
PlayerCount
Server或ALL
此命令将会返回玩家人数。
LastOnline
参见定义部分
此命令返回后,由getLastOnline()接口输出一个长整数。
译者注:给出的链接提示403,因此无法得知此接口的具体用法。
Proxy
此命令将会返回当前BungeeCord代理的ID
于0.3.6版本加入 (2015年6月29日)
ServerPlayers
COUNT或PLAYERS
此命令将会返回参数指定的类型,然后为排序后的multimap
于0.3.6版本加入 (2015年6月29日) 译者注:multimap实在不知道怎么翻译,应该是字符串一类
Redis PubSub
RedisBungee支持Redis PubSub。将一个命令通过redisbungee-allservers从其中一个BungeeCord服务端发布到所有服务端执行,或通过redisbungee-&lt;SERVERID&gt;发布到指定的一个服务端执行。从RedisBungee 0.3版本开始,您也可以从单独的PubSub通道上监听PubSubMessageEvent事件。参见registerPubSubChannels()unregisterPubSubChannels()PubSubMessageEvent译者注:有对原文进行小幅修改以便阅读,但访问后均为403错误
如果您需要调用其中的命令,请确保来自RedisBungeeCommandSender!


不推荐:使用RedisBungee数据集进行集成(Tinkering)
尽管可以实现,但是这将在更待RedisBungee的数据模式后引发问题(这种问题很常见)一个很好的例子是从版本0.2.x升级到0.3.x,插件将开始存储UUID而非用户名。RedisBungee尽一切可能以人性化的方式从其他插件中隐藏自身内部的一些信息,由此您就可以轻松的进行后端更改。
译者注:这里应该是作者在说升级到0.3版本可以避免在后台改东西的时候其他插件偷数据(不过一个BC端有什么数据好偷的呢)





插件
RedisBungee是先进的BungeeCord玩家同步系统。
下方(详细的)插件列表均支持RedisBungee。如果您的插件支持RedisBungee,请联系我并添加到此页。


自动集成
这些插件通常在RedisBungee环境下“开箱即用”
手动集成

592764254 11/22/2020, 5:14:53 PM
这插件是不是已经作者弃坑了

第一页 上一页 下一页 最后一页