文章目录
挖矿软件会越来越像变更系统,配置留痕比一键执行更要紧
凌晨 2 点 17 分,值班群里跳出一条消息:三号机房有 46 台机器算力掉到平时的一半,矿池端显示大量拒绝率。第一反应很容易是网络抖动,或者矿池节点不稳。可我翻了挖矿软件后台的操作记录,发现 2 点 03 分有人把一组超频配置推给了整排机器,目标本来只有 8 台测试机,结果标签选错,把同型号机器全带上了。
这类事故不大,却很烦。机器没坏,矿池也没问题,损失来自一次配置变更。更麻烦的是,现场同事问“能不能马上恢复”,后台却只显示“已执行成功”,没有清楚记录上一版参数、执行人审批、影响范围和回滚包。最后只能从几台还没同步的机器上手工抄配置,再分批推回去。一个本该 10 分钟结束的回退,拖成了将近 1 小时。
作为运维工具管理员,我越来越觉得,挖矿软件的竞争点正在变化。以前大家关心有没有批量部署、自动切矿池、自动调频、自动重启;现在更要紧的是,每一次自动化动作有没有账可查,有没有版本可退,有没有权限边界挡住误操作。
这次事故到底发生了什么
这批机器跑的是同一套挖矿软件,后台按机房、机架、型号和测试组做了标签。前一天收益波动比较大,运维想试一组偏激进的功耗参数,看能不能在短时间内拉高有效算力。测试计划本身没问题,问题出在执行环节。
操作员新建了一个配置任务,选择了“某型号测试组”。但系统里旧标签没有清理干净,部分正式运行机器也挂着测试标签。任务提交后,后台按照标签批量下发,软件端重载配置,机器开始以新参数运行。几分钟内,温度、拒绝率和掉线次数一起上来,监控才发现异常。
如果只是 8 台测试机,风险可控;如果是 46 台正式机器,性质就变了。更关键的是,系统没有在下发前给出差异确认:本次任务会改哪些字段、影响多少台、其中有多少台属于生产组、是否跨机房、是否触及功耗上限。这些信息不是没有,而是散在多个页面里,执行人提交时并没有被迫看一遍。
事故的根因不是“自动化太强”,而是自动化缺少治理。批量执行只是工具能力,配置账本、版本管理和权限控制才决定它会不会在半夜把人叫醒。
最容易误判的地方:把配置当成临时参数
很多矿场对挖矿软件配置的态度,仍然像改一个临时参数:今天矿池延迟高,换个地址;今晚温度低一点,频率拉高;某个币种收益突然上来,脚本切过去。动作都不复杂,所以容易被低估。
但在真实运维里,配置不是一串参数,而是一份生产状态。它至少包含矿池地址、钱包地址、工作名、算法、内核版本、驱动适配、功耗限制、风扇策略、重启条件、备用节点、日志级别等内容。任何一项改错,都可能造成收益丢失、机器不稳,甚至把算力打到错误账户上。
更容易被忽略的是,配置之间有依赖关系。比如某个新版挖矿内核提高了特定显卡的表现,但需要搭配新的驱动;某个自动切换脚本支持新币种,却不兼容旧版监控代理;某个矿池地址要求新的登录格式,旧模板直接复制会导致认证失败。管理员如果只看“配置已下发”,不看“配置适配哪一版软件”,事故就会从单点变成一片。
所以,配置必须从“随手改”变成“可登记、可比对、可回退”的对象。每一次修改都应该留下账:谁改的,为什么改,改了哪些字段,影响哪些机器,计划运行多久,失败后回到哪一版。
配置账本不能只靠聊天记录
不少团队会说,我们群里都有记录,谁改了什么都能翻到。可真到排障时,聊天记录最不可靠。群里可能只有一句“先把 A 组参数降一下”,没有具体值;可能有人发了截图,但截图不是最终执行版本;也可能执行人临时补了一项参数,没来得及同步到群里。
配置账本要放在挖矿软件或运维平台里,而不是放在人的记忆里。它至少要记录四类内容。
第一是配置快照。下发前保留旧版本,下发后记录新版本,字段差异要能直接看到。不要只保存整个配置文件,还要能拆出关键项,比如矿池地址、钱包、功耗、频率、算法、内核版本。
第二是机器范围。任务影响了哪几台机器,属于哪个机房、哪个机架、哪个标签组,是否包含生产机器。范围不能只记“某某组”,因为标签会变,机器会迁移,事后只看组名容易对不上。
第三是触发来源。人工点击、定时任务、收益策略自动触发、故障自愈脚本触发,必须区分清楚。自动化任务尤其要记录判断条件,比如依据哪个矿池收益数据、哪个时间点的价格、哪个延迟阈值。
第四是结果回执。配置有没有真正生效,机器端是否加载成功,加载后 5 分钟内算力、拒绝率、温度有没有异常。只要没有回执,“已下发”就不等于“已完成”。
配置账本不是为了事后追责好看,而是为了把恢复时间缩短。事故发生后,管理员第一眼应该知道:上一版是什么,哪些机器受影响,能不能一键撤回,撤回后要观察哪些指标。
版本管理要能回到“上一个能赚钱的状态”
挖矿软件更新最怕两种情况:一是新版确实有问题,二是新版没问题,但和现场环境不搭。很多时候测试机跑得好,不代表整场机器都适合。显卡批次、散热条件、驱动版本、系统补丁、矿池延迟,都会让结果变样。
所以版本管理不能只管软件包,还要把配置和环境一起管起来。单独回退挖矿程序,但保留新版配置,可能还是跑不稳;只回退配置,不回退内核,也可能出现字段不兼容。真正有用的版本,是一个组合:挖矿软件版本、配置模板、驱动版本、脚本版本、监控代理版本,以及适用机器范围。
我建议矿场至少保留三类版本。
一类是稳定版,作为日常生产默认版本,未经审批不能随便覆盖。它不一定收益最高,但必须经过连续运行验证。
一类是候选版,用于小范围测试,可以绑定固定机器和固定时长。测试结束后,要么升级为稳定版,要么归档,不要长期挂在生产标签里。
一类是应急回退版,用于夜间或无人值守时快速恢复。它的目标不是最佳收益,而是机器能稳定出算力、矿池认证正常、钱包地址无误。
回滚也要演练。很多平台有“回滚”按钮,但从没真的按过。等事故发生才发现旧包下载失败、脚本权限过期、部分机器磁盘空间不足,这种回滚等于没有。管理员应定期挑一小组机器做回退测试,确认旧版本能装、配置能加载、监控能识别、收益账户没有变。
权限边界要挡住“好心办坏事”
挖矿软件后台常见一个问题:为了省事,太多人拿着过大的权限。会看监控的人,也能改矿池;会重启机器的人,也能批量推脚本;临时值班的人,也能改生产组配置。平时看着方便,出事时就很难定位。
权限边界不应该按“信不信任某个人”来设计,而要按“这个岗位需要完成什么动作”来设计。
比如一线值班可以重启单机、暂停任务、切换到预设备用矿池,但不能新建全场配置;策略人员可以提交收益切换方案,但不能直接下发到生产机器;工具管理员可以维护模板和版本,但关键配置下发需要二次确认;财务或钱包负责人只负责地址白名单,运维不能随意新增收益地址。
尤其是钱包地址、矿池账号、批量脚本、功耗上限这几类操作,必须单独加锁。它们不一定天天改,但一旦改错,损失很直接。后台最好能做到:高风险字段修改必须审批;跨机房批量任务必须二次确认;夜间大范围变更默认禁止,除非使用预案内的应急模板。
权限不是为了增加流程,而是为了让错误停在小范围内。一个人点错,最多影响测试组;一个脚本误判,最多切到备用配置;一个账号被盗,也不能直接改全场收益地址。做到这一点,矿场才有安全余地。
下一步怎么做:从三张清单开始补
如果今天要改造挖矿软件运维流程,我不建议一上来做很复杂的平台。先补三张清单,效果会很明显。
第一张是配置清单。把当前正在生产使用的配置模板列出来,标明适用机型、矿池、钱包、功耗范围、软件版本、最近一次修改时间和负责人。凡是没人认领、用途不明、长期未验证的模板,先冻结,不再允许新任务调用。
第二张是版本清单。把稳定版、候选版、应急回退版分开,写清楚每个版本对应的安装包、配置文件、脚本和验证记录。不要让“最新版”自动等于“生产版”,更不要让测试包混在正式包目录里。
第三张是权限清单。逐个账号检查能做什么,尤其看是否有人拥有批量下发、修改钱包、执行脚本、删除日志、改标签这些能力。多余权限先收掉,临时权限设到期时间,离职或换岗账号当天处理。
挖矿软件的自动化还会继续增强,自动调参、自动切换、自动修复都会越来越常见。但自动化越多,越不能靠运气管理配置。今天最值得做的动作很具体:把最近 30 天所有批量配置任务导出来,挑出影响机器最多的 10 次,补齐旧版本、执行人、影响范围和回滚方式。先把这本账建起来,下一次半夜出问题,至少不用从聊天记录里找救命配置。
