历时20天的修复工程……

发生甚麽事了

起因是腾讯云在11月24号封禁了我原来的服务器,具体原因就不细嗦了,总之大家记得不要把科学上网端口暴露到公网。可惜了当初买的超低价服务器……

file

由于临近期末、疫情形势、返乡隔离等原因,拖了20天才修好。

原来的服务器上部署有网站服务(没错就是你在看的这个)、Frps、Grasscutter、Minecraft等一堆东西,还为某大佬提供测试平台,为我的各个机子做内网端口穿透,而服务器内存只有4G,端口混乱不堪,可谓是不堪重负。刚好趁这次来一波统一管理。

选购服务器

鉴于不想再被莫名其妙封掉和隔三差五打电话改备案,我准备购买非大陆服务器。我在各个云服务器厂商逛了一圈,没有找到价格和配置符合我预期的,最终分别买了阿里云和腾讯云的轻量应用服务器。因为5天内可以退款所以可以随便测。在重邮网络对这些服务器进行网络测试,结果如下(详细数据未保存,只做大概评价):

  • 阿里云香港:不走CN2,延时很高,丢包率也很高,非常影响使用
  • 腾讯云香港:不走CN2,延时和丢包率比阿里的稍微好点,但是也没好到哪去,影响使用
  • 阿里云新加坡:延时较高,丢包率还好,但是晚上服务器会失联,非常恐怖,影响使用
  • 腾讯云东京:便宜的都卖完了,测试了下高配的,完全访问不到,也许换个IP会好点,但是懒得换IP再测,非常影响使用
  • 腾讯云首尔:延时贼高,丢包率大,非常影响使用
  • 腾讯云硅谷:延时高,但是连接很稳定,可以考虑
  • 腾讯云多伦多:延时比硅谷高,连接稳定,可以考虑
  • 腾讯云孟买:阿三境内的服务器,便宜但丢包率和延时非常恐怖,终端都能给我丢没了,非常影响使用(写这篇文章的时候促销结束了,好像也卖完了)

搬瓦工找了一圈都好贵,延时又高,偶尔有便宜的配置有点拉,也许我还缺乏在搬瓦工找服务器的经验?

所以一圈下来我还是选择了腾讯云位于成都的轻量应用服务器(选成都是因为离学校近一点,下一节细嗦),每月85软妹币咬咬牙掏了出去。为了防止以后又被封,要慎重开放防火墙端口和编辑网站内容。

file

组建k8s集群

服务器配置不是很高,要运行之前的那一堆服务还是很吃力,不过 k8s 可以解决这个问题。

在红岩网校工作站,我学习到了先进的容器编排系统 Kubernetes 。用 k8s 组建集群,将这一堆服务分散到不同的节点上运行,然后将 entrypoints 统一到公网服务器即可。

在学校红岩网校的老机器T610上开一台KVM,在先进的红岩云上开一台PVE,把家里的闲置电脑也拿来和公网服务器一起组成集群。不过上述节点除了公网服务器外,都没有ipv4的公网IP,学校的两台倒是有ipv6的公网IP,可惜腾讯云轻量应用服务器没有ipv6(T_T)。要把他们连接在一起,可以用n2n组网实现。关于n2n我会在另外一篇文章详述。公网服务器作为 supernode 节点,然后为所有服务器配置edge节点。

组建完之后测试下延时,因为红岩网校的两台主要服务器在重庆,距离成都的公网服务器很近,所以延时很小。
file

过程中还有点小插曲,红岩网校的光纤寄了,所以两台服务器不能通过网校的ipv4连接到公网服务器了。不过还好有绑定重邮内网的网卡,ipv6可以公网直连但不能组建集群,ipv4登陆一下学校宽带账号就能用啦。

然后我用 Kuboard 非常熟练地无脑装了k8s(那个网络测试列表可不是我自己愿意测的,鬼知道我装了多少遍k8s呜呜呜)。 Kuboard 可见我的另一篇文章。

迁移服务

导出原有数据

腾讯云封服务器封的可真彻底,公网内网都给封咯,只能在控制台用VNC操作离线的服务器。研究了一段时间,发现可以用云硬盘挂载上去,然后备份数据到硬盘上,再把云硬盘挂载到别的云服务器上导出。于是就艰难地用网页VNC把有用的数据备份过去了。(注:云硬盘只能挂载到同一地域的同一可用区的服务器上,备份好了可以将新服务器光速退款,要取经的注意下)

我好不容易备份好数据之后,发现将服务器关机可以直接导出完整的系统镜像……总之备份了就好。

证书

网站没有证书会让我强迫症发作。我尝试使用 cert-manager 来自动签发证书,可惜一直出现错误,最后受不了了自己写了个签证书的 CronJob 。

迁移网站服务

迁移网站服务(没错就是你在看的这个)。为了数据持久化,我尝试了NFS存储类,部署 Deployment ,包含一个 mysql 容器和一个 wordpress 容器。

事实证明NFS的效率很低。当 pod 和 NFS 服务器不在同一节点时,访问网页慢的离谱,倒也情有可原,因为不在同一地域,而且公网服务器带宽只有 6Mbps 。但当我将 pod 调度在 NFS 所在服务器时,访问速度虽有所改善但仍然令人无法忍受。最后我换成了 hostpath 存储,速度果然改善了不少。最后不得不牺牲高可用选择了 hostpath 存储,将 pod 固定调度在某一固定节点上。

其他

Minecraft 服务器的性能至关重要,而且玩家在线频率挺高的,不能轻举妄动,截止目前还是运行在红岩云上,使用Frp端口穿透来实现公网访问。
Grasscutter 还没有开始迁移。
之后准备把网校的那套CI/CD流程抄过来,用起来很丝滑,不过看来是很庞大的工程。
总之百废待兴,后面会慢慢考虑全部迁移至 k8s 。

教训

  • 不要瞎几把开公网的科学上网端口,腾讯云整天扫来扫去就等着封禁服务器呢。如果本地确实需要用,就不要对这个端口放行防火墙。

  • 开放端口多了一定要做好记录,不用的及时关掉,不然忘了容易出事(比如我就是)。