去年5,6月份的时候,临时兴起写了一个京东返利插件。放到chrome和edge的插件市场,没啥流量,不过每天也有点人用,高峰期大概可以给我攻陷个差不多200的收入。
前两天研究rspress,想把我的返利插件的文档页面重构一下,更美观一点。当时手残的就在返利插件的后台服务器上使用vscode尝试。心想一个静态网站生成器吗,没啥大问题,我之前在上面跑rust开发也没出现什么大事。谁知道就坏在这个上面。
在修改一个文件重新编译生成的时候,系统竟然没反应了,我以为可能是网络卡顿了,谁知道差不多10分钟也没恢复,登录到腾讯云控制台,发现cpu和内存同时爆到到99%以上。没办法,只能重启。谁知道重启之后,ssh竟然链接不上,通过控制台的vnc连接工具连接到机器上,发现启动的时候死在了cloudflared服务上。不知道我当初怎么安装的,竟然自启动cloudflared,然后还没其他成功,导致整个系统完全进入不来kernel.
由此而来第一个教训就是不能在生产机器上进行无关生产操作的其他任务,说不定什么时候这个任务就会导致生产服务器崩溃。
这就坑了,本来就是个重启解决的问题,现在要解决系统问题了。拜托了google和chatgpt搞了半天也没解决怎么进入系统问题。还好腾讯还有个救援模式,通过vnc进入之后还可以挂载原来机器的数据,否则数据丢失就坑了。虽然用户不是很多,涉及的钱也不多,但是也不能白白浪费了。
vnc连接机器虽然可以挂载原来机器数据,但是不能直接下载。好在我有台nas,通过cloudflare可以webdav暴露到公网。简单的通过curl将重要数据传递到nas上之后我重装了服务器,然后很快的就恢复了服务。
从系统崩溃到最终恢复过去了大概12小时,仅操作尝试就花了大概4个小时。主要还是不太了解linux的启动过程,导致在排查启动问题时就消耗了很长时间,最终还没有解决。其次,就是数据备份不存在,导致后续通过救援模式进入系统之后要重新备份数据,因为救援模式不太好安装新的工具,只能通过curl命令上传webdav简单的备份数据,如果遇到大量的数据,那么就花费更多的时间。最终的纯系统重装及恢复服务,其实到并没有花费太多的时间。
由此也可见数据备份的重要性。也就是我这个服务用户量小,影响面低,如果换成其他重要服务,这么长的恢复时间就会造成很大的损失。如果有完善的数据备份,那么完全可以开一台新机器很快的恢复服务。
在最终备份数据的时候还发现另外一个问题。因为这个插件的后台我开发的有段时间且后续也没有怎么维护,导致数据备份的时候差点忘记一块重要的数据。这个时候就体现出项目readme.md的重要性了。核心内容及操作一定要记录其中,否则过了一段时间之后,即使你是当初的开发者,有意外情况发生时也会忘记重要步骤,从而导致事故。