上周五下午,某电商公司客服突然炸锅——用户进不了支付页,订单全部卡在‘处理中’。运维小哥一查监控,发现核心API网关CPU飙到98%,但日志里没报错,流量也没突增。最后翻出三个月前一次灰度发布的遗留配置,把一个被注释掉的限流阈值重新启用,5分钟内服务恢复正常。
别等火烧眉毛才翻手册
应急响应不是靠临场发挥,而是靠平时攒下的‘活案例’。下面这几个我们团队真用过的参考案例,不讲理论,只说当时怎么干的、哪句命令救了命。
案例1:DNS劫持导致部分用户打不开官网
现象:北京、广州用户访问正常,成都用户打开首页后JS加载失败,控制台报错net::ERR_NAME_NOT_RESOLVED。
排查路径:
→ 成都同事本地nslookup www.example.com,返回的是一个陌生IP(192.168.127.12);
→ 同时查公共DNS(114.114.114.114),返回正确CDN地址;
→ 确认是当地运营商DNS缓存污染。
临时动作:
echo 'nameserver 114.114.114.114' > /etc/resolv.conf并通知客户换DNS;根治动作:在权威DNS平台加签DS记录,开启DNSSEC。
案例2:K8s集群Pod批量Pending,调度器不干活
现象:新部署的50个任务Pod全卡在Pending状态,kubectl describe node显示资源充足。
关键线索:kubectl get events --sort-by=.lastTimestamp里反复出现:
Warning FailedScheduling pod/nginx-xxx 0/8 nodes are available: 8 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate.原来是一次误操作给所有Master节点加了污点,但Deployment没配容忍策略。修复命令:
kubectl taint nodes --all node-role.kubernetes.io/master-(注意末尾减号表示清除)案例3:防火墙策略半夜自动失效
现象:凌晨2:17开始,数据库端口(3306)对外暴露,安全扫描告警狂响。
深挖发现:运维脚本里有一行iptables-restore < /tmp/rules.bak,但/tmp/rules.bak是上周手动备份的,漏掉了新加的DROP规则;而该脚本被crontab设为每天2:15执行。
补救:
→ 先紧急封端口:iptables -A INPUT -p tcp --dport 3306 -j DROP;
→ 改脚本,改用iptables-save > /etc/iptables/rules.v4做持久化,不再依赖/tmp下易丢失的文件。
这些不是教科书里的标准流程,是我们在会议室白板上画过、在凌晨三点敲过、被老板电话催过之后留下来的‘人话版’记录。应急响应最怕的不是问题多难,而是重复踩同一个坑。