hServer AIO升级纪实

2023 年 10 月 16 日 星期一(已编辑)
/ , ,
3
这篇文章上次修改于 2024 年 2 月 24 日 星期六,可能部分内容已经不适用,如有疑问可询问作者。

hServer AIO升级纪实

本文原撰写于 2023.10.16

缘起

hServer在迁移前使用Windows 10 Pro。当时做出选择的原因主要是易用性,毕竟Windows是我用得最熟悉的操作系统,无论在配置如文件共享、代码托管还是游戏服务器方面都非常方便,基本就是一通Next的事。而且,其独有的IIS服务使得它在创建网络服务上有一定的优势,再结合我曾经非常喜欢写ASP.NET Core应用程序,优势更加明显。

但随着Windows的发展以及对其的深入使用,它的短板也逐渐暴露。Windows Update是驱使我更换Linux的重要原因。有几次登录服务器后台,都发现PowerShell窗口无缘无故地消失,经过查询系统日志才发现,原来是Windows Update重启了操作系统,一周之内甚至可以达到两次甚至更多。其次,当时服务器上运行的应用程序几乎都是直接安装在Windows上,并没有清晰的层级划分,导致在管理时会有些不方便。

在是否全面拥抱虚拟化上,VMWare的EXSi吸引了我,毕竟想同时跑NAS和Linux,使用EXSi似乎可以更方便,但后来听说有一些兼容问题,加上Proxmox也是直接基于Linux环境制作的,也就是说可以使用Linux直接搞虚拟化,而不用借助额外的EXSi,自然我的眼光也就从其上移开了。

曾经与网友聊天时,不止一次被安利过Red Hat的RHEL,也申请过免费的许可证。于是,垂涎RHEL的我,抱着再试试Linux的心态,以及对更科学的应用程序层级划分的渴求,第三次踏上了给hServer更换操作系统的旅程。而这一折腾,就是整整两天。

硬件准备

由于已经有了一台服务器,所以理论上不需要准备什么。但为了迁移数据,以及不知从何而来的想法,我还是准备了以下两个组件:

  • SuperMicro X11SCA-F 主板
  • Seagate Exos 7E10 8T机械硬盘(翻新盘)

选择这块主板最主要的原因是其上的IPMI功能吸引了我,毕竟觉得远程访问服务器太酷了。另一原因是目前的主板坏了一个SATA口,而且一个M.2插槽上由于螺丝无法卸下而导致无法安装另一块M.2的固态硬盘。

而这块硬盘的功能就很简单了:从Windows存储池上转移数据,再导入回新的系统中。

过程

数据导出

因为原本的存储池中已经存储了将近5TB数据,而我现有的空闲硬盘,无论从数量还是容量上,都无法存储这么多的数据,这就是我入了7E10的原因。提前将新的硬盘格式化成了exFAT格式(伏笔),用FastCopy将将近整个存储池的数据都导了出来。

为了尽可能节约导出时间和回注时间,我删除了所有node_modules文件夹以及当时能用Everything检索出的.NET项目下的binobj文件夹。但是由于Everything本身的某些未知原因,检索并不完全。但我当初应该想到将Rust Cargo项目下的target文件夹也删除。毕竟小文件才是数据转移中耗时最多的项目。

而为了旧系统上安装的TeamCity、YouTrack等服务,我又分别用其内的备份功能单独备份。

这个过程持续了接近24小时。所有数据导出完毕之时,就是和旧系统的告别之时。

硬件篇

其实本来硬件部分就是换下老主板,拆下其上的CPU、内存、硬盘,再更换到新主板上,开机,一次就能点亮。但无奈购买时没考虑到散热的问题,导致旧主板上的散热器无法安装到新主板上。这里我有一个疑问,8代消费级主板上的散热扣具是115X的,而超微的这块主板对散热扣具的要求是1700,正巧Intel 12代主板的散热要求也是1700的扣具,对比下来很迷。

于是只得连夜外卖了一份1700扣具的散热器,不过失算了,应该只买扣具而不买散热器的,毕竟也就下面的扣具有点区别,其它地方都一样。美团外卖果然啥都能送,晚上七点还给我送散热器 > <

在安装硬盘是居然发现一个M.2硬盘槽的固定硬盘的组件居然失踪了,询问商家才知道原来他们拿到的时候就没有这个东西。Hmmmm,看来只能安装一块M.2硬盘了,悲。

接下来顺利地安装完了硬件系统。接电,开机!

不出意外的话,意外就要发生了。只有主板上的俩绿灯闪来闪去,显示器没反应,风扇也不转。询问了商家也无果。但这时以我曾经玩Wake on LAN和对IPMI浅浅的认知,我觉得应该可以通过连接IPMI的后台来启动服务器。果不其然,接上网线登录后台,就发现了开关机的控制选项。算是曲线救国成功了吧。

软件篇

在整个迁移过程结束后,我才整理出来了这样一份硬件和软件的图,这里就提前放出,让大家能够更好地理解我接下来干了些什么。并且以下为了更加清晰地叙述,重新排列了某些操作的顺序。

【图】

为了使用安装盘内的软件包,而不去Red Hat的服务器上下载软件包。我选择了安装时先不忙着激活,而在安装后使用个人的License激活,有效地减少了系统的安装时间。

安装后准备部署容器服务,起初我想先部署Grafana试试水,结果发现Red Hat认为“Docker已死”,全盘转移到Podman上,而且在RHEL的Cockpit中也提供了可视化的容器管理。既然Podman是为了替代Docker而生,那也就兼容Dockerfile。因此在部署新容器的过程中,除了想运行alias docker=podman之外,没有遇到太大的困难。

部署所有容器时,我都使用的是映射本地目录,而不是创建volumes,因为还不够熟悉。正巧也学习了Docker Compose,并且用第三方提供的Podman Compose搞NTR。

Grafana的部署非常顺利,后续也部署了用于监控机器运行数据的Node Exporter,并和Prometheus组了个compose。

部署OneDev是我在容器化过程中遇到的第一个坑。由于Windows下不用容器服务部署GitLab异常复杂和不便,因此只得换用了OneDev。这下可好,OneDev在我无数次的尝试中,要么就是数据库连接不上,要么就是初始化失败,总之我当时没有部署上。无奈之下只得舍弃使用许久的OneDev+Gogs+TeamCity+YouTrack的“僵尸组合”(到旧服末期基本上只有OneDev在经常使用),转而全面投奔GitLab on Podman。除了GitLab希望使用PostgreSQL,让我觉得没能让MySQL整合全部数据库之外,部署相对比较顺利。

这也是我第一次尝试将Minecraft服务器容器化。因为使用了MCDReforged,所以除了Java之外,我还需要Python作为容器所需要的组件。于是,我尝试在服务器上制作自己的Podman镜像。以Alpine Linux为基础,在其上用apk包管理安装OpenJDK和Python。听起来行云流水,而实际却不然。首先,大陆特有的不可抗力因素,直接让构建时间大大延长,因为从所谓的“国际互联网”上下载数据实在是慢中之慢,几乎无法为初次尝试打包Podman镜像的我提供时间成本较低的试错环境。无奈之下,我只好求助于自己电脑上的Docker,利用本地资源来打包镜像,当然,挂上了代理,将时间大大缩短。最终获得了能够使用的镜像文件。并通过端口暴露、防火墙设置等方式成功将25565端口送了出去。

最后就是唯二没有使用容器化技术之一的NAS了,我选择了TrueNAS作为操作系统,因为其完整支持了ZFS,提供了图形化操作面板,并且还算易用,正好再次尝试。使用Libvirt以及其GUI,创建虚拟机部分还是蛮简单且轻松的。接下来就是设置硬盘直通了,使用LUN Passthrough,除了操作的时候完全不熟悉(毕竟第一次用)以外,其它的过程还算顺利。

接下来就只需设置存储池,我使用了RaidZ1,因为只有五块2T的硬盘,如果设置RaidZ2可能会导致硬盘空间不够用,因此只得使用相对来说没那么安全的软阵列方式。

最后,导入数据——

直到这时,我才发现导入磁盘的选项中,文件系统选项没有exFAT,取而代之的是NTFS,而我成了纯纯的小丑。我本以为Windows特有的NTFS既然无法被macOS读取,那么也不应该原生被其它操作系统读取,因此我才将磁盘格式化成了macOS能够读取的exFAT文件系统。显然我低估了,也高估了TrueNAS,它只能导入NTFS,而无法导入exFAT……

最后我只得通过在RHEL上挂载磁盘,通过设置TrueNAS的SMB分享来将备份的文件导入组件好的硬盘阵列。只不过这样导入显然比挂载到TrueNAS上导入更费时间,也更麻烦,而且风险不小。

最终,这趟“政权的更替”,磕磕绊绊,抵达了终点。所有服务至少到目前都平稳运行着。

总结

这是我第二次为hServer更换操作系统。第一次因为发现自己的服务器不仅需要满足文件存储,还需要其他功能,从TrueNAS迁移到了Windows;这一次是不满足于Windows,而迁移到RHEL,并通过虚拟机复活了TrueNAS。也是我折腾得最费心,也最累的一次,但也是最有成就感的一次。

诚然,迭代的路上有许多艰辛,比如到手的主板少了一个M.2的硬盘支撑组件,目前只用得了一个;主板的散热器不兼容,只得外卖一份散热器,结果只用到了扣具;OneDev死活搭建不起来,只得更换GitLab……而且就算到了现在,也还有诸多小问题,在此举两例:GitLab及其Runner没能compose起来,内存分配也不到位;Cloudflare的ZeroTrust的内网穿透还没能整好。

然而,从中学到的新知识以及体会到的东西,还有心路历程,恐怕是自己开发软件,以及部署小服务远远不能企及的。因此,我还是很感慨自己能有这样的机会,在如此短的时间内,高强度地“从无到有”完整地部署一套AIO软件。感触良多,不胜枚举。

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...