背景
寒假以来,我所在的某个群里,群友们提出了一起玩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连接。