1. 环境概览与前置准备
1) 登录信息与权限:确认云厂商控制台、VPS root/管理员账号、SSHKey(通常在~/.ssh/authorized_keys)。
2) 网络与端口表:列出管理端口(SSH、HTTP/HTTPS、数据库端口等)。示例文件:/opt/ops/vps_inventory.txt。
3) 建议工具:ssh, scp, rsync, tar, mysqldump/pg_dump, systemctl, journalctl, ss/netstat, tcpdump, mtr, iperf3。
2. 日常检查(5 分钟健康检查)
1) CPU/内存/Disk:top 或 free -h;df -h;检查 /var/log/messages、/var/log/syslog 最近50行:tail -n 50 /var/log/syslog。
2) 磁盘IO:iostat -xz 1 3(需安装 sysstat);发现 iowait 高则检查进程 sudo iotop。
3) 网络连通:ping -c 4 8.8.8.8;ss -tunlp 查看监听端口;curl -I http://localhost:80 验证服务响应。
3. SSH 无法连接的排查步骤
1) 控制台登录:先用云厂商 Web Console 或 Rescue Mode(救援模式)访问。
2) 检查 sshd 状态:systemctl status sshd;重启:sudo systemctl restart sshd && sudo journalctl -u sshd -n 50。
3) 验证防火墙:sudo ufw status verbose 或 sudo iptables -L -n;若端口被阻塞,临时允许 sudo ufw allow 22/tcp。
4) 检查认证问题:/var/log/auth.log 中搜索“sshd”相关错误;确认 authorized_keys 权限为600,.ssh 目录为700。
4. 服务不可用(HTTP/数据库)排查指南
1) 进程与端口:ss -tunlp | grep :80 或 :443,若无监听,查看 web 服务日志(常见路径 /var/log/nginx/error.log 或 /var/log/apache2/error.log)。
2) 重载配置:sudo nginx -t && sudo systemctl reload nginx;若失败,先备份配置后回滚。
3) 数据库故障:mysql 服务状态 sudo systemctl status mysql;查看错误 /var/log/mysql/error.log。若是数据文件损坏,使用 mysqld --innodb_force_recovery=1..6(慎用,先备份)。
5. 磁盘空间耗尽的快速恢复步骤
1) 查找大文件:sudo du -sh /* | sort -h 或 sudo find / -xdev -type f -size +100M -exec ls -lh {} \;。
2) 清理日志:logrotate 配置 /etc/logrotate.d/,手动清理旧日志:sudo truncate -s 0 /var/log/large.log。
3) 临时扩容:在云控制台调整磁盘大小并在系统内扩展分区(例:growpart /dev/vda 1 && resize2fs /dev/vda1 或 xfs_growfs)。
6. 网络性能与丢包排查(实操)
1) 路径追踪:mtr -r -c 100 目标IP,观察丢包和延迟跳点。
2) 抓包分析:sudo tcpdump -i eth0 port 80 -w /tmp/http.pcap,下载到本地用 Wireshark 分析。
3) 基准测试:iperf3 客户端/服务器测试带宽与丢包,能区分内部网络与公网问题。
7. 自动化监控与告警建议
1) 部署监控:推荐 Prometheus + node_exporter + alertmanager,或轻量 Netdata。
2) 告警规则:CPU>85% 持续 5 分钟,磁盘使用>80%,服务 down。将告警推送到 Slack/邮件/电话。
3) 日志集中:ELK/EFK 或 Loki + Grafana,确保日志保留策略与索引策略到位以节省空间。
8. 备份策略总览(3-2-1 原则落地)
1) 3 份备份、2 种媒介、1 份异地:本地快照+远程 rsync 到另一个香港/海外节点+对象存储(如 S3、阿里 OSS)。
2) 数据分层:静态文件用 rsync,数据库用逻辑导出(mysqldump/pg_dump)或物理备份(Percona XtraBackup)。
3) 加密与版本:备份文件用 gpg 对称/非对称加密,并保留最近 7 天增量、每周全量、每月归档。
9. 可执行的备份脚本示例(rsync + mysqldump)
1) mysqldump:mysqldump -ubackup -p'PASSWORD' --single-transaction --quick --lock-tables=false dbname > /backup/dbname_$(date +%F).sql
2) 文件同步(增量):rsync -az --delete --link-dest=/backup/last /var/www/ /backup/$(date +%F)/
3) 上传对象存储:使用 s3cmd 或 rclone,示例 rclone copy /backup s3:bucket/backup --transfers 4。将脚本加入 cron:0 2 * * * /usr/local/bin/backup.sh >/dev/null 2>&1
10. 恢复演练与验证步骤
1) 定期演练:每月至少在测试环境还原一次全量备份并验证应用能正常启动。
2) 数据库验证:导入 SQL 到测试库并运行完整性检查(表 count、关键业务查询结果比对)。
3) 快照回滚:在云控制台做快照回滚前,创建当前系统快照并记录变更窗口与回滚步骤文档。
11. 安全与合规性注意事项
1) 密钥管理:避免明文密码,使用 Vault(HashiCorp)或云 KMS 存储凭证。
2) 日志与审计:保存访问审计日志,定期检查异常登录与 sudo 使用记录。
3) 最小权限与网络隔离:使用安全组/防火墙仅开放必要端口;对内部服务使用私有网络。
12. 问答一:如何在香港 VPS 上实现近零 RTO 的恢复?
问:如何在香港 VPS 上实现近零恢复时间目标(RTO)?
答:使用主从/多活架构并结合实时复制(如 MySQL 的 GTID 复制或 PostgreSQL 的 streaming replication),将数据写入多个可用区;对文件使用实时同步(lsyncd 或 GlusterFS);关键服务使用负载均衡(HAProxy/云 LB)与健康检查,出现节点故障自动切换,配合自动化脚本与基础镜像实现快速替换。
13. 问答二:备份策略如何避免影响生产性能?
问:怎样设置备份以不影响生产性能?
答:对数据库使用逻辑备份时启用 --single-transaction 或使用物理热备(XtraBackup);把备份窗口设在低峰期,使用增量或差异备份减少 IO;把生成的备份文件先存本地临时目录再异步上传到对象存储,限制上行带宽(rsync --bwlimit=5000);监控备份过程中的 IO/CPU 并设置告警。
14. 问答三:恢复失败时的应急流程是什么?
闏:如果恢复失败,第一步该做什么?(注:请按步骤说明)
答:1) 立即停止进一步破坏性操作并记录错误日志;2) 切换到预置的备用节点或只读实例以保持业务可用;3) 使用最近的已知良好快照恢复到隔离环境并重演恢复过程定位问题;4) 若快照损坏,回滚至上一个可用备份并手动补数据;5) 完成后复盘并补齐备份缺陷,更新恢复手册。
来源:企业运维手册香港的vps管理故障排查与备份方案