文章目录
挖矿软件越自动,配置版本越要像账目一样逐笔可查
凌晨 2 点 17 分,值班群里出现了一条看似普通的提醒:一批矿机拒绝率升到 4.8%。当班人员判断备用矿池线路不稳,便打开共享模板,把备用地址和重试次数改了两处,然后点击批量同步。
三分钟后,186 台矿机开始反复重启挖矿进程。其中一部分切到了错误的钱包标签,另一部分因为新配置字段与旧版挖矿软件不兼容,直接卡在启动检查。值班人员尝试恢复“上一版配置”,控制面板却只保留了最后一次保存结果。备份目录里虽然有旧文件,却没人能确认它对应哪个软件版本、哪批机器,以及当时使用的是哪组环境变量。
这次故障持续了 41 分钟。真正耽误恢复的并非问题多复杂,而是现场回答不了三个问题:谁改了什么,变更实际覆盖了哪些机器,哪一个版本可以安全恢复。
发生了什么:一次小修改被自动化放大
从操作记录看,值班人员只改了两个字段,动作本身也符合当时的判断。事故之所以扩大,关键在于共享模板同时被三个自动任务引用。
第一个任务每两分钟检查配置差异,发现模板变化后自动下发;第二个任务检测进程退出,连续失败两次就重启服务;第三个任务根据矿池响应状态切换备用地址。三个任务单独看都有明确用途,叠加后却形成了循环:错误配置下发、进程退出、服务重启、再次切换、重新下发。
更麻烦的是,矿场里同时运行着两个小版本的挖矿软件。新版支持新增的连接参数,旧版遇到同名字段会直接报错。过去大家习惯把“软件文件”和“配置文件”分开管理,升级时只登记程序版本,修改模板时也没有记录适用范围。自动同步一启动,版本差异立刻从局部问题变成批量停机。
作为运维工具管理员,我在复盘里最关注的不是谁点了按钮,而是系统为什么允许一份未经验证、没有适用范围的配置直接覆盖 186 台设备。
最容易误判的地方:有日志不等于有账本
不少控制面板都能记录登录、保存、下发和重启,看上去已经足够审计。但操作日志只能证明“发生过一次点击”,未必能还原当时的完整状态。
一份可用的配置账本,至少要同时保存以下内容:
- 修改前后的配置差异,不能只留最终文件;
- 操作者、审批者、发布时间和关联工单;
- 目标设备清单,以及实际成功接收的设备清单;
- 挖矿软件版本、配置格式版本和启动参数;
- 密钥或钱包字段的引用编号,避免直接记录明文;
- 自动任务的触发结果,包括跳过、失败和重复执行;
- 对应的恢复版本,以及恢复前必须满足的条件。
事故中虽然查到了操作账号,却无法证明模板保存后是否被其他脚本二次改写。面板显示“下发成功”,实际只代表接口返回成功,不代表进程已经使用新配置正常提交份额。
因此,配置账本还要记录验证结果,例如进程存活时间、有效算力、拒绝率、矿池侧矿工名和钱包标签。没有这些结果数据,所谓成功发布只完成了一半。
第二个误区:保留旧文件就能随时回滚
版本回滚常被理解为把旧配置复制回去。这个做法只在环境完全没有变化时可靠,而现实中的挖矿软件经常同时改动程序、配置结构、驱动依赖、启动脚本和监控插件。
本次事故第一次回滚失败,就是因为旧配置恢复后,机器仍运行新版启动脚本。脚本会自动补全一个新版字段,随后旧版程序再次退出。直到我们把程序包、配置、启动脚本和环境变量一起恢复,服务才稳定下来。
以后每次发布都应生成一个完整版本包,至少绑定四项内容:
1. 挖矿软件安装包及文件校验值;
2. 对应的配置模板和格式编号;
3. 启动参数、环境变量及依赖版本;
4. 健康检查规则和明确的回滚条件。
版本包还要标注适用设备。不同显卡、驱动、固件和操作系统镜像不能默认共用一个版本。回滚按钮背后必须执行完整恢复动作,不能只替换某个配置文件。
同时要定期验证旧包能否真正启动。存档半年却从未演练的版本,很可能已经遇到下载地址失效、证书过期、依赖缺失或矿池接口变化。这样的“备份”只能带来心理安慰。
自动化的权限边界要按影响范围划分
自动化最危险的地方,是机器执行得太快。人工误操作可能只影响当前设备,拥有全场权限的脚本则能在几分钟内覆盖所有节点。
权限设计不能只分管理员和普通用户。更实用的做法是按动作和影响范围拆开:
- 巡检账号只能读取状态,不能修改模板;
- 模板编辑者可以提交变更,但不能直接批量发布;
- 发布账号只能操作指定设备组,并设置单批数量;
- 自动切换程序可以选择预先批准的矿池地址,不能修改钱包;
- 紧急值班人员可以暂停任务和执行已审核的恢复包,不能创建新版本;
- 钱包、矿池密钥和代理凭证由独立凭证服务提供,配置人员只接触引用编号。
高风险动作还应增加时间限制。例如夜间允许暂停同步和恢复稳定版本,但禁止修改全局模板;临时权限在故障结束后自动失效;超过 20 台设备的发布需要二次确认。
这并非拖慢处置。事故中如果值班账号只能先改 10 台测试组,186 台机器就不会同时重启。
配置发布要能自动刹车
治理配置并不意味着放弃自动化,恰恰要给自动化加上可测量的停止条件。
一次正常发布可以按 5 台、20 台、一个机架、一个区域逐步扩大。每批执行后观察固定指标:进程启动成功率、十分钟有效算力、拒绝率、重启次数、钱包标签和矿池连接状态。任何一个指标越线,系统立即停止后续下发,并保留现场,不再让重启任务反复覆盖证据。
还要避免多个自动任务同时改动同一对象。模板发布期间,矿池切换脚本应进入只读状态;回滚期间,配置同步任务必须暂停;设备处于人工排障状态时,自动修复不得抢回控制权。每台机器在同一时刻只能有一个配置写入者,这条规则应由工具强制执行。
下一步:把今天的配置整理成可恢复版本
矿场可以从一次小范围盘点开始,不必等到更换整套管理系统。
今天先选一个机架,导出当前挖矿软件版本、配置文件、启动参数和自动任务清单,为它们生成统一版本号。随后做一次配置差异记录,明确哪些字段由人工维护,哪些由脚本生成,钱包与凭证分别从哪里读取。
明天安排一轮十台机器的回滚演练:发布一个测试改动,确认账本完整记录,再恢复到上一版本,核对算力、拒绝率和矿池侧标签。演练结束后,收回共享管理员账号,把“编辑模板”“批准发布”“执行恢复”分配给不同角色。
最后给所有批量任务设置设备上限和自动停止条件。做到这一步,下一次凌晨出现异常时,值班人员无需凭记忆翻找旧文件,只要从配置账本中找到最近一次稳定版本,核对适用设备和恢复条件,再按受控批次执行即可。

挖矿软件越自动化,配置账本越该放在按钮前面
昨晚 23:40,我收到值班群里一条截图:一排矿机算力曲线突然齐刷刷往下掉,掉得不狠,但很整齐。第一反应不是断网,也不像矿池挂了,因为同一机房里另一批机器还在正常提交份额。再看操作记录,问题出在一个“自动切换配置”的任务上:夜班同事想把 96 台机器从 A 矿池临时切到 B 矿池,顺手勾了一个“同步最新模板”,结果模板里带着上周测试用的强度参数,矿机没死机,却开始大量低效运行。
这类事故在今天的矿场里越来越常见。过去挖矿软件出问题,多半是程序崩了、驱动不认、矿池连不上;现在更麻烦的是,软件本身能跑,自动化也在执行,但执行的是一份没人确认过的配置。机器没有红灯,面板也不一定报警,等到收益报表对不上,几个小时已经过去了。
从运维工具管理员的角度看,挖矿软件的变化很清楚:按钮越来越多,策略越来越细,批量动作越来越快。真正需要补上的,不是再加一个自动脚本,而是把每一次配置变动、版本切换、权限调用都记清楚,出错时能倒回去,追查时能说得明白。
发生了什么:一次“同步模板”把测试参数带进生产
这次事故的表面原因很简单:夜班账号有批量配置权限,执行了一个矿池切换任务;任务同时调用了最新配置模板;模板里包含测试机组上周留下的核心频率、风扇策略和重连间隔;这些参数被下发到生产机组后,矿机没有掉线,但有效算力下降,拒绝率上升。
如果只看面板,很容易把它误判成矿池波动。因为矿池地址确实换了,连接也成功,软件进程没有异常退出,矿机温度没有明显失控。最容易被忽略的是“配置来源”:到底是切矿池时只改了矿池地址,还是顺手把整份模板都覆盖了?
后面翻日志才发现,挖矿软件的操作记录只写了“执行批量切换成功”,没有把变动字段展开。也就是说,系统知道有人按了按钮,却没有清楚记录这个按钮改了哪些参数。对于小矿工来说,这可能只是几台机器多跑一会儿低效参数;对于几百台、上千台机器的场景,就是一笔很现实的损耗。
更麻烦的是,当时值班同事尝试手动改回矿池地址,但低效问题没消失。因为真正的问题不在矿池地址,而在模板里附带的算力参数。没有配置账本,就只能靠人回忆:“之前是不是这样设的?”这句话在夜班里基本等于继续试错。
容易误判的地方:自动化成功不等于配置正确
很多矿场上自动化之后,会有一个错觉:只要任务显示成功,事情就完成了。可挖矿软件的自动化分两层,一层是任务有没有执行,另一层是执行后的状态是不是符合预期。前者是流程问题,后者才关系到收益。
这次事故里,任务队列没有失败,矿机在线率也没明显下降,所以常规告警没响。但实际配置已经偏离了生产标准。这里有三个容易误判的点。
第一,把“版本最新”当成“版本安全”。挖矿软件、驱动组件、插件脚本经常更新,最新版本可能修了问题,也可能改了默认参数。尤其是一些第三方优化脚本,更新说明写得很短,实际却调整了重试间隔、日志级别、矿池优先级。没有版本标记和灰度范围,直接全量推送,就等于拿生产机组做现场测试。
第二,把“模板复用”当成“模板可信”。模板确实能省时间,但模板也会带脏东西。测试参数、临时钱包、备用矿池、某个矿工单独调过的风扇策略,都可能藏在里面。只要模板没有字段级审查,批量下发时就可能把旧问题复制一遍。
第三,把“管理员账号”当成“万能账号”。很多矿场为了方便,夜班、维修、财务查看、远程协助都共用几个高权限账号。短期看省事,长期看就是查不清。出了问题之后,只知道某个账号执行了任务,却不知道是谁、因为什么工单、经过谁确认。运维工具越自动,越不能把权限边界糊成一团。
配置账本要记什么:别只留一行操作成功
我更愿意把配置账本理解成矿场的软件出入库记录。硬件换风扇、换电源、换板子会登记,软件配置也应该登记。尤其是今天的挖矿软件已经不只是启动程序,它还管矿池、钱包、超频、功耗策略、重连逻辑、告警阈值、脚本调用,任何一项改错都会影响收益。
一份能用的配置账本,至少要记清五类信息。
第一,改了什么字段。不能只写“更新配置”,要能看到矿池地址、钱包地址、工作名、频率参数、功耗上限、重启策略、备用池顺序分别有没有变化。字段越清楚,回滚时越少猜。
第二,配置从哪里来。是生产模板、测试模板、某台机器导出的配置,还是人工临时编辑?来源不清,后面就无法判断这份配置该不该被信任。
第三,影响哪些机器。不要只写“批量下发”,要能定位到机房、货架、矿机分组,最好能看到机器清单和数量。很多事故不是全场事故,而是某一批机器用了错误参数,范围越快圈定,损失越容易压住。
第四,谁发起、谁批准。不是每次改动都要走复杂流程,但涉及钱包地址、矿池地址、算力参数、版本升级的动作,至少要有发起人和确认人。夜班可以执行预案,但不应该随便创造预案。
第五,改动前后的快照。账本最重要的价值不是事后追责,而是能回到上一份能赚钱的配置。没有快照,回滚就只是重新配置;有快照,回滚才是恢复现场。
版本管理别只盯软件包:脚本、模板和依赖也要编号
很多人说版本管理,第一反应是挖矿软件版本号,比如从某个版本升到另一个版本。实际上,矿场里真正容易混乱的,往往是软件包之外的东西。
比如启动脚本改了一行参数,模板改了备用矿池顺序,监控插件改了告警阈值,远程管理工具改了 API 调用方式。这些变化单看都很小,但组合在一起,就可能让矿机表现完全不同。若只记录挖矿软件版本号,却不记录脚本和模板版本,排障时会出现一种很尴尬的情况:大家都说“软件没变”,但现场就是变了。
比较稳妥的做法,是把生产环境里的配置分成几组编号:
挖矿软件本体版本,单独编号,记录发布时间、来源、校验值和适用机型。
启动脚本版本,单独编号,记录启动参数、环境变量、重启逻辑。
配置模板版本,单独编号,记录矿池、钱包、工作名规则和性能参数。
自动化任务版本,单独编号,记录触发条件、执行范围、失败处理方式。
这样做看起来繁琐,但好处很明显。一旦某批机器异常,可以快速回答三个问题:它们用的是哪一个软件包?哪一份模板?哪一个自动任务?如果只有一个总版本号,问题会被揉成一团,最后又回到人工猜测。
版本管理还有一个原则:生产版本不要直接覆盖。新版本先放到候选区,小范围验证,确认有效算力、拒绝率、温度、功耗都正常,再扩大范围。不要因为一条更新说明写着“优化稳定性”,就把它当成全场升级理由。挖矿软件的稳定,不在更新说明里,在机器连续跑出的数据里。
回滚要提前演练:事故现场临时找旧包最耽误事
回滚不是把旧版本再装一遍这么简单。真正出事故时,时间会被几个细节吃掉:旧安装包在哪里?旧配置是哪一份?回滚后钱包地址会不会被覆盖?矿池顺序会不会恢复到上个月?哪些机器已经升级,哪些还没升级?谁有权限执行回滚?
如果这些问题平时没答好,事故现场就会变成多人同时操作。有人找包,有人改模板,有人重启机器,有人盯收益。看似热闹,实际风险更大。
我建议把回滚分成三种预案,而不是只写一句“必要时回退”。
第一种是配置回滚。适用于矿池、钱包、频率、功耗参数改错。要求能按分组恢复到上一份生产配置,并且回滚前提示会变更哪些字段。
第二种是软件版本回滚。适用于新版本崩溃、拒绝率异常、兼容性问题。要求保留旧包、校验值、安装方式和适用机型说明。
第三种是自动化任务暂停。适用于脚本触发条件错误、批量动作反复执行、监控误判导致频繁切换。要求一键停掉任务调度,但不要影响已经正常运行的挖矿进程。
这三种预案要定期演练,最好选一小组非关键机器做测试。演练时不要只看能不能回去,还要记录耗时、需要几个人、是否会清空日志、是否会影响收益统计。回滚能力不是写在文档里的,是靠平时跑过一遍才算数。
权限边界要收细:夜班能执行,不代表能改规则
自动化工具最怕两种权限:一种是所有人都不能动,出事没人处理;另一种是太多人都能动,出事没人说得清。矿场需要的是分层权限,而不是简单地给或不给。
夜班账号应该能执行已经批准的任务,比如切换到预设备用矿池、重启指定分组、暂停异常自动任务。但夜班账号不应随意修改生产模板,不应改钱包地址,不应上传新的脚本,也不应把测试版本推到生产机组。
运维管理员可以维护模板和版本库,但涉及钱包、收益路径、批量升级范围,最好需要第二个人确认。不是不信任人,而是矿场里的很多损失并非恶意造成,都是疲劳、赶时间、误点按钮带来的。
远程协助账号更要控制。厂商、外包、临时技术支持可以查看必要日志,可以在授权时间内操作指定机器,但不应该拥有全场长期管理权限。协助结束后,账号要关闭,令牌要回收,操作记录要归档。
权限边界清楚之后,自动化才真正安全。否则按钮越方便,误操作传播越快。
下一步怎么做:从一周内能落地的三件事开始
如果今天要改挖矿软件的运维方式,不必一上来做大系统。先做三件小而硬的事。
第一,把生产配置做一次盘点。选出当前真正稳定赚钱的一份配置,标成生产基准,记录软件版本、脚本版本、模板版本、适用机型和机器范围。不要让“大家都知道”停留在口头上。
第二,建立配置变动记录。哪怕先用简单文档,也要做到每次改动写清字段、原因、执行人、影响机器、回滚方式。重点盯矿池地址、钱包地址、性能参数、自动任务这几类高风险项。
第三,收紧批量权限。夜班保留执行预案的能力,但取消修改生产模板和上传脚本的权限;测试模板和生产模板分开存放;任何全量推送前,必须先在小分组跑满一段时间,看有效算力、拒绝率和温度曲线。
挖矿软件会继续变得更自动,矿场也会越来越依赖批量工具。但对运维工具管理员来说,按钮多不是安全感,账本清楚、版本可退、权限有边界,才是夜里出事时真正能救场的东西。今天下班前,至少把最近一次生产配置导出来,标好版本,放到只有管理员可改的位置;下一次有人要批量下发时,先问一句:这次改动,账本里能不能查得到、退得回去。
