1. 服务器运维备忘录:从零开始的系统管理实战指南
作为一枚在运维坑里摸爬滚打多年的老司机,我深刻体会到服务器管理就像照顾一个永远长不大的孩子——稍不留神就会给你整出各种幺蛾子。这份备忘录最初只是我随手记录的便签,如今已经演变成团队内部传阅的"生存手册"。今天就把这些血泪经验系统化整理,涵盖从基础配置到高阶调优的全套操作指南。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 服务器基础环境配置
2.1 系统初始化 checklist
刚拿到新服务器时,建议按这个顺序执行初始化(以CentOS 7为例):
- 用户与权限管理
bash复制# 创建运维专用账户
useradd -m -s /bin/bash ops
passwd ops
usermod -aG wheel ops
# 禁用root远程登录
sed -i 's/^PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
systemctl restart sshd
- 基础安全加固
bash复制# 配置防火墙规则
firewall-cmd --permanent --add-service=ssh
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload
# 安装fail2ban防暴力破解
yum install epel-release -y
yum install fail2ban -y
systemctl enable --now fail2ban
关键提示:生产环境务必禁用密码登录,改用SSH Key认证。曾经有台测试服务器因为偷懒没做这步,结果成了黑客的肉鸡。
2.2 性能监控三板斧
快速判断服务器健康状态的黄金命令:
bash复制# 综合监控(需安装sysstat)
sar -u 1 3 # CPU使用率
sar -r 1 3 # 内存压力
sar -d 1 3 # 磁盘IO
iostat -x 1 # 磁盘性能详情
日常巡检时发现CPU的%iowait指标异常升高,顺藤摸瓜查出是某同事写的日志模块在疯狂写小文件。建议用这个组合命令快速定位问题进程:
bash复制# 找出磁盘IO高的罪魁祸首
iotop -oP
ps -eo pid,cmd,%cpu,%mem --sort=-%cpu | head
3. 服务部署与维护实战
3.1 Web服务避坑指南
Nginx配置中最容易踩的三大坑:
- 缓冲区溢出攻击防护
nginx复制client_body_buffer_size 1k;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k;
- 连接数优化(根据服务器内存调整)
nginx复制worker_processes auto;
worker_rlimit_nofile 100000;
events {
worker_connections 4000;
use epoll;
multi_accept on;
}
- 静态资源缓存策略
nginx复制location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
add_header Cache-Control "public, no-transform";
}
3.2 数据库运维备忘录
MySQL内存分配黄金比例(适用于4-8G内存服务器):
ini复制[mysqld]
innodb_buffer_pool_size = 总内存的50-60%
key_buffer_size = 256M
query_cache_size = 0 # MySQL 8.0已移除
tmp_table_size = 32M
max_heap_table_size = 32M
血泪教训:曾经有个项目把innodb_buffer_pool_size设得过大,导致OOM被系统kill。建议预留20%内存给系统和突发流量。
4. 自动化运维技巧
4.1 日志分析三板斧
- 实时监控日志异常
bash复制tail -f /var/log/nginx/access.log | grep -E '50[0-9]'
- 统计接口响应时间TOP10
bash复制awk '{print $4,$7,$NF}' access.log | sort -k3 -rn | head
- 错误日志自动报警(加入crontab)
bash复制#!/bin/bash
ERROR_COUNT=$(grep -c 'ERROR' /var/log/app/error.log)
if [ $ERROR_COUNT -gt 10 ]; then
echo "应用错误激增!当前错误数: $ERROR_COUNT" | mail -s "服务异常报警" admin@example.com
fi
4.2 备份策略设计
推荐采用3-2-1备份原则:
- 3份副本(本地+异地+冷备)
- 2种介质(SSD+磁带)
- 1份离线存储
实际备份脚本示例(每天凌晨2点执行):
bash复制#!/bin/bash
BACKUP_DIR="/backups/$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR
# MySQL全量备份
mysqldump -uadmin -pP@ssw0rd --all-databases | gzip > $BACKUP_DIR/mysql_full.sql.gz
# 关键配置文件打包
tar czf $BACKUP_DIR/etc_conf.tar.gz /etc/nginx /etc/ssh
# 同步到远程存储
rsync -avz --delete $BACKUP_DIR backup_server:/remote_backups/
5. 紧急故障处理手册
5.1 服务器无法连接应急方案
-
通过控制台登录检查
- 网络配置(ifconfig/ip addr)
- SSH服务状态(systemctl status sshd)
- 防火墙规则(iptables -L -n)
-
高负载快速处理
bash复制# 立即释放缓存
sync; echo 3 > /proc/sys/vm/drop_caches
# 找出CPU占用最高的进程
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head
5.2 数据库恢复操作
误删数据后的应急步骤:
- 立即锁表防止写入
sql复制FLUSH TABLES WITH READ LOCK;
- 从binlog恢复(需开启binlog)
bash复制mysqlbinlog --start-datetime="2023-07-01 14:00:00" \
--stop-datetime="2023-07-01 14:05:00" \
/var/lib/mysql/mysql-bin.000123 | mysql -u root -p
- 使用Percona XtraBackup热恢复
bash复制innobackupex --copy-back /backups/full_backup/
chown -R mysql:mysql /var/lib/mysql
systemctl start mysqld
6. 性能调优实战记录
6.1 Linux内核参数优化
/etc/sysctl.conf关键配置:
conf复制# 避免TCP连接卡在TIME_WAIT状态
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1 # 注意:NAT环境下禁用此参数
# 文件描述符相关
fs.file-max = 655350
fs.inotify.max_user_watches = 524288
# 内存分配策略
vm.swappiness = 10
vm.overcommit_memory = 1
6.2 磁盘IO调度策略
针对不同存储介质的优化方案:
| 存储类型 | 推荐调度器 | 调整方法 |
|---|---|---|
| SSD/NVMe | none或noop | echo noop > /sys/block/sda/queue/scheduler |
| 机械硬盘 | deadline | echo deadline > /sys/block/sdb/queue/scheduler |
| RAID阵列 | cfq | echo cfq > /sys/block/md0/queue/scheduler |
实测案例:将数据库服务器的调度器从默认的cfq改为deadline后,随机写入性能提升约35%
7. 安全防护进阶技巧
7.1 入侵检测系统部署
使用AIDE建立文件完整性监控:
bash复制# 初始化数据库
aide --init
# 将生成的数据库移到安全位置
mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
# 每日检测(加入crontab)
aide --check
7.2 网络层防护策略
iptables实战规则示例:
bash复制# 防SYN洪水攻击
iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
# 防CC攻击(每分钟最多60个新连接)
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 60 -j REJECT
# 封禁频繁访问者
iptables -I INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --update --seconds 60 --hitcount 20 -j DROP
iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --set -j ACCEPT
8. 实用工具推荐清单
8.1 诊断工具集
- 网络排查:mtr(比traceroute更强大)
- 进程监控:htop(彩色增强版top)
- 磁盘分析:ncdu(交互式磁盘空间查看器)
- 端口监听:ss(替代netstat的新工具)
8.2 日志分析神器
bash复制# 统计HTTP状态码分布
awk '{print $9}' access.log | sort | uniq -c | sort -rn
# 找出请求最频繁的IP
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head
# 分析慢查询(需MySQL开启慢日志)
mysqldumpslow -s t /var/log/mysql/mysql-slow.log
这份备忘录里的每个配置参数背后,几乎都对应着一次深夜救火的惨痛经历。建议新手运维把这些命令保存到本地笔记,遇到问题时按图索骥。记住:好的运维不是不犯错,而是同样的错误绝不犯第二次。
