1.
概述:先做哪些准备工作
- 步骤1:登录控制台与远程访问准备。确认能通过控制台(机房提供的KVM/VM)或SSH访问服务器,记录IP、用户名、端口。
- 步骤2:准备排查工具。常用命令:ping、traceroute/mtr、nslookup/dig、ss/netstat、systemctl、journalctl、df、lsblk、mount、fsck、tcpdump/nc。若无工具,先在本地或服务器安装(例如 apt/yum 安装 mtr、bind-utils 等)。
2.
网络连通性排查(最常见)
- 步骤1:从本地或控制台 ping 公网 IP 和目标域名:ping -c 4 8.8.8.8;ping -c 4 your.server.ip;检查丢包与延时。
- 步骤2:用 traceroute/mtr 检查路由跳数:mtr -rw your.server.ip,观察是否在某一跳大量丢包或高延迟(可能是ISP或国际链路问题)。
- 步骤3:若控制台能通,但外网不通,检查服务器网卡配置:ip addr show;确认网关 ip route show;重启网络服务:sudo systemctl restart networking(或 NetworkManager、networking.service)。
3.
DNS解析问题的判断与修复
- 步骤1:本地与远端都无法解析域名:使用 dig +trace yourdomain.com 或 nslookup yourdomain.com 指定不同 DNS(8.8.8.8、114.114.114.114)对比。
- 步骤2:若 DNS 记录在控制面板错误,登录域名管理控制台修正 A/AAAA/CNAME/NS 记录,注意 TTL 生效时间。
- 步骤3:检查服务器 /etc/resolv.conf 是否配置正确 DNS,必要时临时写入:echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf,然后重启网络或服务。
4.
端口连通性与防火墙(最容易被忽视)
- 步骤1:本地 telnet 或 nc 测试远端端口是否开放:telnet your.server.ip 22 或 nc -vz your.server.ip 80。
- 步骤2:在服务器上查看监听端口:sudo ss -tulnp | grep :80 或 sudo netstat -tulnp。确认服务是否已启动并绑定正确 IP/端口。
- 步骤3:检查防火墙规则:iptables -L -n 或 sudo ufw status;若拒绝规则存在,临时允许端口:sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT(或 ufw allow 80),并持久化规则。
5.
服务进程崩溃与重启步骤
- 步骤1:检查服务状态:sudo systemctl status nginx(或 httpd、mysqld),注意最近日志提示。
- 步骤2:查看服务日志:sudo journalctl -u nginx -n 200 或 tail -n 200 /var/log/nginx/error.log,定位错误(配置语法、权限、端口占用)。
- 步骤3:尝试重载/重启:sudo nginx -t(测试配置),sudo systemctl restart nginx;若频繁崩溃,查看 core、OOM 或 ulimit 限制,调整并记录复现步骤。
6.
磁盘与文件系统故障排查
- 步骤1:检查磁盘空间:df -h;若 / 或 /var 磁盘满,找到大文件:sudo du -sh /var/* | sort -hr | head。清理日志或旧备份。
- 步骤2:检查磁盘健康与分区:lsblk、sudo fdisk -l,若使用云磁盘,登录控制台查看挂载与扩容是否成功。
- 步骤3:挂载异常或文件系统出错,先以只读或单用户模式卸载并运行 fsck:sudo umount /dev/sdb1 && sudo fsck -fy /dev/sdb1;注意对生产系统做快照或备份后再修复。
7.
日志分析与定位技巧
- 步骤1:按时间顺序查看系统日志:sudo journalctl -b -1(上一启动)或 tail -F /var/log/messages /var/log/syslog,根据时间点定位故障起点。
- 步骤2:组合使用 grep 过滤关键字:sudo grep -i "error" /var/log/nginx/error.log | tail -n 50;关注频率、IP、错误码。
- 步骤3:必要时抓包 tcpdump -i eth0 port 80 -w /tmp/http.pcap,然后用 Wireshark 分析 TCP 三次握手、RST 或重传等问题。
8.
恢复策略:回滚、备份与快照的使用
- 步骤1:始终先确认是否有最近可用快照或备份,若有则评估回滚范围(全盘、单卷或单文件)。
- 步骤2:按步骤恢复:先挂载快照到临时路径,验证数据完整,再在维护窗口内替换生产磁盘或恢复文件;保持 DNS TTL 足够短以便回滚。
- 步骤3:恢复后逐步验证服务:基本连通 -> 应用层功能 -> 性能测试,记录所有操作时间与命令,便于事后复盘。
9.
自动化脚本与常用工具推荐
- 步骤1:编写常用健康检查脚本,包含 ping、http status、disk usage 和 service status,设置 cron 每 5 分钟检测并告警。
- 步骤2:使用监控与告警:Prometheus + Alertmanager、Zabbix、Grafana 或云厂商自带监控,配置阈值与告警渠道(短信/邮件/钉钉)。
- 步骤3:准备应急脚本(重启关键服务、清理临时文件、切换到备用节点),并在测试环境演练回滚流程。
10.
维修时与机房/供应商沟通的要点
- 步骤1:提供准确信息:故障时间、影响范围、traceroute/mtr 截图、ping 丢包情况、控制台截图、实例 ID、公网 IP。
- 步骤2:分级描述问题(网络/硬件/存储/系统),并询问是否有机房层面的维护或网络波动。跟进 ticket 编号与预计恢复时间(ETA)。
11.
安全与加固复核(恢复后必做)
- 步骤1:检查是否存在入侵或滥用迹象:异常登录日志 /var/log/auth.log、cron 任务、陌生用户或可执行文件。
- 步骤2:修补漏洞并更新系统:sudo apt update && sudo apt upgrade;更改弱口令,启用 SSH key,关闭不必要端口与服务。
- 步骤3:复核防火墙规则、IPS/IDS 配置,确保策略符合最小权限原则。
12.
问:香港机房常见网络故障有哪些快速判断方法?
- 回答:先用 ping 与 mtr 判断丢包/延迟跳点;用不同区域的公网测试(大陆、香港、海外)对比是否为国际链路或ISP问题;登录机房控制台验证本机是否正常,若跨境链路异常则联系机房或上游ISP,并提供 traceroute 输出。
13.
问:如果 SSH 无法连接但控制台可用,该如何恢复服务?
- 回答:通过机房控制台登录检查网络配置(ip addr、route),查看 SSH 服务状态(sudo systemctl status sshd),若配置错误可临时修复 /etc/ssh/sshd_config 或重启网络;必要时恢复到上次可用配置并重启实例,记录变更。
14.
问:发生磁盘损坏或系统无法启动,优先级怎样处理?
- 回答:优先保证数据安全:立即在控制台做快照或备份;若磁盘可挂载尝试只读复制重要数据(rsync -a --inplace);若文件系统损坏在维护时间运行 fsck 并在修复前保留原始备份;若硬件故障联系机房申请更换或挂载新的云盘并从快照恢复。
来源:服务器托管香港教程中的常见故障排查与恢复方法