寒假期间使用HAProxy,wireguard,Velocity在多线环境下负载均衡转发mc连接以联机的实践

背景

寒假以来,我所在的某个群里,群友们提出了一起玩mc的想法,于是就由我来进行mc服务器的部署工作。

架构演变

本地部署

一开始,我在具有公网ipv4的家里待着,所以开服就是一件很简单的事情:

  • 在ikuai上配置ddns和端口转发
  • 在电脑上运行mc服务端

腾讯云部署

由于春节期间Sudoer本人隔几天就要带上ta的电脑进行迁徙,并且迁徙的下一站并没有公网ipv4(其实连ipv6也没有), 所以将mc服务迁移到云上是很实际的一种做法。

Sudoer购买了腾讯云的4c16g 12Mbps 2000G月流量的轻量应用服务器,在其上运行了mc的服务端。

配置Velocity以从其他腾讯云服务器通过内网转发mc连接给玩家更好的体验

Velocity是一个用于mc服务器的反向代理软件,使用java开发。

由于12Mbps的带宽对于那个整合包来说并不是很够用,群友的延迟增长了很多。 并且Sudoer本来就有网站需要托管在腾讯云上, 所以Sudoer购买了3年的BF1实例,选择按流量计费,在其上部署了Velocity。 由于轻量应用服务器的VPC默认不与其他云产品互通,Sudoer另外在腾讯云上配置了云互联。 现在玩家可以连接BF1实例的地址来进入服务器,且不受到12Mbps带宽的限制。

然而,这种做法的弊端是明显的:Sudoer需要支付0.8元/GB的出网流量费用。即使提前购买流量包以抵扣,每GB成本也有0.75元。

阿里云部署

Sudoer在逛阿里云(因为需要在阿里云修改域名解析设置,所以会逛)的时候发现, 阿里云目前有一个“学生专属算礼包”活动,性价比很高。 于是Sudoer花钱购买了389元的科创包,该科创包有2000元额度可以抵扣指定按量付费实例的费用(不含网络费用)。 购买后,Sudoer开了一台杭州地区u2i 8c16g实例,并将之前的腾讯云轻量应用服务器退款(由于才用几天,全额退款了)。

2000元额度可以维持这台实例55天的运行,足够了。

使用阿里云的轻量应用服务器以节约流量费用

阿里云提供了一个月的轻量应用服务器试用。与腾讯云不同的是,阿里的轻量应用服务器提供了200Mbps的峰值带宽(但不保证服务质量)。 不过mc服务器这种对稳定性要求不是很高的应用来说,网络的服务质量不重要。并且阿里的轻量应用服务器不限流量,这是非常好的。

所以Sudoer在阿里的轻量服务器上部署了Velocity以转发mc流量,这样大大节约了流量费用。目前,这台轻量服务器已经转发了150GB的流量,给Sudoer省了很多钱。

未来:将mc服务端搬回本地,使用HAProxy进行负载均衡

Sudoer在学校的网络设施情况

Sudoer在学校有三条宽带和一个CPE,三条宽带均为移动。 每条宽带稳定的上行带宽均为20Mbps,不是很高。

wireguard虚拟组网配置

目标:每条宽带上都有一个wireguard隧道。

实现:Sudoer在阿里的轻量服务器上安装wireguard,开三个wireguard interface,分别监听51821、51822、51823端口。 在本地ikuai上设置端口转发,对轻量服务器ip这几个端口的数据包分别分流到三条宽带上, 实现每条宽带一个wireguard隧道。

HAProxy配置

目标:负载均衡,并让后端可以拿到正确的源ip。

实现:

global
    log /dev/log local0
    maxconn 10000
    daemon

defaults
    log global
    mode tcp
    timeout connect 10s
    timeout client  1m
    timeout server  1m

frontend mc_front
    bind *:25566
    default_backend mc_back

backend mc_back
    balance source
    hash-type consistent
    option tcp-check

    server mc1 10.13.3.11:25565 check send-proxy
    server mc2 10.23.3.11:25565 check send-proxy
    server mc3 10.33.3.11:25565 check send-proxy

目前先监听25566端口,因为阿里云上的mc服务器仍然在运行。

Velocity配置

在Velocity中设置haproxy-protocol = true,并安装HAProxyReduce插件,设置插件的HAProxy白名单,以同时允许用户直接连接到Velocity和通过HAProxy连接。