文章目录
挖矿软件正在从会自动跑,转向每次改动都要留账
凌晨 1 点 17 分,值班群里跳出第一条消息:三号机房有 46 台机器算力掉到平时的三分之一。面板上看,不是全断,也不是矿池大面积拒绝,机器还在跑,风扇也没异常。真正奇怪的是,这批机器刚好都在 20 分钟前被自动任务推过一次配置。
我当时第一反应是查矿池、查网络、查机器温度。折腾了十几分钟才发现,问题出在一个很不起眼的参数:某个挖矿软件新版本调整了配置字段识别方式,旧模板里一项备用矿池参数被当成主参数读取,结果机器没有停,但收益路径已经跑偏。
这类事故最麻烦的地方就在这里。它不像断电、断网、矿机掉线那么直观,面板上还有算力,自动化任务也显示执行成功,日志里甚至没有红色报错。可从运维角度看,这已经是一次配置治理失败:谁改了模板、哪个版本开始生效、影响了哪些机器、能不能一键回到上一版,当时都没有足够清楚的答案。
事故本身不大,暴露的问题很具体
这次影响的机器数量不算多,持续时间也不长。最后的处理方式,是把三号机房那一批机器全部回退到前一天的配置包,再把挖矿软件版本锁回旧版,算力很快恢复。
但复盘时,我们发现真正的问题不是“某个版本有坑”,而是我们对挖矿软件的管理方式还停留在“能批量推送就行”。
当时的自动化任务有三层东西混在一起:软件版本、矿池地址、超频参数。运维同事为了省事,把这三项放在一个模板里改。平时这样做确实方便,点一次就能把一批机器更新到位。可一旦其中一个变量出问题,就很难快速判断到底是版本影响、矿池连接问题,还是参数不适配。
更要命的是,配置变更记录只写了“更新三号机房挖矿配置”,没有写清具体字段。到了排查时,大家只能翻聊天记录、找导出的旧文件、对比面板截图。这个过程不是技术难,而是管理粗。
挖矿软件现在越来越喜欢加自动切换、自动重连、自动调参、自动识别硬件。功能多了以后,运维工具管理员不能只关心“能不能推下去”,还得回答一个问题:每一次自动执行,到底改了什么,改给了谁,改完能不能证明。
最容易误判的是“自动化成功”等于“配置正确”
很多矿场对自动化有一种天然信任:任务显示成功,机器在线,算力有数字,就默认没事。这个判断在机器少的时候还凑合,一旦规模上来,就会出问题。
自动化成功只代表命令被执行了,不代表执行结果符合预期。挖矿软件的配置尤其容易出现这种偏差。
比如同一个字段,在不同版本里可能含义不同;同一个矿池地址,在不同地区网络下延迟差别很大;同一组超频参数,对不同批次显卡或 ASIC 板子未必稳定。更现实一点,有些软件更新说明写得很简略,只说“优化配置兼容性”,但不会告诉你某个旧参数会被忽略,或者默认策略会变。
这时候,如果管理员只看最终面板,很容易被表象带偏。机器没离线,不等于收益没损失;任务没报错,不等于模板没问题;自动重连成功,不等于连回了你想要的矿池。
运维工具管理员要做的不是怀疑所有自动化,而是给自动化加边界。自动化可以执行,但不能替人决定所有事;自动化可以批量推送,但必须留下足够细的痕迹;自动化可以快速修复,但回滚方案要比更新方案更早准备好。
配置账本要记录字段,不只记录动作
这次之后,我们把原来的“操作记录”改成了“配置账本”。两者听起来差不多,实际差别很大。
操作记录通常写的是:谁在几点对哪批机器执行了什么任务。配置账本要更细一点,至少要知道这次变更涉及哪些字段、字段原值是什么、新值是什么、来自哪个模板、适用哪些机器、预计影响什么指标。
比如一次挖矿软件配置变更,不能只写“更新矿池配置”。更应该拆成几项:
矿池主地址从哪个改到哪个,备用地址有没有变化;钱包地址是否变化;矿工名生成规则有没有变化;软件版本是否同时升级;启动参数有没有新增;重启策略是立即重启、空闲重启,还是分批重启。
这些内容如果只靠人手写,肯定坚持不了太久。所以更好的方式,是让工具自动生成账本。管理员只需要在变更前写清目的和审批人,具体字段差异由系统自动比对。
配置账本的价值,在平时看不明显,出事时非常直接。你能在几分钟内知道:这批机器和正常机器到底差在哪里;哪些机器用了同一份模板;问题发生前最后一次变更是谁批准的;如果要回退,应该回到哪一个配置点。
对矿场来说,这比事后在群里问“刚才谁动过三号机房”要可靠得多。
版本管理不能只管软件包,还要管配置组合
不少人做版本管理,只盯挖矿软件本身。比如当前用的是哪个版本,旧版本安装包放在哪里,升级失败能不能重新安装。这个当然重要,但还不够。
真正影响运行结果的,往往是“软件版本加配置模板加机器分组”的组合。
同一个软件版本,配不同启动参数,表现可能完全不同;同一份配置模板,在不同硬件批次上也可能有差异。只保存软件包,不保存对应配置,就像只留下药瓶不留下用药剂量,回滚时很容易回到一个看似正确、实际不稳定的状态。
我们后来把版本管理拆成三层:
第一层是软件版本,记录安装包来源、校验值、发布时间、是否已在小批量机器验证。
第二层是配置版本,记录矿池、钱包、启动参数、重启策略、硬件适配条件。
第三层是部署版本,记录某一天某一批机器实际使用的是哪一个软件版本和哪一个配置版本。
这样做之后,回滚不再是“装回旧软件”这么粗糙,而是回到某个经过验证的运行组合。比如三号机房可以回到“软件 A 版本加配置模板 20260426-2”,而不是临时找一个旧配置凑合。
版本命名也要少玩花样。不要只用“最新版”“稳定版”“测试版”这种名字,时间、用途、适用范围都要写清。管理员最怕的不是文件多,而是每个文件看起来都像能用,没人知道哪个才是昨天真正跑过的。
回滚方案要提前演练,不能等事故时临时拼
很多矿场都有回滚意识,但实际做得很浅。常见做法是保留旧安装包,或者留一份旧配置文件。问题是,保留不等于能用,能用不等于能在压力下快速用。
一次合格的回滚,至少要回答四个问题。
第一,回滚对象是谁。是全场机器,还是某个机房、某个机架、某个硬件批次?如果不能精准选中,回滚就容易扩大影响。
第二,回滚到哪里。是上一个版本,还是最近一次通过验证的版本?有些“上一个版本”本身就是临时改过的,不一定安全。
第三,回滚后怎么确认。不能只看任务完成,要看算力恢复、拒绝率、矿池连接、功耗曲线和重启次数。不同矿场口径可以不同,但必须固定下来。
第四,谁有权触发。夜间值班人员能不能直接回滚?需要谁确认?如果审批人不在线,是否有应急规则?
我们现在的做法是,每次正式升级前,先选一小组机器做回滚演练。不是模拟点击,而是真正推一次新配置,再回到旧配置,看耗时、看日志、看指标。演练成本不高,却能发现很多细节问题,比如某些机器回滚后不会自动重启,某些配置文件路径在不同系统镜像里不一致,某些脚本依赖的目录已经改名。
这些问题如果在白天演练时发现,只是工单;如果在凌晨事故里发现,就是停机损失。
权限边界要比按钮更清楚
挖矿软件管理里还有一个常被忽视的点:权限。
很多工具为了方便,会把查看、编辑、推送、重启、升级放在同一个账号下。小团队一开始这么用没问题,等机器数量增加、值班人员变多、外包维护介入后,这种权限设计就会变成隐患。
运维工具管理员要把权限拆得更细。能看算力的人,不一定能改钱包地址;能改矿池的人,不一定能升级软件;能对测试组推送的人,不一定能碰生产机房;能创建模板的人,不一定能直接执行到机器上。
尤其是钱包地址、矿池账号、自动切换策略这几类配置,必须单独提高权限。它们不一定会让机器掉线,但会直接影响收益归属和收益稳定性。相比之下,风扇策略、日志级别、告警阈值可以给更宽一点的操作范围。
权限边界还要配合审批记录。不是为了增加流程感,而是为了让事故发生时能快速定位责任和恢复路径。谁提出变更、谁审核、谁执行、谁确认结果,这几步不能全压在一个人身上。
如果矿场规模还小,也至少要做到两点:日常账号不能拥有最高权限;涉及钱包和批量重启的操作必须二次确认。很多事故不是黑客造成的,而是一个疲劳值班人员在凌晨点错了分组。
接下来该把四件事做成日常动作
挖矿软件的趋势已经很清楚:自动化会越来越多,版本更新会越来越频繁,配置项会越来越细。管理员如果还靠记忆、群消息和临时截图管理配置,迟早会被一次小改动拖进大排查。
今天就能开始做的动作不复杂。
第一,把当前所有挖矿软件配置导出一份基线,按机房、机架、硬件批次归档,不要只保存“全场通用模板”。
第二,建立配置账本,哪怕先用简单文档,也要记录字段变化、影响范围、审批人和回滚点。
第三,给挖矿软件版本和配置模板分开编号,不要再用“最终版”“新稳定版”这种名字。
第四,挑 5 到 10 台机器做一次真实回滚演练,记录从触发到指标恢复的时间。
第五,检查账号权限,把钱包地址、矿池切换、批量升级、批量重启这几类操作从普通值班权限里拆出来。
挖矿软件好不好用,不能只看它有多少自动功能。对运维工具管理员来说,更重要的是每一次改动能不能查得清、退得回、管得住。机器可以自动跑,但配置不能糊涂跑。
