V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Useful Links
Minecraft Wiki
合成配方
Actrace
V2EX  ›  Minecraft

Minecraft 开服——多线路教程

  •  
  •   Actrace · 2015-02-19 17:47:10 +08:00 · 9808 次点击
    这是一个创建于 3599 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Minecraft开服——多线教程
    这篇教程是写给爱折腾的服主的,包括多线路、故障转移、负载均衡的实现。
    为什么要多线路?
    因为各地的网络环境不同,有的人连接你的服务器可能会很慢。如服务器A运行着Minecraft的服务端,用户C连接服务器A很慢,但连接服务器B很快,使用服务器B作为“线路”进行游戏就能获得更好的游戏体验。这时候游戏数据是走C-B-A而不是C-A。
    基础——多线路的实现
    土豪可以买几台国内VPS,转发端口到游戏服务器实现多线路。不过对大多数人来说,自己买国内VPS是不怎么现实的。国内VPS价格普遍偏高,而单作为“线路”的话会有严重的浪费。不过好消息是,vxTrans提供这样的服务,它提供4台国内外服务器做转发服务,按流量收费。比起自己买多台VPS的昂贵费用,Minecraft产生的流量费可能只有几十分之一。

    首先,你需要在自己的服务器上开好Minecraft的服务端。这个这里就略去了,教程一搜一大把。比如你的服务器地址是216.104.43.46,端口是25565 (默认是这个)。
    http://vnet.link 注册一个账号,然后点开“服务”选择vxTrans。如下图
    
    名称那里随意填,只是作为区分的名字。入口地址选择中国-1,目的地址填216.104.43.46,目的端口填25565,然后点击建立连接点。如下图
    
    然后点击建立连接点,等待一会儿刷新页面看看,连接状态很快会从“等待连通”变成“已连通”。然后使用它给出的地址和端口号就能连接游戏了。
      
    这就完了吗?
    如果你是玩家的话,这样就已经可以了。你可以用上面的方法打造自己的专属线路,因为是流量制而不是包月制,一个人使用产生的流量费及低。如果你是服主,那这样还不够。线路是有了,但要玩家自己输端口体验可不怎么好。你需要进一步优化用户体验。

    进阶——隐藏端口信息
    首先,你得有一个自己的域名。免费的也行,申请一个免费的tk域名很简单。
    这里是入口: http://www.dot.tk/zh/index.html
    详细教程戳免费资源部落的就行。注册的时候可以选择使用自己的DNS,建议用vxDNS(和vxTrans一个网站,它们的另一个服务)。因为vxDNS支持使用API修改域名,这在之后更高阶的教程中会用到。如果不想折腾你也可以选择DNSPod,腾讯旗下的免费域名解析服务——不管怎么样,别用tk它自己的DNS就行了。

    首先在vxDNS中导入你的域名。确保域名的NS服务器是vxDNS给出的,你可以简单的新建一个记录然后试试能不能访问。这是vxDNS的域名管理界面
    
    然后添加一个SRV记录。网上很多教程称SRV是“端口转发”,这其实是一种误导。SRV记录也是域名记录的一种,只不过它包含使用的程序、协议、提供服务的地址和端口号。它和上面线路不一样,单独设置SRV记录并没有端口转发的效果,也不会加快玩家访问你的服务器。在第一个框(域名)中填入“_minecraft._tcp.cn1”,其中cn1可以自由填写。比如我这里填cn1,玩家访问的时候就是填写cn1.minecrafthelloworld.tk(minecrafthelloworld.tk是我申请的tk免费域名)。第二个(记录类型)选择SRV,第三个框(内容)的格式为“权重、空格、端口、空格、主机名”,权重填5就行,端口和主机名填写在多线路教程中获得的线路的地址和端口。比如我填写的是“5 37366 vt-cn1.vnet.link”,然后直接点“增加”添加记录。
     
    记录添加完之后,在游戏里就不用填写端口号了。
     
    超进阶——故障转移、负载均衡
    前边使用vxDNS作为域名解析服务的意义在这儿了,它有一个别的解析服务没有的优势——可以通过API切换子域名的记录。
    这里是它的API: https://vnet.link/data/support/OpenAPIv1.0.pdf
    这个怎么用呢?在上面的教程中我们知道,可以给域名添加cn1、cn2这样的子域名,加上SRV记录让Minecraft知道应该朝哪个服务器的哪个端口连接。设想下,如果有一个main记录,可以自动在cn1线路出现故障的时候解析到cn2线路上,甚至比较几条线路的延迟选择解析到最快的一条线路上,是不是很酷?
    对Minecraft线路测速的方法有很多,比如这个: https://github.com/puteulanus/McPing
    这个PHP的小程序可以模拟客户端向服务器请求数据,以获得服务器的延迟。
    访问http://mcping-5f55e.coding.io/server.php?servers={"cn1":"cn1.minecrafthelloworld.tk"}
    可以得到以下结果:
     只要在服务器上设置Cron,用脚本(bash脚本都行,Python也不错)定时通过比较不同节点的ping值、连通性,使用vxDNS的API对main子域名的记录进行及时调整,就能做到上面的那些。甚至,如果你连启动器都是自己写的,你可以在启动器里加入记录ping值得功能。vxDNS除了支持API调整记录之外,还支持对自定义的IP段做不同的解析。只要有足够多的样本数据,可以将不同IP段(比如电信与联通、不同的地域)的玩家解析到对他们最快的线路上。

    PS——额外的好处
    分线路的最大目的还是在于减少用户卡顿的可能,那么还有什么其他的好处吗?答案是肯定的。你可以不将自己服务器的IP地址公布出来,仅仅告诉玩家你的“线路”子域名,这样可以减少服务器被攻击的可能性。如果你负担不起国内高内存VPS高昂的费用,可以将开服的服务器搬到国外,比如搬瓦工4G内存的VPS,月费不到50软妹币:
    
    一般直接连接的话,这类美国低价VPS可能会卡得没法玩。但通过国内服务器的转发,可以极大提高用户连接的速度,即使比起把服务器开在国内依然会慢一些(这是必然的,线路再怎么优化数据毕竟去美国转了一圈),但依然在可以接受的范围内。

    最后的超神之路:
    再倒回来,vxTrans本质上是流量转发服务,因此,实际上可以利用vxTrans自身的几个服务节点进行流量跳转,比如从Client->CN-CMCC->JP-KDDI->Server,根据测试,vxTrans服务点之间的网络做了很好的优化,有加速的作用,从内部服务点进行二次跳转可以优化到即使在夜间高峰期连接美国地区的延迟不超过150ms。
    17 条回复    2015-04-20 16:51:00 +08:00
    Bluek404
        1
    Bluek404  
       2015-02-19 18:13:06 +08:00
    感觉租自带多线路的服务器比较靠谱
    wdhwg001
        2
    wdhwg001  
       2015-02-19 18:14:56 +08:00
    质疑“Minecraft产生的流量费可能只有几十分之一”这句话。
    因为毫无疑问的,就我的经验而言,MC在加载服务器地图时产生的流量开支其实非常巨大,尤其是空中飞行向前的时候…
    phoenixlzx
        3
    phoenixlzx  
       2015-02-19 18:18:02 +08:00
    这服务器是如何做到这么多人在线的....
    Actrace
        4
    Actrace  
    OP
       2015-02-19 18:20:29 +08:00
    @wdhwg001 相对而言。。。租用服务器的成本总是最大的。。。
    @Bluek404 土豪买国内高配服务器那倒是无所谓线路问题。。。国外高配便宜很多。。。
    Bluek404
        5
    Bluek404  
       2015-02-19 18:23:56 +08:00
    @phoenixlzx Bungeecord组建大型群组
    Troevil
        6
    Troevil  
       2015-02-19 18:30:25 +08:00
    讨厌广告!
    shikailun
        7
    shikailun  
       2015-02-19 18:36:12 +08:00
    欢迎新手加入 Minecraft 服务器 v1.8
    https://www.v2ex.com/t/171564#reply7
    phoenixlzx
        8
    phoenixlzx  
       2015-02-19 18:40:21 +08:00
    感觉这帖子要变成服主们的广告贴..
    (匿
    aiguozhedaodan
        9
    aiguozhedaodan  
       2015-02-19 18:42:38 +08:00 via Android
    好软的文章
    Bluek404
        10
    Bluek404  
       2015-02-19 18:46:45 +08:00
    感觉完全不靠谱
    或者说毫无加速效果
    http://i2.tietuku.com/5dbc44652a2a07dc.png
    显示延迟2ms,但是我ping路由器都4ms(无线网络)
    至于实际效果……我只尝试打开了下小游戏菜单
    http://i2.tietuku.com/2f882cfe6337596f.png
    http://i2.tietuku.com/087a4aae7d80c00a.png
    山东电信
    oott123
        11
    oott123  
       2015-02-19 20:03:19 +08:00 via Android
    卧槽,MC 居然支持 srv 记录,涨姿势了
    ovear
        12
    ovear  
       2015-02-19 22:12:20 +08:00
    楼主忘记了一个问题
    minecraft有anti cc,当人数多的时候(多人刷在线人数的时候)服务器处于安全考虑会直接reset。
    另外部分login插件是通过ip来判断session的。所以嘛。。
    Actrace
        13
    Actrace  
    OP
       2015-02-19 23:53:43 +08:00
    @ovear 目前已知有哪些插件是用ip来判断session的?
    shikailun
        14
    shikailun  
       2015-02-22 22:05:20 +08:00
    试用了下确实流畅了一些,不过minecraft是不是蛮耗流量的,5人左右。
    popu111
        15
    popu111  
       2015-02-23 01:23:27 +08:00
    chinabrowser
        16
    chinabrowser  
       2015-04-20 16:49:02 +08:00
    我用自己的香港SoftLayer做转发 到us.shotbow.net延迟才200ms
    用这个什么vxTrans 延迟直接290ms
    广西柳州 电信12M FTTB
    chinabrowser
        17
    chinabrowser  
       2015-04-20 16:51:00 +08:00
    而且目的地址只能是一个IP 输入域名就自动换成IP= =
    让目的地址的负载均衡根本无用...
    还不如用rinetd
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2828 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 03:34 · PVG 11:34 · LAX 19:34 · JFK 22:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.