运维岗位完整学习指南:从 Linux 基础到 DevOps / SRE 实战

运维岗位完整学习指南:岗位职责、技能体系、工具详解、学习路线、项目实战与面试题 🛠️

适合人群:零基础想转运维、应届生准备系统运维/云运维/DevOps、已经会一点 Linux 但不知道下一步学什么的人。

文档目标:讲清楚 运维岗位到底做什么、需要掌握什么、学什么、用什么工具、怎么做项目、怎么准备面试

不绑定前端、不围绕开发岗位展开,重点讲真实企业运维、云运维、DevOps、SRE 常用能力。


目录

  • [1. 运维岗位是什么](#1. 运维岗位是什么)
  • [2. 运维岗位的发展方向](#2. 运维岗位的发展方向)
  • [3. 运维核心能力模型](#3. 运维核心能力模型)
  • [4. Linux 系统管理](#4. Linux 系统管理)
  • [5. 计算机网络与排障](#5. 计算机网络与排障)
  • [6. Web 服务与负载均衡](#6. Web 服务与负载均衡)
  • [7. 数据库与中间件运维](#7. 数据库与中间件运维)
  • [8. Shell 与 Python 自动化](#8. Shell 与 Python 自动化)
  • [9. Docker 容器运维](#9. Docker 容器运维)
  • [10. Kubernetes 云原生运维](#10. Kubernetes 云原生运维)
  • [11. 监控告警与可观测性](#11. 监控告警与可观测性)
  • [12. 日志系统与链路追踪](#12. 日志系统与链路追踪)
  • [13. CI/CD 与发布系统](#13. CI/CD 与发布系统)
  • [14. 自动化运维与 IaC](#14. 自动化运维与 IaC)
  • [15. 云平台运维](#15. 云平台运维)
  • [16. 安全运维](#16. 安全运维)
  • [17. 备份、容灾与高可用](#17. 备份、容灾与高可用)
  • [18. SRE 与稳定性工程](#18. SRE 与稳定性工程)
  • [19. 运维学习路线](#19. 运维学习路线)
  • [20. 运维实战项目](#20. 运维实战项目)
  • [21. 运维面试题与答案](#21. 运维面试题与答案)
  • [22. 官方文档与学习资源](#22. 官方文档与学习资源)
  • [23. 总结](#23. 总结)

1. 运维岗位是什么

运维,全称通常叫 IT Operations / System Operations / Infrastructure Operations,在公司里主要负责服务器、网络、系统、中间件、数据库、容器平台、发布流程、监控告警、安全加固、故障恢复等工作。

一句话理解:

运维的核心职责是 让系统稳定、安全、高效、可持续地运行

运维不是简单地"重启服务器""装软件""看日志",而是要围绕以下目标工作:

核心目标 说明
稳定性 服务不能频繁宕机,系统要能长时间稳定运行
可用性 用户能够正常访问系统,核心服务不能随便不可用
可观测性 系统出问题时能通过监控、日志、链路追踪快速定位
自动化 减少手动操作,降低人为失误,提高效率
安全性 防止入侵、越权、数据泄露、恶意请求、漏洞攻击
可恢复性 出现故障后能够快速回滚、恢复、切换、备份还原
成本控制 云服务器、带宽、存储、数据库、监控资源不能浪费

2. 运维岗位的发展方向

运维岗位不是单一岗位,而是一组相关方向。不同公司叫法不一样,但能力有很多重叠。

2.1 系统运维

主要负责 Linux/Windows 服务器、系统服务、用户权限、磁盘、网络、进程、系统安全等。

需要重点掌握:

  • Linux 系统管理
  • 用户、权限、进程、服务
  • 磁盘、LVM、文件系统
  • Shell 脚本
  • 系统日志
  • SSH 与安全加固
  • 防火墙、安全组
  • 常见服务部署

适合入门岗位:初级运维工程师、Linux 运维工程师、系统管理员


2.2 网络运维

主要负责交换机、路由器、防火墙、VPN、DNS、负载均衡、机房网络、云网络等。

需要重点掌握:

  • TCP/IP
  • VLAN、子网、路由
  • DNS、HTTP、HTTPS
  • 防火墙策略
  • VPN
  • CDN
  • SLB/CLB
  • 网络抓包
  • 网络故障定位

适合方向:网络工程师、网络运维、IDC 运维、云网络运维


2.3 应用运维

主要负责业务应用的部署、发布、配置、日志、性能、监控、回滚、故障处理。

需要重点掌握:

  • Nginx / Apache
  • Tomcat / Java 应用部署
  • Node/PHP/Python/Go 服务部署基础
  • MySQL / Redis / MQ 基础
  • 日志排查
  • 监控告警
  • 发布回滚
  • 性能分析

适合方向:应用运维工程师、业务运维工程师、平台运维工程师


2.4 数据库运维 DBA

主要负责数据库安装、备份、恢复、主从复制、高可用、性能优化、慢查询分析、容量规划。

需要重点掌握:

  • MySQL / PostgreSQL
  • Redis
  • MongoDB
  • Elasticsearch
  • 数据备份与恢复
  • 主从复制
  • 高可用架构
  • SQL 优化
  • 慢查询分析
  • 数据安全

适合方向:数据库管理员 DBA、数据库运维工程师


2.5 云运维

主要负责云服务器、云数据库、云网络、对象存储、负载均衡、CDN、云监控、安全组、权限等。

需要重点掌握:

  • ECS/CVM 云服务器
  • VPC 私有网络
  • 安全组
  • SLB/CLB 负载均衡
  • RDS 云数据库
  • OSS/COS/S3 对象存储
  • CDN
  • 云监控
  • IAM/RAM 权限
  • 云安全
  • 云成本优化

适合方向:云运维工程师、云平台运维、云计算工程师


2.6 DevOps 工程师

DevOps 更偏向自动化、效率平台、CI/CD、容器化、基础设施即代码。

需要重点掌握:

  • Git
  • Jenkins / GitLab CI / GitHub Actions
  • Docker
  • Kubernetes
  • Helm
  • Harbor
  • Ansible
  • Terraform
  • Prometheus / Grafana
  • 发布平台
  • 自动化脚本

适合方向:DevOps 工程师、平台工程师、自动化运维工程师


2.7 SRE 稳定性工程师

SRE 是 Site Reliability Engineering,站点可靠性工程。相比传统运维,SRE 更强调工程化、指标化、自动化、可靠性治理。

需要重点掌握:

  • SLI / SLO / SLA
  • 错误预算
  • 故障复盘
  • 容量规划
  • 限流、熔断、降级
  • 灾备演练
  • 混沌工程
  • 可观测性
  • 自动化恢复
  • 高可用架构

适合方向:SRE 工程师、稳定性工程师、高级运维、基础架构工程师


3. 运维核心能力模型

一个合格运维应该具备以下 8 类能力。

能力 初级要求 进阶要求
系统能力 会用 Linux 命令、管理服务 会内核参数、性能调优、系统安全
网络能力 会 ping、curl、DNS、端口排查 会抓包、负载均衡、网络架构设计
部署能力 会手动部署服务 会自动化发布、灰度、回滚
排障能力 能看日志定位常见问题 能定位复杂链路、性能瓶颈
监控能力 会看 CPU/内存/磁盘 会设计指标、告警、Dashboard
自动化能力 会写 Shell 脚本 会 Ansible、Python、Terraform
容器能力 会 Docker 基础命令 会 K8s、Helm、GitOps
安全能力 会改 SSH、防火墙 会漏洞修复、权限治理、审计

运维能力可以用一句话概括:

能部署、能监控、能排障、能自动化、能恢复、能优化。


4. Linux 系统管理

Linux 是运维的核心基础。无论是传统服务器、云服务器、Docker 宿主机还是 Kubernetes 节点,本质上都离不开 Linux。

4.1 Linux 发行版

常见发行版:

发行版 特点 企业常见度
CentOS 曾经非常流行,传统企业常见 老项目常见
Rocky Linux CentOS 替代方案之一 新项目可选
AlmaLinux CentOS 替代方案之一 新项目可选
Ubuntu Server 社区活跃,云平台常见 非常常见
Debian 稳定、轻量 常见
RHEL Red Hat 企业版 大型企业常见
openEuler 国产服务器场景常见 国内政企常见

建议学习顺序:

text 复制代码
Ubuntu Server / Rocky Linux 二选一入门
→ 熟悉包管理、服务管理、日志管理
→ 再了解 RHEL/CentOS 系生态差异

4.2 Linux 文件目录结构

目录 作用
/bin 基础命令
/sbin 系统管理命令
/etc 配置文件目录
/var 日志、缓存、运行数据
/var/log 系统和服务日志
/usr 用户程序、库文件
/home 普通用户家目录
/root root 用户家目录
/opt 第三方软件安装目录
/tmp 临时文件目录
/proc 内核和进程虚拟文件系统
/dev 设备文件
/mnt 临时挂载目录

排障时常看的目录:

bash 复制代码
/etc/nginx/                 # Nginx 配置
/var/log/nginx/             # Nginx 日志
/etc/systemd/system/        # systemd 自定义服务
/var/log/messages           # 系统日志,RHEL 系
/var/log/syslog             # 系统日志,Debian/Ubuntu 系
/var/log/secure             # 登录和认证日志,RHEL 系
/var/log/auth.log           # 登录和认证日志,Ubuntu 系

4.3 Linux 必会命令

文件操作

bash 复制代码
ls -lh
cd /opt
pwd
cp a.txt b.txt
mv old.txt new.txt
rm -rf /tmp/test
mkdir -p /data/app
find /var/log -type f -name "*.log"

文本查看

bash 复制代码
cat file.log
less file.log
head -n 50 file.log
tail -n 100 file.log
tail -f app.log
grep "ERROR" app.log
grep -rn "timeout" /var/log/

文本处理

bash 复制代码
awk '{print $1}' access.log
sed -n '1,20p' app.log
sort access.log
uniq -c
cut -d ':' -f1 /etc/passwd

压缩解压

bash 复制代码
tar -czvf backup.tar.gz /data/www
tar -xzvf backup.tar.gz
zip -r backup.zip /data/www
unzip backup.zip

权限管理

bash 复制代码
chmod 755 script.sh
chmod 644 config.conf
chown nginx:nginx /data/www
usermod -aG wheel zhangsan

权限理解:

权限 数字 说明
r 4
w 2
x 1 执行
755 rwxr-xr-x 所有者可读写执行,其他人读执行
644 rw-r--r-- 所有者可读写,其他人只读
600 rw------- 只有所有者可读写,常用于私钥

4.4 用户与权限

bash 复制代码
# 创建用户
useradd deploy
passwd deploy

# 创建用户组
groupadd devops

# 加入用户组
usermod -aG devops deploy

# 查看用户
id deploy

# 删除用户
userdel -r deploy

sudo 权限配置:

bash 复制代码
visudo

示例:

bash 复制代码
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx

意思是:deploy 用户可以免密执行重启 Nginx 的命令,但不能随意执行所有 root 命令。


4.5 进程管理

bash 复制代码
ps aux | grep nginx
top
htop
pidof nginx
kill -9 PID
pgrep java

常见排查思路:

text 复制代码
服务访问异常
→ 查看进程是否存在
→ 查看端口是否监听
→ 查看日志是否报错
→ 查看资源是否耗尽
→ 查看配置是否变更

4.6 systemd 服务管理

bash 复制代码
systemctl status nginx
systemctl start nginx
systemctl stop nginx
systemctl restart nginx
systemctl reload nginx
systemctl enable nginx
systemctl disable nginx
journalctl -u nginx -f
journalctl -xe

自定义 systemd 服务示例:

ini 复制代码
[Unit]
Description=My App Service
After=network.target

[Service]
User=deploy
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/java -jar /opt/myapp/app.jar
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

保存路径:

bash 复制代码
/etc/systemd/system/myapp.service

启用:

bash 复制代码
systemctl daemon-reload
systemctl enable myapp
systemctl start myapp

4.7 磁盘与文件系统

常用命令:

bash 复制代码
df -h                  # 查看磁盘空间
du -sh /var/log        # 查看目录大小
lsblk                  # 查看磁盘结构
fdisk -l               # 查看磁盘分区
mount                  # 查看挂载
mount /dev/sdb1 /data  # 挂载磁盘
umount /data           # 卸载磁盘

排查磁盘满:

bash 复制代码
# 查看哪个分区满了
df -h

# 找大目录
du -h --max-depth=1 / | sort -h

# 找大文件
find / -type f -size +500M 2>/dev/null

# 查看已删除但仍被进程占用的文件
lsof | grep deleted

常见磁盘满原因:

原因 处理方式
日志过大 日志切割、压缩、清理
Docker 日志过大 配置 log-driver 和 max-size
数据库 binlog 过多 设置过期时间,谨慎清理
临时文件过多 清理 /tmp、缓存目录
删除文件后空间未释放 查找 deleted 文件,重启对应进程

5. 计算机网络与排障

网络是运维排障的核心。很多线上问题表面是"网站打不开",实际可能是 DNS、证书、端口、防火墙、负载均衡、服务挂掉、后端超时、网络链路问题。

5.1 必学网络知识

知识点 必须掌握
IP 地址 公网 IP、内网 IP、IPv4、IPv6
子网掩码 /24/16、CIDR
网关 出网入口
DNS 域名解析流程
TCP 三次握手、四次挥手、可靠传输
UDP 无连接、速度快、常用于 DNS/音视频
HTTP 请求方法、状态码、Header
HTTPS TLS/SSL、证书、加密
CDN 缓存、回源、刷新、预热
NAT 内外网地址转换
负载均衡 四层、七层、轮询、权重、IP hash

5.2 常用网络命令

bash 复制代码
ping example.com
curl -I https://example.com
curl -v https://example.com
nslookup example.com
dig example.com
traceroute example.com
mtr example.com
ss -tunlp
netstat -tunlp
ip addr
ip route
telnet 1.1.1.1 443
nc -zv 1.1.1.1 443
tcpdump -i eth0 port 80

5.3 HTTP 状态码排障

状态码 含义 运维排查方向
200 正常 无需处理
301/302 重定向 检查 Nginx rewrite、HTTPS 跳转
400 请求错误 检查请求参数、Header、网关限制
401 未认证 检查认证配置
403 禁止访问 检查权限、目录权限、Nginx allow/deny
404 找不到资源 检查路径、路由、文件是否存在
413 请求体太大 调整 Nginx client_max_body_size
499 客户端断开 检查接口慢、用户取消请求、网络差
500 服务内部错误 查应用日志
502 网关错误 后端服务挂了、端口不通、代理配置错
503 服务不可用 后端过载、维护、限流
504 网关超时 后端处理慢、超时时间过短

5.4 网站打不开的标准排查流程

text 复制代码
1. 用户是否能解析域名?
   nslookup domain.com
   dig domain.com

2. 域名是否解析到正确 IP?
   对比 DNS 记录和服务器公网 IP

3. 服务器是否能 ping 通?
   ping server_ip

4. 端口是否开放?
   nc -zv server_ip 80
   nc -zv server_ip 443

5. 云安全组是否放行?
   检查云平台安全组入方向规则

6. 服务器防火墙是否放行?
   firewall-cmd --list-all
   iptables -L -n

7. Nginx 是否启动?
   systemctl status nginx

8. Nginx 配置是否正确?
   nginx -t

9. 后端服务是否启动?
   ps aux | grep app
   ss -tunlp | grep 8080

10. 日志是否报错?
   tail -f /var/log/nginx/error.log
   tail -f app.log

6. Web 服务与负载均衡

6.1 Nginx 需要掌握什么

Nginx 是运维最常用的 Web 服务、反向代理和负载均衡组件之一。

必须掌握:

模块 内容
安装 yum/apt 安装、源码编译了解即可
配置结构 main、events、http、server、location
静态网站 root、index、try_files
反向代理 proxy_pass、proxy_set_header
负载均衡 upstream、weight、ip_hash
HTTPS SSL 证书配置、强制跳转
日志 access.log、error.log、自定义 log_format
限流 limit_req、limit_conn
缓存 proxy_cache
压缩 gzip
重写 rewrite、return
安全 禁止访问隐藏文件、限制方法、隐藏版本号

6.2 Nginx 静态站点配置

nginx 复制代码
server {
    listen 80;
    server_name example.com;

    root /data/www/example;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ /index.html;
    }

    access_log /var/log/nginx/example_access.log;
    error_log  /var/log/nginx/example_error.log;
}

6.3 Nginx 反向代理配置

nginx 复制代码
server {
    listen 80;
    server_name api.example.com;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

6.4 Nginx 负载均衡配置

nginx 复制代码
upstream app_backend {
    server 10.0.0.11:8080 weight=3;
    server 10.0.0.12:8080 weight=2;
    server 10.0.0.13:8080 backup;
}

server {
    listen 80;
    server_name app.example.com;

    location / {
        proxy_pass http://app_backend;
    }
}

常见负载均衡策略:

策略 说明
轮询 默认方式,请求依次转发
weight 权重越高,请求越多
ip_hash 同一 IP 尽量转发到同一后端
least_conn 优先转发到连接数少的节点
backup 主节点不可用时启用备用节点

6.5 HTTPS 配置

nginx 复制代码
server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate     /etc/nginx/ssl/example.com.pem;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        proxy_pass http://127.0.0.1:8080;
    }
}

server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

7. 数据库与中间件运维

运维不一定要成为 DBA,但必须会部署、备份、恢复、监控和基础排障。

7.1 MySQL 运维

必须掌握:

模块 内容
安装部署 yum/apt/docker 安装
用户权限 创建用户、授权、回收权限
数据备份 mysqldump、物理备份了解
数据恢复 导入 SQL、指定库恢复
主从复制 binlog、relay log、GTID
慢查询 slow query log、explain
性能指标 QPS、TPS、连接数、锁等待
安全 禁止 root 远程、强密码、最小权限

常用命令:

sql 复制代码
-- 查看数据库
SHOW DATABASES;

-- 查看用户
SELECT user, host FROM mysql.user;

-- 创建用户
CREATE USER 'appuser'@'%' IDENTIFIED BY 'StrongPassword';

-- 授权
GRANT SELECT, INSERT, UPDATE, DELETE ON appdb.* TO 'appuser'@'%';

-- 刷新权限
FLUSH PRIVILEGES;

-- 查看连接数
SHOW STATUS LIKE 'Threads_connected';

-- 查看慢查询是否开启
SHOW VARIABLES LIKE 'slow_query_log';

备份恢复:

bash 复制代码
# 备份单库
mysqldump -uroot -p appdb > appdb_$(date +%F).sql

# 备份所有库
mysqldump -uroot -p --all-databases > all_$(date +%F).sql

# 恢复
mysql -uroot -p appdb < appdb_2026-06-08.sql

7.2 Redis 运维

必须掌握:

模块 内容
数据结构 string、hash、list、set、zset
持久化 RDB、AOF
主从复制 master/replica
高可用 Sentinel
集群 Redis Cluster
内存管理 maxmemory、淘汰策略
安全 requirepass、bind、防火墙
监控 connected_clients、used_memory、ops

常用命令:

bash 复制代码
redis-cli ping
redis-cli info
redis-cli info memory
redis-cli info replication
redis-cli config get maxmemory
redis-cli slowlog get 10

重点指标:

指标 说明
used_memory Redis 使用内存
connected_clients 当前客户端连接数
instantaneous_ops_per_sec 每秒操作数
keyspace_hits / misses 缓存命中与未命中
rejected_connections 被拒绝连接数
expired_keys 过期 key 数量
evicted_keys 被淘汰 key 数量

7.3 消息队列

常见消息队列:

工具 场景
RabbitMQ 传统业务异步、可靠投递
Kafka 日志、流式数据、高吞吐
RocketMQ 电商、金融、事务消息

运维需要关注:

  • 队列堆积
  • 消费者是否存活
  • 消息重试
  • 死信队列
  • 磁盘占用
  • Broker 状态
  • 集群副本
  • 消息丢失风险

7.4 Elasticsearch 运维

需要掌握:

  • 集群健康:green/yellow/red
  • index、shard、replica
  • mapping
  • 查询性能
  • JVM 内存
  • 磁盘水位
  • 快照备份
  • ILM 生命周期管理

常用命令:

bash 复制代码
curl http://localhost:9200/_cluster/health?pretty
curl http://localhost:9200/_cat/indices?v
curl http://localhost:9200/_cat/nodes?v
curl http://localhost:9200/_cat/shards?v

8. Shell 与 Python 自动化

运维如果只会手动操作,很难成长。自动化是运维进阶的关键。

8.1 Shell 必学内容

内容 说明
变量 保存路径、服务名、日期等
参数 $1$2$@
条件判断 if、case
循环 for、while
函数 封装重复逻辑
文本处理 grep、awk、sed
定时任务 crontab
日志输出 标准输出、错误输出
退出码 $?

8.2 Shell 巡检脚本示例

bash 复制代码
#!/bin/bash

DATE=$(date +%F_%H-%M-%S)
REPORT="/tmp/server_check_$DATE.txt"

{
  echo "===== 服务器巡检报告 ====="
  echo "时间: $(date)"
  echo

  echo "===== 主机名 ====="
  hostname
  echo

  echo "===== 系统版本 ====="
  cat /etc/os-release | head -n 5
  echo

  echo "===== CPU 负载 ====="
  uptime
  echo

  echo "===== 内存使用 ====="
  free -h
  echo

  echo "===== 磁盘使用 ====="
  df -h
  echo

  echo "===== 端口监听 ====="
  ss -tunlp
  echo

  echo "===== 最近登录 ====="
  last -n 5
} > "$REPORT"

echo "巡检完成:$REPORT"

8.3 磁盘告警脚本

bash 复制代码
#!/bin/bash

THRESHOLD=80
USAGE=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')

if [ "$USAGE" -ge "$THRESHOLD" ]; then
  echo "警告:根分区磁盘使用率 ${USAGE}%,超过 ${THRESHOLD}%"
else
  echo "正常:根分区磁盘使用率 ${USAGE}%"
fi

8.4 Python 运维自动化

Python 适合做:

  • 批量 SSH 管理
  • 调用云平台 API
  • 巡检报表
  • 日志分析
  • 自动化平台后端
  • 监控数据处理
  • 告警消息发送

常用库:

用途
os / sys 系统操作
subprocess 执行系统命令
requests 调用 HTTP API
paramiko SSH 自动化
fabric 批量远程执行
pandas 处理巡检表格
schedule 简单定时任务
fastapi 写运维平台接口

9. Docker 容器运维

Docker 是现代运维必须掌握的基础技能。它解决了"环境不一致、部署复杂、依赖冲突"的问题。

9.1 Docker 核心概念

概念 说明
Image 镜像 应用运行环境模板
Container 容器 镜像运行后的实例
Dockerfile 构建镜像的说明文件
Registry 镜像仓库
Volume 数据持久化
Network 容器网络
Compose 多容器编排工具

9.2 Docker 常用命令

bash 复制代码
# 查看版本
docker version

# 查看镜像
docker images

# 查看运行中容器
docker ps

# 查看所有容器
docker ps -a

# 启动 Nginx 容器
docker run -d --name nginx-demo -p 80:80 nginx

# 查看日志
docker logs -f nginx-demo

# 进入容器
docker exec -it nginx-demo bash

# 停止容器
docker stop nginx-demo

# 删除容器
docker rm nginx-demo

# 删除镜像
docker rmi nginx

9.3 Dockerfile 示例

dockerfile 复制代码
FROM openjdk:17-jdk-slim

WORKDIR /app

COPY app.jar /app/app.jar

EXPOSE 8080

ENTRYPOINT ["java", "-jar", "app.jar"]

构建和运行:

bash 复制代码
docker build -t myapp:1.0 .
docker run -d --name myapp -p 8080:8080 myapp:1.0

9.4 docker-compose 示例

yaml 复制代码
version: "3.8"

services:
  nginx:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - app

  app:
    image: myapp:1.0
    ports:
      - "8080:8080"
    environment:
      - SPRING_PROFILES_ACTIVE=prod

  redis:
    image: redis:7
    ports:
      - "6379:6379"

启动:

bash 复制代码
docker compose up -d
docker compose ps
docker compose logs -f
docker compose down

9.5 Docker 常见故障

问题 排查方式
容器启动失败 docker logs 容器名
端口冲突 ss -tunlp 查看端口占用
容器访问不了外网 检查 Docker 网络、DNS、防火墙
数据丢失 是否使用 volume 持久化
镜像过大 多阶段构建、减少依赖、清理缓存
日志过大 配置 Docker 日志大小限制

Docker 日志限制示例:

json 复制代码
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  }
}

路径:

bash 复制代码
/etc/docker/daemon.json

10. Kubernetes 云原生运维

Kubernetes,简称 K8s,是容器编排系统,用于管理大规模容器应用。

10.1 为什么要学 Kubernetes

Docker 能运行单个容器,但企业线上环境通常需要:

  • 多个服务
  • 多台机器
  • 自动重启
  • 自动扩容
  • 服务发现
  • 配置管理
  • 灰度发布
  • 负载均衡
  • 存储挂载
  • 权限控制
  • 集群调度

这些就是 Kubernetes 解决的问题。


10.2 K8s 核心组件

组件 作用
kube-apiserver 集群 API 入口
etcd 保存集群状态数据
scheduler 调度 Pod 到节点
controller-manager 维护集群期望状态
kubelet 节点代理,管理 Pod
kube-proxy 服务转发
container runtime 容器运行时,如 containerd

10.3 K8s 核心资源

资源 作用
Pod 最小运行单元
Deployment 无状态应用部署
StatefulSet 有状态应用部署
DaemonSet 每个节点运行一个 Pod
Job 一次性任务
CronJob 定时任务
Service 服务访问入口
Ingress HTTP/HTTPS 路由入口
ConfigMap 普通配置
Secret 敏感配置
PV/PVC 持久化存储
Namespace 资源隔离
RBAC 权限控制
HPA 自动扩缩容

10.4 kubectl 常用命令

bash 复制代码
kubectl get nodes
kubectl get pods -A
kubectl get svc -A
kubectl get deploy -A
kubectl describe pod pod-name
kubectl logs -f pod-name
kubectl exec -it pod-name -- bash
kubectl apply -f deployment.yaml
kubectl delete -f deployment.yaml
kubectl rollout status deployment myapp
kubectl rollout history deployment myapp
kubectl rollout undo deployment myapp

10.5 Deployment 示例

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
  labels:
    app: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
        - name: myapp
          image: myapp:1.0
          ports:
            - containerPort: 8080
          resources:
            requests:
              cpu: "100m"
              memory: "128Mi"
            limits:
              cpu: "500m"
              memory: "512Mi"

10.6 Service 示例

yaml 复制代码
apiVersion: v1
kind: Service
metadata:
  name: myapp-service
spec:
  selector:
    app: myapp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: ClusterIP

10.7 Ingress 示例

yaml 复制代码
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: myapp-ingress
spec:
  rules:
    - host: myapp.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: myapp-service
                port:
                  number: 80

10.8 K8s 常见故障排查

Pod 一直 Pending

可能原因:

  • 节点资源不足
  • 节点不可调度
  • PVC 没绑定
  • 镜像拉取配置问题
  • nodeSelector / taint 不匹配

排查命令:

bash 复制代码
kubectl describe pod pod-name
kubectl get nodes
kubectl describe node node-name

Pod CrashLoopBackOff

可能原因:

  • 应用启动报错
  • 配置文件错误
  • 依赖服务不可用
  • 健康检查配置错误
  • 资源限制过小导致 OOM

排查命令:

bash 复制代码
kubectl logs pod-name
kubectl logs pod-name --previous
kubectl describe pod pod-name

ImagePullBackOff

可能原因:

  • 镜像名错误
  • tag 不存在
  • 私有仓库认证失败
  • 节点无法访问镜像仓库

排查:

bash 复制代码
kubectl describe pod pod-name

Node NotReady

可能原因:

  • kubelet 异常
  • 容器运行时异常
  • 节点资源耗尽
  • 网络插件异常
  • 节点与 apiserver 通信异常

排查:

bash 复制代码
systemctl status kubelet
journalctl -u kubelet -f
kubectl describe node node-name

11. 监控告警与可观测性

监控不是"装个面板"那么简单,真正的监控要解决三个问题:

text 复制代码
1. 出问题能及时发现
2. 出问题能快速定位
3. 出问题能量化影响范围

11.1 监控体系分层

层级 监控内容
基础设施层 CPU、内存、磁盘、网络、负载
系统服务层 Nginx、MySQL、Redis、Kafka
容器层 Docker、containerd、Pod、Node
应用层 QPS、错误率、响应时间、线程、JVM
业务层 登录数、订单数、支付成功率、转化率
用户体验层 页面打开速度、接口耗时、错误提示

11.2 Prometheus 技术栈

组件 作用
Prometheus Server 采集和存储指标
Exporter 暴露指标
Node Exporter Linux 主机指标
Blackbox Exporter HTTP/TCP/ICMP 探测
cAdvisor 容器指标
Alertmanager 告警分组、静默、发送
Grafana 可视化 Dashboard

11.3 常见监控指标

Linux 主机

指标 告警建议
CPU 使用率 连续 5 分钟超过 80%
内存使用率 连续 5 分钟超过 85%
磁盘使用率 超过 80% 提醒,超过 90% 严重
磁盘 IO await、util 过高
网络流量 异常突增或丢包
Load Average 超过 CPU 核心数较多

Web 服务

指标 说明
QPS 每秒请求数
4xx 比例 客户端错误比例
5xx 比例 服务端错误比例
P95 响应时间 95% 请求的耗时
活跃连接数 并发连接情况

MySQL

指标 说明
Threads_connected 当前连接数
Slow_queries 慢查询数量
Queries 查询总数
Innodb_buffer_pool_hit_rate 缓存命中率
Seconds_Behind_Master 主从延迟

Redis

指标 说明
used_memory 内存占用
connected_clients 客户端连接
evicted_keys 淘汰 key
keyspace_hits/misses 缓存命中率
ops_per_sec 每秒操作数

11.4 Prometheus 告警规则示例

yaml 复制代码
groups:
  - name: node-alerts
    rules:
      - alert: HostHighCpuUsage
        expr: 100 - (avg by(instance)(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "主机 CPU 使用率过高"
          description: "{{ $labels.instance }} CPU 使用率超过 80%"

      - alert: HostDiskWillFull
        expr: (node_filesystem_avail_bytes / node_filesystem_size_bytes) * 100 < 15
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "磁盘空间不足"
          description: "{{ $labels.instance }} 磁盘可用空间低于 15%"

12. 日志系统与链路追踪

日志是排障的第一现场。监控告诉你"出问题了",日志告诉你"为什么出问题"。

12.1 日志分类

日志类型 示例
系统日志 syslog、messages、secure、auth.log
Web 日志 Nginx access.log、error.log
应用日志 app.log、error.log
数据库日志 MySQL error log、slow log、binlog
容器日志 Docker json log、K8s pod log
安全日志 登录失败、sudo 操作、异常 IP

12.2 ELK / EFK

组件 作用
Elasticsearch 存储和搜索日志
Logstash 日志清洗和转换
Kibana 日志查询和可视化
Filebeat 轻量级日志采集
Fluent Bit 云原生日志采集

ELK 常见流程:

text 复制代码
应用日志
→ Filebeat / Fluent Bit
→ Logstash / Kafka
→ Elasticsearch
→ Kibana 查询分析

12.3 Loki 日志体系

Loki 是 Grafana 生态常见日志系统,适合和 Prometheus/Grafana 搭配。

常见流程:

text 复制代码
应用日志
→ Promtail / Fluent Bit
→ Loki
→ Grafana 查询

适合场景:

  • 中小规模日志系统
  • K8s 日志采集
  • 希望和 Grafana 统一展示
  • 不需要复杂全文检索

12.4 链路追踪

链路追踪用于排查微服务调用链问题。

常见工具:

工具 说明
Jaeger 开源分布式追踪系统
Zipkin 经典链路追踪工具
SkyWalking 国产常见 APM 工具
OpenTelemetry 统一可观测性标准

链路追踪能解决:

  • 请求经过了哪些服务
  • 哪个服务耗时最高
  • 哪个接口报错
  • 调用链是否断裂
  • 微服务之间依赖关系

13. CI/CD 与发布系统

CI/CD 是 DevOps 的核心能力。

13.1 CI/CD 是什么

名称 含义
CI Continuous Integration,持续集成
CD Continuous Delivery / Deployment,持续交付/持续部署

标准流程:

text 复制代码
提交代码
→ 触发流水线
→ 拉取代码
→ 安装依赖
→ 编译构建
→ 单元测试
→ 构建镜像
→ 推送镜像仓库
→ 部署测试环境
→ 人工审批
→ 部署生产环境
→ 健康检查
→ 失败回滚

13.2 Jenkins

Jenkins 是传统企业常用 CI/CD 工具。

需要掌握:

  • Jenkins 安装
  • 插件管理
  • 凭据管理
  • Pipeline
  • Jenkinsfile
  • 参数化构建
  • Webhook 触发
  • 构建日志查看
  • 权限控制
  • 节点管理

Jenkinsfile 示例:

groovy 复制代码
pipeline {
    agent any

    stages {
        stage('Checkout') {
            steps {
                git 'https://example.com/repo.git'
            }
        }

        stage('Build') {
            steps {
                sh 'mvn clean package -DskipTests'
            }
        }

        stage('Docker Build') {
            steps {
                sh 'docker build -t myapp:${BUILD_NUMBER} .'
            }
        }

        stage('Deploy') {
            steps {
                sh 'docker stop myapp || true'
                sh 'docker rm myapp || true'
                sh 'docker run -d --name myapp -p 8080:8080 myapp:${BUILD_NUMBER}'
            }
        }
    }
}

13.3 GitLab CI

.gitlab-ci.yml 示例:

yaml 复制代码
stages:
  - build
  - docker
  - deploy

build-job:
  stage: build
  script:
    - echo "build app"
    - mvn clean package -DskipTests

docker-job:
  stage: docker
  script:
    - docker build -t registry.example.com/myapp:$CI_COMMIT_SHORT_SHA .
    - docker push registry.example.com/myapp:$CI_COMMIT_SHORT_SHA

deploy-job:
  stage: deploy
  script:
    - kubectl set image deployment/myapp myapp=registry.example.com/myapp:$CI_COMMIT_SHORT_SHA
  only:
    - main

13.4 发布策略

策略 说明 优点 缺点
停机发布 停服务后更新 简单 有停机时间
滚动发布 分批替换实例 平滑 版本并存
蓝绿发布 两套环境切换 回滚快 成本高
灰度发布 小流量验证 风险低 实现复杂
金丝雀发布 少量实例新版本 可控 需要监控支持

14. 自动化运维与 IaC

14.1 Ansible

Ansible 用于批量管理服务器、批量安装软件、批量修改配置、批量部署服务。

核心概念:

概念 说明
Control Node 控制节点
Managed Node 被管理节点
Inventory 主机清单
Module 模块
Playbook 自动化剧本
Role 角色化组织

Inventory 示例:

ini 复制代码
[webservers]
10.0.0.11
10.0.0.12

[dbservers]
10.0.0.21

Playbook 示例:

yaml 复制代码
- hosts: webservers
  become: yes
  tasks:
    - name: Install nginx
      yum:
        name: nginx
        state: present

    - name: Start nginx
      service:
        name: nginx
        state: started
        enabled: yes

14.2 Terraform

Terraform 是基础设施即代码工具,用代码创建和管理云资源。

适合管理:

  • 云服务器
  • VPC
  • 子网
  • 安全组
  • 负载均衡
  • RDS
  • OSS/S3
  • DNS
  • Kubernetes 集群

Terraform 示例:

hcl 复制代码
provider "aws" {
  region = "ap-east-1"
}

resource "aws_instance" "web" {
  ami           = "ami-xxxxxxxx"
  instance_type = "t3.micro"

  tags = {
    Name = "web-server"
  }
}

常用命令:

bash 复制代码
terraform init
terraform plan
terraform apply
terraform destroy

15. 云平台运维

现代运维必须熟悉至少一个云平台。

15.1 云平台核心产品

产品 说明
ECS/CVM 云服务器
VPC 私有网络
Subnet 子网
Security Group 安全组
SLB/CLB 负载均衡
RDS 云数据库
Redis 云版 托管缓存
OSS/COS/S3 对象存储
CDN 内容分发
WAF Web 防火墙
NAT Gateway NAT 网关
Cloud Monitor 云监控
IAM/RAM 权限管理

15.2 云运维必须会的操作

  • 购买云服务器
  • 配置安全组
  • 配置 SSH 登录
  • 挂载数据盘
  • 创建快照
  • 创建负载均衡
  • 绑定域名
  • 配置 HTTPS 证书
  • 使用对象存储
  • 配置 CDN
  • 配置云监控告警
  • 配置 RAM/IAM 子账号权限
  • 做云资源成本分析

15.3 云服务器安全组规则建议

端口 是否开放 说明
22 限制 IP 开放 SSH,不建议 0.0.0.0/0 长期开
80 对公网开放 HTTP
443 对公网开放 HTTPS
3306 不建议公网开放 MySQL
6379 不建议公网开放 Redis
9200 不建议公网开放 Elasticsearch
8080 按需开放 应用服务端口,建议走 Nginx 代理

16. 安全运维

安全是运维必须重视的底线。很多事故不是技术难,而是权限没管好、端口乱开、密码太弱、备份没有加密。

16.1 Linux 安全加固

  • 禁止 root 直接 SSH 登录
  • 修改默认 SSH 端口,或限制来源 IP
  • 使用密钥登录
  • 配置 sudo 最小权限
  • 定期更新系统补丁
  • 关闭不用的服务
  • 配置防火墙
  • 设置密码复杂度
  • 定期审计登录日志
  • 重要目录限制权限

SSH 配置示例:

bash 复制代码
vim /etc/ssh/sshd_config
text 复制代码
PermitRootLogin no
PasswordAuthentication no
Port 2222

重启 SSH:

bash 复制代码
systemctl restart sshd

16.2 防火墙

firewalld:

bash 复制代码
firewall-cmd --state
firewall-cmd --list-all
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload

iptables:

bash 复制代码
iptables -L -n
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

16.3 常见安全风险

风险 说明 解决方式
弱密码 容易被爆破 强密码、密钥登录、MFA
端口暴露 数据库暴露公网 安全组限制、内网访问
权限过大 普通用户拥有 root 权限 最小权限原则
证书过期 HTTPS 访问异常 自动续期监控
依赖漏洞 组件版本过旧 定期升级、漏洞扫描
日志泄露 日志包含密码/token 敏感信息脱敏
备份泄露 备份文件公网可下载 权限控制、加密存储

17. 备份、容灾与高可用

17.1 备份策略

备份不是"复制一份文件"这么简单,需要考虑:

维度 说明
备份对象 数据库、文件、配置、镜像、证书
备份频率 每小时、每天、每周
备份类型 全量、增量、差异
备份位置 本机、异地、对象存储
保留周期 保留 7 天、30 天、180 天
恢复演练 定期测试能否恢复
加密 防止备份泄露

17.2 重要指标:RTO 和 RPO

指标 含义 举例
RTO 恢复时间目标 故障后 30 分钟内恢复
RPO 恢复点目标 最多丢失 5 分钟数据

简单理解:

text 复制代码
RTO:最多能停多久
RPO:最多能丢多少数据

17.3 高可用方案

层级 方案
Web 层 Nginx 多节点 + 负载均衡
应用层 多实例部署、滚动发布
数据库 主从、MGR、PXC、云 RDS 高可用
Redis Sentinel、Cluster
存储 对象存储、多副本
机房 多可用区、多地域容灾

18. SRE 与稳定性工程

SRE 是运维的高阶方向,强调用软件工程方法解决运维稳定性问题。

18.1 SRE 核心概念

概念 说明
SLA 对客户承诺的服务可用性
SLO 内部设定的服务目标
SLI 衡量服务质量的指标
错误预算 允许失败的空间
MTTR 平均恢复时间
MTBF 平均故障间隔时间
Postmortem 故障复盘

18.2 常见 SLI

服务类型 SLI 示例
Web 服务 请求成功率、P95 延迟、5xx 比例
数据库 查询延迟、连接成功率、复制延迟
消息队列 消费延迟、积压量、投递成功率
存储服务 读写成功率、读写延迟

18.3 故障处理流程

text 复制代码
1. 发现告警
2. 确认影响范围
3. 判断故障等级
4. 快速止血
5. 通知相关人员
6. 定位根因
7. 修复问题
8. 验证恢复
9. 补充监控
10. 故障复盘

18.4 故障复盘模板

markdown 复制代码
# 故障复盘报告

## 1. 故障概述
- 故障时间:
- 影响业务:
- 影响用户:
- 故障等级:

## 2. 时间线
- 10:00 监控告警
- 10:03 运维确认
- 10:10 定位到数据库连接数耗尽
- 10:20 临时扩容连接池
- 10:30 服务恢复

## 3. 根因分析

## 4. 处理过程

## 5. 暴露问题

## 6. 改进措施

## 7. 责任人与截止时间

19. 运维学习路线

19.1 第一阶段:Linux 与网络基础,1~2 个月

目标:能独立管理一台 Linux 服务器。

学习内容:

  • Linux 基础命令
  • 文件权限
  • 用户和用户组
  • systemd 服务管理
  • crontab 定时任务
  • SSH
  • 防火墙
  • 磁盘管理
  • 日志查看
  • TCP/IP、HTTP、DNS、HTTPS

实战:

  • 安装 Linux 虚拟机
  • 创建用户并配置 sudo
  • 部署 Nginx 静态网站
  • 配置 SSH 密钥登录
  • 配置防火墙
  • 写磁盘巡检脚本

19.2 第二阶段:服务部署与中间件,2~4 个月

目标:能部署常见 Web 服务、数据库和缓存。

学习内容:

  • Nginx 反向代理
  • HTTPS 配置
  • MySQL 安装、授权、备份恢复
  • Redis 安装和持久化
  • 日志切割
  • supervisor/systemd 管理应用
  • rsync 文件同步

实战:

  • Nginx 反代后端应用
  • MySQL 自动备份脚本
  • Redis 持久化配置
  • 日志自动切割
  • 服务异常自动重启

19.3 第三阶段:Docker 与自动化,4~6 个月

目标:能用容器部署服务,能写自动化脚本。

学习内容:

  • Docker 镜像和容器
  • Dockerfile
  • Docker Compose
  • Harbor 镜像仓库
  • Shell 自动化
  • Python 自动化
  • Ansible 入门

实战:

  • Docker 部署 Nginx/MySQL/Redis
  • 编写 Dockerfile
  • docker-compose 部署多服务
  • Ansible 批量安装 Nginx
  • Python 批量巡检服务器

19.4 第四阶段:监控、日志、CI/CD,6~8 个月

目标:能搭建企业基础运维体系。

学习内容:

  • Prometheus
  • Grafana
  • Alertmanager
  • ELK / Loki
  • Jenkins / GitLab CI
  • 发布回滚
  • 灰度发布
  • 告警通知

实战:

  • Prometheus 监控 Linux
  • Grafana 制作大盘
  • Alertmanager 配置告警
  • ELK 收集 Nginx 日志
  • Jenkins 自动发布应用

19.5 第五阶段:Kubernetes 与云原生,8~12 个月

目标:具备中高级运维/DevOps 能力。

学习内容:

  • Kubernetes 架构
  • Pod、Deployment、Service、Ingress
  • ConfigMap、Secret、PVC
  • Helm
  • HPA
  • K8s 监控和日志
  • Argo CD
  • Terraform
  • 云平台资源管理

实战:

  • 搭建 K8s 测试集群
  • 部署应用到 K8s
  • 配置 Ingress 域名访问
  • Helm 部署 Prometheus
  • Argo CD 实现 GitOps 发布
  • Terraform 创建云服务器

20. 运维实战项目

项目 1:Linux 服务器初始化脚本

目标:一键完成服务器基础配置。

功能:

  • 创建 deploy 用户
  • 配置 SSH 安全
  • 安装常用工具
  • 配置时区
  • 配置防火墙
  • 配置系统参数
  • 创建目录结构

技能点:Linux、Shell、安全加固。


项目 2:Nginx + HTTPS + 负载均衡

目标:搭建可用于生产的 Web 入口。

功能:

  • 多域名配置
  • HTTPS 证书
  • HTTP 强制跳转 HTTPS
  • 反向代理
  • 多后端负载均衡
  • 访问日志
  • 错误日志
  • 限流配置

技能点:Nginx、HTTPS、负载均衡、日志。


项目 3:MySQL 自动备份与恢复

目标:建立数据库备份机制。

功能:

  • 每天凌晨自动备份
  • 备份文件压缩
  • 保留最近 7 天
  • 上传对象存储
  • 恢复演练
  • 备份失败告警

技能点:MySQL、Shell、crontab、对象存储。


项目 4:Docker Compose 部署中间件环境

目标:快速搭建测试环境。

服务:

  • Nginx
  • MySQL
  • Redis
  • RabbitMQ
  • Elasticsearch
  • Kibana

技能点:Docker、Compose、Volume、Network。


项目 5:Prometheus + Grafana 监控系统

目标:搭建基础监控体系。

功能:

  • 监控 Linux 主机
  • 监控 Nginx
  • 监控 MySQL
  • 监控 Redis
  • 配置 Grafana 面板
  • 配置告警规则
  • 告警发送到企业微信/飞书/钉钉

技能点:Prometheus、Grafana、Alertmanager、Exporter。


项目 6:Jenkins 自动化发布系统

目标:实现代码提交后自动构建和部署。

流程:

text 复制代码
Git 提交
→ Webhook 触发 Jenkins
→ 拉取代码
→ 构建应用
→ 构建 Docker 镜像
→ 推送 Harbor
→ 远程部署
→ 健康检查
→ 失败回滚

技能点:Git、Jenkins、Docker、Harbor、Shell。


项目 7:Kubernetes 应用部署平台

目标:掌握云原生部署。

内容:

  • Deployment
  • Service
  • Ingress
  • ConfigMap
  • Secret
  • PVC
  • HPA
  • Helm
  • Prometheus 监控

技能点:Kubernetes、Helm、云原生运维。


项目 8:Ansible 批量运维平台

目标:实现批量配置和批量部署。

内容:

  • 批量安装 Nginx
  • 批量修改配置
  • 批量重启服务
  • 批量创建用户
  • 批量巡检服务器

技能点:Ansible、Inventory、Playbook、Role。


项目 9:Terraform 管理云资源

目标:通过代码管理云服务器和网络。

内容:

  • 创建 VPC
  • 创建子网
  • 创建安全组
  • 创建云服务器
  • 创建负载均衡
  • 输出公网 IP

技能点:Terraform、IaC、云平台。


项目 10:故障演练与复盘体系

目标:提升真实排障能力。

演练场景:

  • CPU 打满
  • 磁盘写满
  • Nginx 配置错误
  • MySQL 连接数耗尽
  • Redis 内存耗尽
  • Docker 容器异常退出
  • K8s Pod CrashLoopBackOff
  • 证书过期
  • DNS 解析错误

技能点:监控、日志、应急响应、复盘。


21. 运维面试题与答案

21.1 Linux 面试题

1. 如何查看服务器 CPU、内存、磁盘?

答:

bash 复制代码
top
free -h
df -h
du -sh /var/log
vmstat 1
iostat -x 1

top 查看 CPU 和进程,free -h 查看内存,df -h 查看磁盘分区,du -sh 查看目录大小。


2. Linux 负载 load average 是什么?

答:

Load average 表示系统运行队列和不可中断状态任务的平均数量。一般可以和 CPU 核心数对比:

  • 4 核机器 load 长期小于 4,通常较正常
  • 4 核机器 load 长期大于 8,可能存在压力
  • 需要结合 CPU、IO、进程状态一起看

3. 如何排查磁盘满?

答:

bash 复制代码
df -h
du -h --max-depth=1 / | sort -h
find / -type f -size +500M 2>/dev/null
lsof | grep deleted

先看哪个分区满,再定位大目录、大文件。如果文件已删除但空间未释放,检查是否被进程占用。


4. chmod 755 是什么意思?

答:

755 表示:

  • 所有者:7 = 读 + 写 + 执行
  • 所属组:5 = 读 + 执行
  • 其他人:5 = 读 + 执行

适合目录和可执行脚本。


5. 软链接和硬链接区别?

答:

类型 说明
软链接 类似快捷方式,指向路径,源文件删除后可能失效
硬链接 指向同一个 inode,源文件删除后数据仍可访问

命令:

bash 复制代码
ln source hard_link
ln -s source soft_link

21.2 网络面试题

1. TCP 三次握手是什么?

答:

text 复制代码
1. 客户端发送 SYN
2. 服务端返回 SYN + ACK
3. 客户端返回 ACK

目的是确认双方收发能力正常,建立可靠连接。


2. HTTP 和 HTTPS 区别?

答:

对比 HTTP HTTPS
默认端口 80 443
加密 不加密 TLS/SSL 加密
安全性 明文传输 防窃听、防篡改
证书 不需要 需要证书

3. 502 和 504 有什么区别?

答:

  • 502:网关从上游服务收到无效响应,常见于后端服务挂了、端口不通、Nginx 代理配置错误。
  • 504:网关等待上游服务超时,常见于后端处理太慢、数据库慢、超时时间过短。

4. 如何判断端口是否通?

答:

bash 复制代码
nc -zv ip 端口
telnet ip 端口
curl -v http://ip:port
ss -tunlp | grep 端口

从客户端测连通性,从服务端看端口是否监听。


21.3 Nginx 面试题

1. Nginx 有哪些作用?

答:

  • 静态 Web 服务
  • 反向代理
  • 负载均衡
  • HTTPS 终止
  • 限流
  • 缓存
  • URL 重写
  • TCP/UDP 代理

2. Nginx 修改配置后怎么检查和重载?

答:

bash 复制代码
nginx -t
systemctl reload nginx

先检查配置语法,确认无误后 reload,避免直接 restart 造成服务中断。


3. Nginx 如何配置上传文件大小?

答:

nginx 复制代码
client_max_body_size 100m;

可以放在 http、server 或 location 中。


21.4 MySQL 面试题

1. MySQL 如何备份和恢复?

答:

bash 复制代码
mysqldump -uroot -p appdb > appdb.sql
mysql -uroot -p appdb < appdb.sql

生产环境还需要考虑锁表、数据量、binlog、备份一致性和恢复演练。


2. 什么是慢查询?

答:

慢查询是执行时间超过阈值的 SQL。通过 slow query log 记录,用于分析 SQL 性能问题。

sql 复制代码
SHOW VARIABLES LIKE 'slow_query_log';
SHOW VARIABLES LIKE 'long_query_time';

21.5 Docker 面试题

1. 镜像和容器区别?

答:

  • 镜像是静态模板
  • 容器是镜像运行后的实例

类似:镜像是"安装包",容器是"运行中的程序"。


2. Docker 数据如何持久化?

答:

使用 volume 或 bind mount。

bash 复制代码
docker run -d -v /data/mysql:/var/lib/mysql mysql:8

3. 容器启动失败怎么排查?

答:

bash 复制代码
docker ps -a
docker logs 容器名
docker inspect 容器名

重点看启动命令、环境变量、端口、挂载目录、应用日志。


21.6 Kubernetes 面试题

1. Pod 是什么?

答:

Pod 是 Kubernetes 中最小调度单元,一个 Pod 可以包含一个或多个容器,共享网络和存储。


2. Deployment 和 StatefulSet 区别?

答:

资源 适用场景
Deployment 无状态应用,如 Web 服务
StatefulSet 有状态应用,如数据库、Zookeeper

StatefulSet 有稳定的网络标识和存储。


3. Pod CrashLoopBackOff 怎么排查?

答:

bash 复制代码
kubectl describe pod pod-name
kubectl logs pod-name
kubectl logs pod-name --previous

常见原因:应用启动报错、配置错误、依赖不可用、健康检查失败、资源不足。


21.7 监控面试题

1. Prometheus 的工作原理是什么?

答:

Prometheus 通过 pull 模式定期从目标服务抓取 metrics,存储为时间序列数据,通过 PromQL 查询,并可结合 Alertmanager 发送告警。


2. 告警太多怎么办?

答:

  • 告警分级
  • 告警收敛
  • 设置合理 for 时间
  • 去掉无意义告警
  • 增加告警抑制
  • 按业务影响设计告警
  • 避免单纯瞬时抖动触发

21.8 DevOps 面试题

1. 什么是 CI/CD?

答:

CI 是持续集成,CD 是持续交付/持续部署。核心是通过自动化流水线完成构建、测试、部署、回滚,提高发布效率和稳定性。


2. 蓝绿发布和灰度发布区别?

答:

发布方式 说明
蓝绿发布 两套完整环境,切换流量
灰度发布 部分用户或少量流量先用新版本

蓝绿回滚快但成本高;灰度风险低但实现复杂。


22. 官方文档与学习资源

22.1 Linux / 系统管理

22.2 网络 / Web 服务

22.3 数据库与中间件

22.4 Docker / Kubernetes

22.5 监控 / 日志 / 可观测性

22.6 CI/CD / DevOps / 自动化

22.7 云平台文档

22.8 安全运维


23. 总结

运维岗位的学习不能只背命令,而要围绕真实工作能力构建:

text 复制代码
Linux 基础
→ 网络排障
→ Web 服务
→ 数据库与中间件
→ Shell/Python 自动化
→ Docker 容器
→ 监控告警
→ 日志系统
→ CI/CD
→ Ansible/Terraform
→ Kubernetes
→ 云平台
→ 安全运维
→ SRE 稳定性工程

入门阶段重点不要贪多,建议优先学:

  1. Linux 命令和系统管理
  2. 网络基础和 HTTP/HTTPS
  3. Nginx
  4. MySQL / Redis 基础
  5. Shell 脚本
  6. Docker
  7. Prometheus + Grafana
  8. Jenkins / GitLab CI
  9. Ansible
  10. Kubernetes

最终目标不是"会用工具",而是:

出问题能发现,发现后能定位,定位后能恢复,恢复后能复盘,复盘后能自动化防止再次发生。

这才是真正企业需要的运维能力。 🚀

相关推荐
龙泉寺天下行走1 小时前
bash (())奇怪的返回码
linux·运维·服务器
Fcy6481 小时前
Linux下 进程间通信详解(二)System V IPC
linux·运维·消息队列·共享内存·信号量·system v
vortex51 小时前
SSH “administratively prohibited” 报错解决
运维·ssh
皆圥忈2 小时前
Linux文件系统与缓冲区深度解析
linux
Dream_ksw2 小时前
借助AI再次理解三次握手和四次挥手
服务器·网络·tcp/ip
Jun6262 小时前
QT(14)-UBUNTU下QT使用串口
开发语言·qt·ubuntu
壹号用户2 小时前
初识linux
linux·运维·服务器
衫水2 小时前
Windows Server Nginx 代理企业内网 API 偶发超时处理与保活 SOP(20260608))
运维·windows·nginx
Java 码思客2 小时前
【Redis分布式缓存实战】第20章 Redis监控运维与自动化体系
运维·redis·缓存