1. 故障初识与告警确认
1.1 接到监控告警后先确认范围:查看Prometheus/Datadog告警、Ping、HTTP探针失败。
1.2 登录监控机和边界设备:ssh至监控JumpHost,执行ping -c4 target;curl -I -m5 http://your-ip:80。
1.3 收集基础信息:uptime; free -m; df -h; ss -tunlp | grep :80; journalctl -u nginx -n200 --no-pager。
2. 快速流量定位(是否为流量型故障)
2.1 查看网卡/链接:ethtool eth0; ifconfig eth0 或 ip -s link show eth0。
2.2 流量统计:nload eth0 或 iftop -i eth0;tcpdump -nn -s0 -c200 port 80 判断请求特征。
2.3 分析连接:ss -s 汇总,ss -ntp 'dst :80' 查看大量TIME_WAIT或半开连接指示DDoS/攻击。
3. 紧急隔离与限流措施
3.1 黑洞或白洞:与上游骨干/带宽提供商(AS)联系,临时做null-route或BGP黑洞。
3.2 iptables临时限流:iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 200 -j DROP(仅临时)。
3.3 使用tc限速:tc qdisc add dev eth0 root tbf rate 500mbit burst 32k latency 400ms,保护控制面。
4. 应对DDoS与SYN泛洪
4.1 SYN cookies:sysctl -w net.ipv4.tcp_syncookies=1;调整参数:sysctl -w net.ipv4.tcp_synack_retries=2。
4.2 conntrack限制:sysctl -w net.netfilter.nf_conntrack_max=262144;清表:conntrack -F(谨慎)。
4.3 启用防护软件:安装并启用fail2ban、nginx limit_req_zone/limit_conn_zone做应用层限流。
5. 业务切换与流量迁移
5.1 DNS切换(低TTL预置):提前将域名TTL设为60或更低,遇故障时修改A记录指向备机或CDN。
5.2 Anycast/BGP切换:若自运营BGP,在RR或路由器上调整公告优先级或移除前缀以引流到清洗平台。
5.3 VIP/VRRP切换:使用keepalived将虚拟IP切换到备用节点:systemctl restart keepalived,验证ip addr show。
6. 数据保护与恢复准备
6.1 事先准备:定期做全盘快照与增量同步,MySQL定期 mysqldump --single-transaction 或使用备库复制。
6.2 恢复步骤(文件):从最近同步服务器rsync -az --delete backup:/srv/www/ /srv/www/,校验md5sum。
6.3 恢复步骤(MySQL):停止写;mysql -uroot -p < full_backup.sql;若有binlog,用mysqlbinlog按时间回放。
7. 灾难切换(演练可复制步骤)
7.1 演练流程:1) 切换VIP;2) 更新DNS;3) 等待健康检查通过;4) 逐步解除流量限流。
7.2 自动化脚本:编写runbook脚本包含ssh、rsync、systemctl、DNS API调用(示例:使用curl调用Cloudflare API更新记录)。
7.3 回滚要点:保留快照与日志,若新节点不稳定,立即回滚DNS并触发回测。
8. 根因分析与完善防护
8.1 收集证据:保存tcpdump -w capture.pcap、nginx/access.log、system logs,上传到集中日志系统。
8.2 分析要素:识别攻击IP段、请求模式、时间窗口,制作IP黑名单或ASN级阻断规则。
8.3 改进建议:调整监控阈值,增加Scrubbing服务合同,提前设置低TTL和多活架构。
9. 问:遇到大流量攻击,我应先做什么?
问:遇到大流量攻击,我应先做什么? 答:首先确认是否为DDoS(查看流量峰值、连接数、tcpdump),然后立即与上游/带宽商联系请求黑洞或流量清洗,同时启用本地限流(iptables/tc、nginx限速)并切换到备机或CDN以减轻压力。
10. 问:数据恢复时如何保证一致性?
问:数据恢复时如何保证一致性? 答:对数据库使用基于时间点恢复:先恢复最近全量备份,再按binlog按时间回放;对于文件用rsync增量同步并校验md5,恢复前暂停写入以避免数据漂移,恢复后进行完整性与功能测试。
11. 问:如何长期降低故障风险?
问:如何长期降低故障风险? 答:建立多活或热备架构、使用Anycast/CDN、签订流量清洗服务、定期演练故障切换、自动化Runbook并保持低TTL与完善监控告警。
来源:美国大带宽服务器 热点故障处理与容灾恢复实战手册