运维工程师面试题去重整理(详细版)

本文档基于4份运维/云计算面试题资料去重整理,按板块分类,补充详细答案,适合面试背诵。

资料来源:《174道运维工程师面试题》《面试题简答》《云计算笔试面试题库》《运维工程师面试题库—综合》


一、综合与运维理念

1. 什么是运维?游戏运维、开发运维、应用运维、系统运维的分工?

运维是指对互联网产品的服务器、应用、数据库、网络等进行规划、部署、监控、维护、优化和故障处理,保障业务7×24小时稳定运行。

分工:

  • 系统运维:负责操作系统层面的维护,包括服务器装机、系统优化、网络配置、安全加固、硬件故障处理等
  • 应用运维:负责业务应用的部署、发布、监控、故障排查,与开发对接密切
  • 开发运维(DevOps):负责CI/CD流水线建设、自动化工具开发、容器化部署、基础设施即代码等
  • 游戏运维:除常规运维外,还需关注游戏服务器的特殊需求,如玩家数据安全、版本更新不中断、防外挂攻击、合服迁服等

2. 运营人员的工作内容

  • 日常监控:服务器资源监控、应用状态监控、业务指标监控
  • 故障处理:及时响应告警,定位并解决故障
  • 发布部署:配合开发完成代码上线、版本发布
  • 性能优化:系统优化、应用优化、数据库优化
  • 安全加固:漏洞修复、权限管理、攻击防护
  • 文档编写:运维文档、故障报告、操作手册
  • 自动化建设:脚本开发、工具建设、流程优化

3. 300台服务器如何管理?

  • 跳板机/堡垒机:统一登录入口,权限控制,操作审计
  • 配置管理工具:SaltStack、Ansible、Puppet、Chef,批量配置管理
  • CMDB资产管理系统:记录服务器信息、配置、归属、状态
  • 监控系统:Zabbix/Prometheus,统一监控告警
  • 自动化部署:Jenkins+GitLab CI/CD,一键发布
  • 标准化:系统镜像标准化、配置标准化、命名规范
  • 批量操作工具:pssh、pdsh、ansible ad-hoc

4. 常用中间件有哪些?

  • Web服务器:Nginx、Apache、Tomcat
  • 负载均衡:LVS、HAProxy、Nginx、SLB
  • 缓存:Redis、Memcached、Varnish、Squid
  • 消息队列:RabbitMQ、Kafka
  • 数据库:MySQL、MongoDB、Redis、Elasticsearch
  • 协调服务:Zookeeper、etcd
  • 日志:ELK(Elasticsearch+Logstash+Kibana)
  • 监控:Zabbix、Prometheus、Grafana

5. 自动化工具有哪些?

  • 配置管理:Ansible、SaltStack、Puppet、Chef
  • 持续集成:Jenkins、GitLab CI、Travis CI
  • 容器编排:Kubernetes、Docker Swarm
  • 基础设施即代码:Terraform
  • 批量执行:pssh、pdsh、fabric

6. 你对运维工程师的理解和工作认识?

运维工程师在公司中责任重大,需要保证时刻为公司及客户提供最高、最快、最稳定、最安全的服务。运维工程师的一个小小的失误,很可能会对公司及客户造成重大损失,因此运维工程师的工作需要严谨及富有创新精神。

核心能力:

  • 扎实的Linux系统和网络基础
  • 故障排查和应急响应能力
  • 自动化和脚本开发能力
  • 安全意识和风险把控能力
  • 沟通协作能力

二、Linux系统基础

1. 常见Linux发行版有哪些?

  • RedHat系列:RHEL、CentOS、Fedora、Rocky Linux、AlmaLinux
  • Debian系列:Debian、Ubuntu、Linux Mint
  • SUSE系列:openSUSE、SUSE Linux Enterprise
  • 其他:Arch Linux、Gentoo、Alpine(容器常用)

Unix系统:Solaris(Sun)、HP-UX(惠普)、AIX(IBM)、FreeBSD

2. Linux系统开机启动流程

CentOS 6(SysVinit):

  1. POST加电自检(BIOS)
  2. 读取MBR(主引导记录)
  3. Boot Loader(GRUB)引导
  4. 读取grub.conf,加载内核Kernel
  5. 加载initramfs(虚拟文件系统)
  6. 启动init进程(PID=1)
  7. 读取/etc/inittab确定运行级别
  8. 执行/etc/rc.d/rc.sysinit初始化系统
  9. 启动对应运行级别的服务(/etc/rc.d/rcN.d/)
  10. 执行/etc/rc.d/rc.local
  11. 执行/bin/login,进入登录界面

CentOS 7(Systemd):

  1. UEFI/BIOS初始化,POST自检
  2. 加载MBR,GRUB2引导
  3. 加载内核Kernel和initramfs
  4. 内核初始化,启动systemd进程(PID=1)
  5. systemd执行multi-user.target
  6. 启动getty.target及登录服务
  7. 启动graphical.target需要的服务(图形模式)

运行级别:

级别说明
0关机
1单用户模式(救援模式)
2多用户模式,无NFS
3完全多用户模式(命令行,生产常用)
4保留
5图形桌面模式
6重启

3. CentOS 6和CentOS 7的区别

对比项CentOS 6CentOS 7
桌面环境GNOME 2.xGNOME 3.x
默认文件系统ext4xfs
内核版本2.6.x3.10.x
启动加载器GRUB LegacyGRUB2
防火墙iptablesfirewalld
默认数据库MySQLMariaDB
文件结构/bin、/sbin、/lib在根下移到/usr下
主机名配置/etc/sysconfig/network/etc/hostname
时间同步ntp / ntpq -pchrony / chronyc sources
修改时区vim /etc/sysconfig/clock + ln -stimedatectl set-timezone
修改语言vim /etc/sysconfig/i18nlocalectl set-locale
服务管理service/chkconfigsystemctl
网络命令netstat/ifconfig/routeip/ss
重启关机shutdown/rebootpoweroff/systemctl
单用户模式init Ssystemctl rescue
启动模式vim /etc/inittab id:3:initdefaultsystemctl set-default multi-user.target

4. Linux文件系统类型

  • ext4:第四代扩展文件系统,CentOS 6默认,支持最大1EB分区,最大16TB文件
  • xfs:高性能日志文件系统,CentOS 7默认,支持最大8EB分区,适合大文件和高并发
  • btrfs:B-Tree文件系统,支持快照、子卷、数据校验
  • swap:交换分区,虚拟内存
  • tmpfs:内存文件系统,/dev/shm默认使用

5. 符号链接与硬链接的区别

对比项硬链接软链接(符号链接)
本质同一个文件的多个入口快捷方式,指向原文件
inode相同inode号不同inode号
跨分区不可以可以
对目录不可以(除root特殊)可以
删除源文件仍可访问链接失效(变红)
文件大小与原文件相同仅保存路径字符串
命令ln 源文件 链接名ln -s 源文件 链接名

6. Linux权限说明

  • 基本权限:r(读,4)、w(写,2)、x(执行,1)
  • 三组权限:所有者(u)、所属组(g)、其他(o)
  • 特殊权限
    • SUID(4):文件执行时以所有者身份运行,如/usr/bin/passwd
    • SGID(2):目录下新建文件继承目录属组
    • Sticky(1):只有文件所有者和root可删除,如/tmp

7. 用户管理命令

useradd username          # 创建用户
useradd -s /sbin/nologin username  # 创建禁止登录的用户
userdel -r username       # 删除用户及家目录
passwd username           # 设置密码
usermod -aG group username  # 将用户加入组
groupadd groupname        # 创建组
id username               # 查看用户信息

8. 进程管理

ps aux各字段含义:

字段说明
USER进程所有者
PID进程ID
%CPUCPU占用率
%MEM内存占用率
VSZ虚拟内存集(进程占用的虚拟内存空间,KB)
RSS物理内存集(进程实际占用的物理内存,KB)
TTY终端
STAT进程状态(R运行/S睡眠/D不可中断睡眠/Z僵尸/T停止)
START启动时间
TIME累计CPU时间
COMMAND命令

常用命令:

top                    # 实时进程监控
htop                   # 增强版top
kill -9 PID            # 强制杀死进程
killall processname    # 按名称杀进程
pstree -p              # 进程树

僵尸进程: 子进程已结束但父进程未调用wait()回收,状态为Z。解决:杀死父进程或重启服务。

9. 系统资源查看

free -h                # 内存使用
df -h                  # 磁盘使用
df -i                  # inode使用
du -sh /path           # 目录大小
uptime                 # 负载和运行时间
top / htop             # CPU和进程
vmstat 1 5             # 系统整体状态
iostat -xk 1 5         # IO状态
mpstat 1 5             # CPU多核状态
sar -n DEV 1 5         # 网络流量

10. CPU利用率和CPU负载的区别

  • CPU利用率:程序运行期间实时占用CPU的百分比
  • CPU负载:一段时间内正在使用和等待使用CPU的平均任务数
  • 利用率高不一定负载大:一个程序100%利用率,负载=1;两个程序各100%利用率,负载=2
  • 电话亭比喻:电话=CPU,正在打电话和排队等待的人=任务数

11. Linux系统优化(安全加固)

  1. 不用root,添加普通用户,通过sudo授权管理
  2. 更改默认SSH端口,禁止root远程连接
  3. 定时自动更新服务器时间(ntp/chrony)
  4. 配置国内yum源
  5. 关闭selinux及iptables(高并发或有外网IP需打开)
  6. 调整文件描述符数量(/etc/security/limits.conf)
  7. 精简开机启动服务(crond、rsyslog、network、sshd)
  8. 内核参数优化(/etc/sysctl.conf)
  9. 更改字符集支持中文
  10. 锁定关键系统文件(chattr +i /etc/passwd)
  11. 清空/etc/issue,去除系统版本显示

文件描述符优化:

# /etc/security/limits.conf
*      soft nofile    65535
*      hard nofile    65535
*      soft noproc    65535
*      hard noproc    65535

12. 内核参数优化

# /etc/sysctl.conf
fs.file-max = 999999                          # 最大句柄数
net.ipv4.tcp_max_tw_buckets = 6000            # TIME_WAIT最大数量
net.ipv4.ip_local_port_range = 1024 65000     # 端口范围
net.ipv4.tcp_tw_recycle = 1                   # TIME_WAIT快速回收
net.ipv4.tcp_tw_reuse = 1                     # TIME_WAIT重用
net.ipv4.tcp_keepalive_time = 30              # keepalive间隔
net.ipv4.tcp_syncookies = 1                   # 防SYN攻击
net.core.somaxconn = 40960                    # 监听队列长度
net.core.netdev_max_backlog = 262144          # 网络设备队列
net.ipv4.tcp_max_syn_backlog = 262144         # SYN队列长度
net.ipv4.tcp_rmem = 10240 87380 12582912      # TCP接收缓存
net.ipv4.tcp_wmem = 10240 87380 12582912      # TCP发送缓存

执行 sysctl -p 使配置生效。

13. Linux系统中病毒怎么解决?

  1. 最简单有效:备份数据后重装系统
  2. 排查方法
    • top 找到CPU使用率最高的进程
    • ps aux 找到病毒文件位置(病毒文件命名通常较乱)
    • rm -f 删除病毒文件
    • 检查计划任务、开机启动项、病毒文件目录
  3. 删了又自动创建
    • 先断外网(病毒失去外联能力)
    • iftop 查看连接外网情况
    • netstat 查看外网IP和端口
    • lsof -p pid 查看进程打开的文件
    • ps axu 逐个排查冒牌货进程(如/usr/bin/.sshd)
    • 杀掉母进程,删除可执行文件
    • chattr +i 锁定关键文件防止篡改

14. 服务器开不了机排查步骤

  1. 硬件层面:检查电源、电源线、电源指示灯、风扇是否转动
  2. BIOS/UEFI:能否进入BIOS,检查硬件识别情况
  3. 引导阶段
    • 检查硬盘是否被识别
    • 检查引导顺序
    • MBR/GRUB是否损坏
  4. 系统启动阶段
    • 单用户模式启动查看报错
    • 救援模式(Rescue Mode)修复
    • 检查/etc/fstab挂载是否正确
    • 检查根分区是否满
    • 检查文件系统损坏(fsck)
  5. 日志排查:查看/var/log/messages、/var/log/boot.log

15. 释放缓存

sync                           # 先同步数据到磁盘
echo 1 > /proc/sys/vm/drop_caches  # 释放页缓存
echo 2 > /proc/sys/vm/drop_caches  # 释放dentries和inodes
echo 3 > /proc/sys/vm/drop_caches  # 释放所有缓存

16. MBR是什么?作用?

MBR(Master Boot Record,主引导记录)位于硬盘0柱面0磁头1扇区,共512字节:

  • 446字节:主引导程序(boot loader)
  • 64字节:分区表(DPT),每个分区表项16字节,最多4个主分区
  • 2字节:magic number(55AA),标记MBR有效性

备份MBR:

dd if=/dev/sda of=/root/mbr bs=512 count=1

恢复MBR:

dd if=/root/mbr of=/dev/sda bs=512 count=1

仅恢复分区表:

dd if=/root/mbr of=/dev/sda bs=512 skip=446 count=66

17. Linux分区方案

网站集群节点(300G硬盘,16G内存):

  • /boot:200M
  • swap:8-16G(内存>=8G时)
  • /:剩余全部

数据库存储节点:

  • /boot:200M
  • /:50-200G
  • swap:8-16G
  • /data:剩余全部

大企业通用方案:

  • /boot:200M
  • /:50-200G
  • swap:8-16G
  • 剩余保留不分区,按需分配

2T硬盘32G内存:

  • /boot:200M
  • swap:64G
  • /:约1984G

6T硬盘128G内存:

  • /boot:200M
  • swap:256G
  • /:约5888G

18. 磁盘空间满但df显示60%的原因

  1. inode耗尽:文件数量太多(大量小文件),inode用完了但block还有剩余
    • 检查:df -i
    • 解决:删除小文件或重新分区增大inode比例
  2. 磁盘配额:用户或组达到配额限制
    • 检查:quota -uv username
  3. 文件被删除但进程仍在使用:rm只是解除链接,进程仍占用空间
    • 检查:lsof | grep deleted
    • 解决:重启相关进程或用>清空文件

19. 删除nginx日志后空间还是满的原因

原因:文件被进程打开使用,rm只是删除目录项(unlink),进程仍在读取写入,空间不会释放。

解决方法:

  1. 重启nginx服务:systemctl restart nginx
  2. 用清空方式而非删除:> /var/log/nginx/access.log
  3. 配置logrotate自动切割日志

20. 常用命令速查

取IP地址:

# 方法1:cut
ifconfig eth0 | sed -n '2p' | cut -d ":" -f2 | cut -d " " -f1
# 方法2:awk
ifconfig eth0 | awk 'NR==2' | awk -F "[: ]+" '{print $4}'
# 方法3:sed
ifconfig eth0 | sed -n '/inet addr/p' | sed -r 's#^.*ddr:(.*)Bc.*$#\1#g'
# CentOS7
ip addr show eth0 | grep inet | awk '{print $2}' | cut -d/ -f1

TCP连接状态统计:

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

访问量TOP IP:

cat access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -10

每个IP连接数:

netstat -n | awk '/^tcp/ {print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -rn

tcpdump嗅探80端口:

tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr | head -20

随机密码生成:

cat /dev/urandom | head -1 | md5sum | head -c 32

查看二进制文件:

hexdump -C filename

取文件第4-7行:

sed -n '4,7p' aaa.txt

查找大文件:

find /usr -type f -size +10240k

删除7天前日志:

find /app/logs -type f -mtime +7 -name "*.log" -exec rm -f {} \;
# 或
find /app/logs -type f -mtime +7 -name "*.log" | xargs rm -f

内存使用率:

free -m | awk '/Mem/{print $3/$2*100"%"}'

查看/var/log文件数:

ls -lR /var/log | grep "^-" | wc -l

查看当前登录用户:

w
who

21. vi/vim操作

三种模式: 默认模式、编辑模式、命令模式

一般模式:

命令功能
yy复制当前行
nyy复制n行
p粘贴
dd删除当前行
ndd删除n行
dG删除全部(从当前行到末尾)
x删除字符
u撤销
.重复上一次操作
G跳到末行
gg跳到首行
0跳到行首
$跳到行尾

编辑模式:

命令功能
i当前位置插入
I行首插入
a下一字符插入
A行尾插入
o下行新开一行
O上行新开一行
r替换一次
R一直替换

命令模式:

命令功能
/word向下查找
?word向上查找
n重复查找
N反向查找
:%s/old/new/g全文替换
:n1,n2 s/old/new/g区间替换
:set nu显示行号
:wq保存退出
:q!不保存退出
:90跳到第90行

22. SecureCRT快捷键

快捷键功能
Ctrl+a光标移动到行首
Ctrl+c终止当前程序
Ctrl+d删除光标前字符或退出
Ctrl+e光标移动到行尾
Ctrl+l清屏
Ctrl+u剪切光标以前的字符
Ctrl+k剪切光标以后的字符
Ctrl+y粘贴u/k的内容
Ctrl+r查找最近用过的命令
Tab命令或路径补全
Ctrl+Shift+c复制
Ctrl+Shift+v粘贴

23. rpm和yum的区别

  • rpm:RedHat Package Manager,本地包管理工具,需要手动解决依赖
    • 安装:rpm -ivh package.rpm
    • 卸载:rpm -e package
    • 查询:rpm -qa | grep package
  • yum:Yellowdog Updater Modified,基于rpm的前端包管理工具,自动解决依赖
    • 安装:yum install -y package
    • 卸载:yum remove -y package
    • 更新:yum update -y package
    • 搜索:yum search keyword

rpm安装有依赖的包:

# 方法1:先安装依赖包
rpm -ivh libaio.rpm && rpm -ivh mysql.rpm
# 方法2:使用yum本地安装
yum localinstall -y package.rpm
# 方法3:--nodeps强制安装(不推荐)
rpm -ivh --nodeps package.rpm

24. Linux系统文件只读怎么办?

  1. 检查是否挂载为只读:mount | grep /
  2. 重新挂载为读写:mount -o remount,rw /
  3. 如果无法remount,进入救援模式执行fsck修复文件系统
  4. 检查磁盘是否有坏道:badblocks /dev/sda
  5. 检查是否被chattr锁定:lsattr /etc/passwd

25. 误操作rm -rf *的后果

  • 如果在/目录执行:系统基本瘫痪,需要重装
  • 如果在数据目录执行:数据丢失,需从备份恢复
  • 预防措施:
    • 重要数据定期备份
    • 使用rm时先ls确认
    • 设置rm别名(危险操作确认)
    • 使用trash-cli替代rm
    • 关键文件加chattr +i保护

三、Shell脚本与正则

1. Shell预定义变量

变量含义
$0脚本名称
$1-$n位置参数(第1到第n个参数)
$#参数个数
$?上一个命令的返回值(0成功,非0失败)
$*所有参数作为一个整体
$@所有参数,每个独立
$$当前进程PID
$!上一个后台进程PID

2. 正则表达式

基础正则(BRE):

符号含义
^行首
$行尾
.任意单个字符
*前一个字符出现0次或多次
[]字符集,匹配其中任意一个
[^]排除字符集
\转义字符

扩展正则(ERE):

符号含义
+前一个字符出现1次或多次
?前一个字符出现0次或1次
|
()分组
{n}前一个字符出现n次
{n,}至少n次
{n,m}n到m次

3. 常用脚本示例

IP存活检测脚本:

#!/bin/bash
for ip in $(seq 1 255)
do
{
    ping -c 1 192.168.1.$ip > /dev/null 2>&1
    if [ $? -eq 0 ]; then
        echo "192.168.1.$ip UP"
    else
        echo "192.168.1.$ip DOWN"
    fi
}&
done
wait

日志切割脚本:

#!/bin/bash
LOG_PATH="/opt/logs/access.log"
BACKUP_PATH="/tmp/$(date +%Y%m%d).access.log"
cp $LOG_PATH $BACKUP_PATH
echo > $LOG_PATH

MySQL备份脚本:

#!/bin/bash
BACKUP_DIR="/data/backup"
DATE=$(date +%Y%m%d)
mysqldump -uroot -p123456 --all-databases --single-transaction > $BACKUP_DIR/all_$DATE.sql
gzip $BACKUP_DIR/all_$DATE.sql
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete

批量添加用户脚本:

#!/bin/bash
for user in user1 user2 user3
do
    useradd $user
    echo "123456" | passwd --stdin $user
done

MySQL主从监控脚本:

#!/bin/bash
IO_STATUS=$(mysql -uroot -p123456 -e "show slave status\G" | grep "Slave_IO_Running" | awk '{print $2}')
SQL_STATUS=$(mysql -uroot -p123456 -e "show slave status\G" | grep "Slave_SQL_Running" | awk '{print $2}')
if [ "$IO_STATUS" != "Yes" ] || [ "$SQL_STATUS" != "Yes" ]; then
    echo "MySQL主从同步异常!" | mail -s "MySQL告警" admin@example.com
fi

网站访问监控脚本:

#!/bin/bash
URL="http://www.example.com"
STATUS=$(curl -o /dev/null -s -w "%{http_code}" $URL)
if [ $STATUS -ne 200 ]; then
    echo "网站异常,状态码:$STATUS" | mail -s "网站告警" admin@example.com
fi

nginx日志按时间段统计IP:

# 统计10点到12点之间访问IP排名
awk '$4 >= "[10/Aug/2024:10:00:00" && $4 <= "[10/Aug/2024:12:00:00"' access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -10

rsync启动脚本:

#!/bin/bash
# chkconfig: 2345 80 20
case "$1" in
start)
    rsync --daemon
    echo "rsync started"
    ;;
stop)
    pkill rsync
    echo "rsync stopped"
    ;;
restart)
    pkill rsync
    sleep 1
    rsync --daemon
    echo "rsync restarted"
    ;;
*)
    echo "Usage: $0 {start|stop|restart}"
    ;;
esac

4. 冒泡排序

#!/bin/bash
arr=(5 3 8 1 9 2)
len=${#arr[@]}
for ((i=0; i<len-1; i++))
do
    for ((j=0; j<len-i-1; j++))
    do
        if [ ${arr[j]} -gt ${arr[j+1]} ]; then
            temp=${arr[j]}
            arr[j]=${arr[j+1]}
            arr[j+1]=$temp
        fi
    done
done
echo ${arr[@]}

5. 1加到100

# 方法1:for循环
sum=0
for i in $(seq 1 100)
do
    sum=$((sum+i))
done
echo $sum

# 方法2:公式
echo $((100*101/2))

# 方法3:awk
seq 100 | awk '{sum+=$1} END{print sum}'

6. crontab定时任务

# 格式:分 时 日 月 周 命令
00 00 * * * /bin/sh /root/backup.sh    # 每天凌晨0点
*/5 * * * * /bin/sh /root/check.sh     # 每5分钟
00 02 * * 0 /bin/sh /root/week.sh      # 每周日凌晨2点
00 00 1 * * /bin/sh /root/month.sh     # 每月1号凌晨
# 11月份内,每天早上6点到12点,每隔2小时执行
0 6-12/2 * 11 * /usr/bin/httpd.sh

7. find命令高级用法

# 查找大于100K的文件移动到/tmp
find /data -type f -size +100k -exec mv {} /tmp/ \;

# 查找最后创建时间3天前的*.log文件并删除
find /data -type f -name "*.log" -ctime +3 -delete

# 查找当前目录创建时间超过7天的文件压缩
find ./ -type f -mtime +7 -exec gzip {} \;

# 查找/usr目录下超过1M的文件
find /usr -type f -size +10240k

# 查找子目录文件数量
find /path -type f | wc -l

8. awk/sed/grep常用操作

# grep:过滤包含error的行
grep "error" /var/log/messages
grep -v "error" file        # 反向匹配
grep -i "error" file        # 忽略大小写
grep -E "error|warning" file # 扩展正则

# sed:替换
sed 's/old/new/g' file      # 全局替换
sed -i 's/old/new/g' file   # 直接修改文件
sed -n '4,7p' file          # 打印4-7行
sed '/^$/d' file            # 删除空行

# awk:列处理
awk '{print $1,$3}' file    # 打印第1和第3列
awk -F: '{print $1}' /etc/passwd  # 指定分隔符
awk '{sum+=$1} END{print sum}' file  # 求和

四、计算机网络

1. OSI七层模型

层级名称功能协议数据单位
7应用层网络服务与用户接口HTTP、FTP、SMTP、DNS、Telnet、HTTPS、POP3、DHCP数据
6表示层数据表示、安全、压缩JPEG、ASCII、加密、压缩数据
5会话层建立、管理、终止会话会话协议数据
4传输层端口号、流控、差错校验TCP、UDP段(Segment)
3网络层逻辑地址、路由选择IP、ICMP、IGMP、ARP、RARP包(Packet)
2数据链路层MAC地址、帧、差错校验Ethernet、PPP帧(Frame)
1物理层比特流、传输介质电气特性比特(Bit)

五层模型将表示层和会话层合并到应用层。

2. TCP三次握手

  1. 第一次握手:客户端发送SYN包(syn=j),进入SYN_SEND状态
  2. 第二次握手:服务器收到SYN,回复SYN+ACK包(syn=k, ack=j+1),进入SYN_RECV状态
  3. 第三次握手:客户端收到SYN+ACK,发送ACK包(ack=k+1),双方进入ESTABLISHED状态

为什么需要三次握手? 防止已失效的连接请求报文段突然又传送到服务器,导致服务器错误地建立连接,浪费资源。

3. TCP四次挥手

  1. 客户端发送FIN,进入FIN_WAIT_1
  2. 服务器回复ACK,进入CLOSE_WAIT;客户端收到后进入FIN_WAIT_2
  3. 服务器发送FIN,进入LAST_ACK
  4. 客户端回复ACK,进入TIME_WAIT(等待2MSL);服务器收到后关闭

为什么需要四次挥手? TCP是全双工通信,双方都需要独立关闭连接。客户端发FIN表示不再发送数据,但还可以接收数据;服务器需要确认收到后,再发送自己的FIN。

4. TCP和UDP的区别

对比项TCPUDP
连接性面向连接(三次握手)无连接
可靠性可靠,有确认重传不可靠
传输效率较低较高
资源占用较高较低
应用场景HTTP、FTP、SSH、邮件DNS、视频直播、游戏、语音

5. HTTP状态码

状态码含义
2xx 成功
200OK,请求成功
201Created,资源创建成功
204No Content,无内容
3xx 重定向
301Moved Permanently,永久重定向
302Found,临时重定向
304Not Modified,未修改(缓存)
4xx 客户端错误
400Bad Request,请求错误
401Unauthorized,未授权
403Forbidden,禁止访问
404Not Found,资源不存在
410Gone,资源已永久删除
413Request Entity Too Large,请求体过大
499客户端主动关闭连接(Nginx特有)
5xx 服务端错误
500Internal Server Error,服务器内部错误
502Bad Gateway,网关错误(后端异常)
503Service Unavailable,服务不可用
504Gateway Timeout,网关超时

6. HTTP版本区别

  • HTTP/1.0:短连接,每次请求都建立新TCP连接
  • HTTP/1.1:长连接(keep-alive),管道化,请求排队
  • HTTP/2.0:多路复用,头部压缩,服务器推送,二进制分帧
  • HTTP/3.0:基于QUIC(UDP),0-RTT握手,无队头阻塞

7. IP地址分类

类别范围默认掩码用途
A1.0.0.0 – 126.255.255.255255.0.0.0 (/8)大型网络
B128.0.0.0 – 191.255.255.255255.255.0.0 (/16)中型网络
C192.0.0.0 – 223.255.255.255255.255.255.0 (/24)小型网络
D224.0.0.0 – 239.255.255.255组播
E240.0.0.0 – 255.255.255.255保留

私有IP:

  • A类:10.0.0.0/8
  • B类:172.16.0.0/12
  • C类:192.168.0.0/16

8. 子网计算

/27掩码(255.255.255.224):

  • 主机位:5位
  • 总地址数:2^5 = 32
  • 可用主机数:32 – 2 = 30(减网络地址和广播地址)

/26掩码(255.255.255.192):

  • 主机位:6位
  • 总地址数:2^6 = 64
  • 可用主机数:62

示例:10.0.14.70/26

  • 网络地址:10.0.14.64
  • 广播地址:10.0.14.127
  • 可用范围:10.0.14.65 – 10.0.14.126

9. DNS域名解析过程

  1. 客户端查询本地DNS缓存(浏览器缓存→系统缓存→hosts文件)
  2. 向本地DNS服务器(LDNS)发起查询
  3. LDNS查询自己的缓存,有则返回
  4. 无缓存则LDNS向根域名服务器(.)发起迭代查询
  5. 根服务器返回顶级域(.com)服务器地址
  6. LDNS向顶级域服务器查询,返回权威域名服务器地址
  7. LDNS向权威服务器查询,返回域名对应的IP
  8. LDNS将结果返回客户端并缓存

递归查询:客户端→LDNS,LDNS必须返回最终结果
迭代查询:LDNS→根→顶级域→权威域,每次返回下一级地址

常见记录类型:

  • A:域名→IPv4
  • AAAA:域名→IPv6
  • CNAME:域名→域名(别名)
  • MX:邮件交换记录
  • TXT:文本记录(SPF、DKIM)
  • NS:域名服务器记录
  • PTR:反向解析(IP→域名)

10. DHCP工作流程(四步)

  1. DHCP Discover:客户端广播发送,寻找DHCP服务器
  2. DHCP Offer:服务器回复,提供IP地址等信息
  3. DHCP Request:客户端广播,请求使用该IP
  4. DHCP ACK:服务器确认,分配IP

11. NAT和PAT

  • NAT(Network Address Translation):网络地址转换,将私有IP转换为公网IP
    • 静态NAT:一对一
    • 动态NAT:地址池
  • PAT(Port Address Translation):端口地址转换,多对一,通过端口号区分不同连接,也叫NAPT

12. 静态路由和动态路由

  • 静态路由:手动配置,适合小型网络,稳定但不灵活
  • 动态路由:通过路由协议自动学习,适合大型网络
    • RIP:距离矢量协议,最大跳数15
    • OSPF:链路状态协议,SPF算法
    • BGP:边界网关协议,自治系统间路由

13. 二层交换机和三层交换机区别

对比项二层交换机三层交换机
工作层级数据链路层网络层
工作原理基于MAC地址端口转发一次路由,多次交换
功能不能配IP,VLAN间需三层设备有路由功能,可配VLAN IP,VLAN间直接通信
应用接入层、汇聚层、小型局域网核心层、大型局域网
支持协议物理层、数据链路层+网络层协议

14. VLAN和VXLAN

  • VLAN(Virtual LAN):虚拟局域网,二层隔离,最多4096个
  • VXLAN(Virtual Extensible LAN):虚拟扩展局域网,用MAC-in-UDP封装,支持1600万个,适用于云计算大二层网络

15. 防火墙区别

  • 硬件防火墙:性能高,专业,成本高
  • 软件防火墙:iptables/firewalld,灵活,成本低
  • 云防火墙:云上安全组,弹性伸缩

iptables四表五链:

  • 四表:raw、mangle、nat、filter
  • 五链:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING

16. 常见协议端口

协议端口
FTP21(控制)、20(数据)
SSH22
Telnet23
SMTP25
DNS53
DHCP67(服务器)、68(客户端)
HTTP80
POP3110
NTP123
HTTPS443
rsync873
MySQL3306
Redis6379
Tomcat8080
Zabbix10050(Agent)、10051(Server)
Kafka9092
Elasticsearch9200
RabbitMQ5672、15672(Web)

17. 网络排错

网站无法访问排查:

  1. 先切换服务保障正常
  2. ping检测连通性
  3. dig/nslookup查DNS解析
  4. traceroute查路由路径
  5. 检查服务器本身(服务状态、端口、防火墙)
  6. 协调开发查程序日志

访问慢排查:

  1. 本地网络测试
  2. 网站响应时间(F12开发者工具看各阶段耗时)
  3. 故障诊断命令(ping、traceroute、mtr)
  4. 图片/JS/CSS压缩优化
  5. 数据库/服务器资源
  6. 网站程序设计

上不了网:

  1. ping网关和其他机器
  2. 检查网卡禁用/IP/DNS/网关
  3. 网卡驱动
  4. 网线/网卡灯

18. 568A和568B线序

  • 568A:绿白、绿、橙白、蓝、蓝白、橙、棕白、棕
  • 568B:橙白、橙、绿白、蓝、蓝白、绿、棕白、棕
  • 直通线:两端都是568B(不同设备连接)
  • 交叉线:一端568A一端568B(相同设备连接)

19. tcpdump常用命令

# 监听指定主机和端口
tcpdump 'host 192.168.1.1 and port 80' -w tcpdump.log

# 实时抓取80端口
tcpdump -nn tcp port 80

# 监听来自指定IP的80端口流量
tcpdump -i eth0 src host 192.168.0.1 and tcp port 80

# 查看ping包
tcpdump -i eth0 icmp

# 嗅探80端口访问TOP IP
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr | head -20

20. iptables端口转发

# 将本地80端口转发到8080
iptables -t nat -A PREROUTING -d 192.168.2.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.2.1:8080

# 只允许远程主机访问80端口
iptables -A INPUT -p tcp --dport 80 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j DROP

# 限制每秒新建连接数
iptables -A INPUT -p tcp --dport 80 -m limit --limit 1/second --limit-burst 3 -j ACCEPT

五、基础服务

1. FTP主动模式和被动模式

主动模式(PORT):

  • 客户端连接服务器21端口建立命令链路
  • 客户端开放一个大于1024的端口,告诉服务器来连接
  • 服务器从20端口主动连接客户端的大端口,建立数据链路

被动模式(PASV):

  • 客户端连接服务器21端口建立命令链路
  • 服务器开放一个大于1024的端口,告诉客户端来连接
  • 客户端从大于1024的端口连接服务器的大端口,建立数据链路

区别: 主动模式是服务器主动连客户端,被动模式是客户端主动连服务器。被动模式更适合客户端在防火墙后的场景。

2. NFS

NFS(Network File System)网络文件系统,允许不同主机通过网络共享文件。

  • 端口:2049
  • 配置文件:/etc/exports
  • 常用参数:rw(读写)、ro(只读)、sync(同步)、async(异步)、no_root_squash(不压缩root)
# 服务端配置
echo "/data 192.168.1.0/24(rw,sync,no_root_squash)" >> /etc/exports
exportfs -rv
systemctl start nfs

# 客户端挂载
mount -t nfs 192.168.1.10:/data /mnt/nfs

3. Samba

Samba用于Linux和Windows之间的文件共享,基于SMB/CIFS协议。

  • 配置文件:/etc/samba/smb.conf
  • 端口:139、445
  • 用户管理:smbpasswd -a username

4. VPN

VPN(Virtual Private Network)虚拟专用网络,在公网上建立加密隧道。

常见类型:

  • IPsec VPN:站点到站点,适合企业互联
  • SSL VPN:远程接入,浏览器即可使用
  • OpenVPN:开源,跨平台
  • WireGuard:轻量高性能

5. NTP时间同步

  • CentOS 6:ntpd,配置文件/etc/ntp.conf
  • CentOS 7:chronyd,配置文件/etc/chrony.conf
# chrony配置
server ntp.aliyun.com iburst
allow 192.168.1.0/24

# 查看同步状态
chronyc sources
chronyc tracking

6. 邮件服务

  • SMTP:发邮件,端口25(加密465/587)
  • POP3:收邮件,端口110(加密995)
  • IMAP:收邮件,端口143(加密993)

六、磁盘与存储

1. RAID0/RAID1/RAID5原理及特点

RAID0(条带卷):

  • 原理:数据分成条带,并行读写到多块磁盘
  • 利用率:100%
  • 优点:读写性能最高
  • 缺点:无冗余,任何一块磁盘损坏,所有数据丢失
  • 最少磁盘数:2块

RAID1(镜像卷):

  • 原理:数据完全相同地写入两块磁盘(镜像)
  • 利用率:50%
  • 优点:冗余性最高,读性能好
  • 缺点:成本高,写性能一般
  • 最少磁盘数:2块(偶数)

RAID5(分布式奇偶校验):

  • 原理:数据和校验信息分布在所有磁盘上
  • 利用率:(n-1)/n
  • 优点:兼顾性能和冗余,允许1块磁盘损坏
  • 缺点:重建时间长,有写惩罚
  • 最少磁盘数:3块

RAID10(RAID1+0):

  • 先镜像再条带,兼顾性能和冗余
  • 利用率:50%
  • 允许每组镜像坏1块

对比排序:

  • 冗余从好到坏:RAID1 > RAID10 > RAID5 > RAID0
  • 性能从好到坏:RAID0 > RAID10 > RAID5 > RAID1
  • 成本从低到高:RAID0 > RAID5 > RAID1 > RAID10

容量计算:

  • 6块300G做RAID5:实际容量 = 5 × 300 = 1500G
  • 6块900G做RAID5:实际容量 = 900 × (6-1) = 4500G

2. LVM(逻辑卷管理)

LVM三层结构:

  • PV(Physical Volume):物理卷,整个磁盘或分区
  • VG(Volume Group):卷组,由一个或多个PV组成
  • LV(Logical Volume):逻辑卷,从VG中划分

常用命令:

pvcreate /dev/sdb1          # 创建PV
vgcreate vg0 /dev/sdb1      # 创建VG
lvcreate -L 10G -n lv0 vg0  # 创建LV
mkfs.xfs /dev/vg0/lv0       # 格式化
mount /dev/vg0/lv0 /mnt     # 挂载

# 扩展LV
lvextend -L +5G /dev/vg0/lv0
xfs_growfs /dev/vg0/lv0     # xfs扩容
resize2fs /dev/vg0/lv0      # ext4扩容

# 减少LV(需先卸载)
umount /mnt
e2fsck -f /dev/vg0/lv0
resize2fs /dev/vg0/lv0 10G
lvreduce -L 10G /dev/vg0/lv0

3. iSCSI

iSCSI(Internet Small Computer System Interface),将SCSI命令封装在TCP/IP中,通过网络传输块存储。

  • 目标端(Target):提供存储的服务器
  • 发起端(Initiator):使用存储的客户端
  • 端口:3260

4. 文件存储、块存储、对象存储

类型特点代表
文件存储目录树结构,按文件访问,支持POSIXNFS、FTP、Samba
块存储裸设备,按块访问,性能高SAN、iSCSI、云盘
对象存储扁平化,按key访问,海量非结构化数据S3、OSS、Swift

5. Ceph

Ceph是统一分布式存储系统,同时支持块存储、文件存储、对象存储。

核心组件:

  • OSD(Object Storage Device):存储数据,处理数据复制、恢复
  • MON(Monitor):监控集群状态,维护集群MAP
  • MDS(Metadata Server):元数据服务(仅CephFS需要)
  • RGW(Rados Gateway):对象存储网关(S3/Swift接口)

Pool类型:

  • 副本池(replicated):多副本,默认3副本
  • 纠删码池(erasure coded):类似RAID5,节省空间

6. 纠删码(Erasure Coding)

将数据分成n个数据块,计算m个校验块,共n+m块,允许任意m块损坏。

  • 例如4+2:4个数据块+2个校验块,允许2块损坏
  • 空间利用率:n/(n+m)
  • 相比多副本更节省空间,但有计算开销

7. inode和block

  • inode:索引节点,存储文件元信息(权限、所有者、大小、时间戳、数据块指针),不存文件名
  • block:数据块,存储实际文件内容
  • 一个文件占用一个inode,至少一个block
  • 文件名存在目录的block中
  • df -i查看inode使用情况

8. fsck文件系统检查

# 检查并修复
fsck /dev/sda1
fsck -y /dev/sda1    # 自动修复
# xfs用xfs_repair
xfs_repair /dev/sda1

注意:必须卸载后才能fsck,根分区需进入救援模式。


七、Web服务与反向代理

1. Nginx配置文件结构

# 全局块
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# events块
events {
    worker_connections 65535;
    use epoll;
    multi_accept on;
}

# http块
http {
    include mime.types;
    default_type application/octet-stream;
    sendfile on;
    keepalive_timeout 65;

    # server块
    server {
        listen 80;
        server_name www.example.com;

        # location块
        location / {
            root /usr/share/nginx/html;
            index index.html;
        }

        location ~ \.php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            include fastcgi_params;
        }
    }
}

2. Nginx特点和优缺点

优点:

  • 工作在7层,可针对HTTP应用做分流策略(域名、目录结构)
  • 正则规则比HAProxy更强大灵活
  • 对网络稳定性依赖小,理论上ping通即可
  • 安装配置简单,测试方便,错误日志清晰
  • 可承担高负载且稳定,硬件不差时支撑几万并发
  • 可通过端口检测后端故障,重新提交请求
  • 同时是Web应用服务器(LNMP架构)
  • 反向加速缓存比Squid快
  • 可做静态网页和图片服务器
  • 社区活跃,第三方模块多

缺点:

  • 仅支持http、https、Email协议
  • 健康检查只支持端口检测,不支持URL检测
  • 不支持Session直接保持(可用ip_hash解决)

3. Nginx常用模块

模块功能
rewriteURL重写、重定向
access来源IP访问控制
sslHTTPS安全加密
gzip网络传输压缩
proxy反向代理
upstream负载均衡后端服务器定义
fastcgi与PHP-FPM交互
ngx_cache_purge缓存清除
limit_req限流
limit_conn连接数限制
auth_basic基础认证
stub_status状态监控

4. Nginx location匹配规则

优先级从高到低:

  1. = 精确匹配
  2. ^~ 前缀匹配(匹配后不再检查正则)
  3. ~ 区分大小写的正则匹配
  4. ~* 不区分大小写的正则匹配
  5. 普通前缀匹配
  6. / 通用匹配

5. Nginx负载均衡策略

策略说明
轮询(默认)按顺序依次分配
weight加权轮询,权重越大分配越多
ip_hash按客户端IP哈希,解决session保持
fair(第三方)按后端响应时间分配
url_hash(第三方)按URL哈希分配
upstream backend {
    server 192.168.1.10:8080 weight=3;
    server 192.168.1.11:8080 weight=1;
    ip_hash;
}

6. Nginx优化(10大项)

(1)worker进程优化

worker_processes auto;          # CPU核心数或x2,最多8个
worker_cpu_affinity 0001 0010 0100 1000;  # CPU亲和力绑定

(2)文件描述符优化

worker_rlimit_nofile 65535;

同时修改/etc/security/limits.conf:

* soft nofile 65535
* hard nofile 65535

(3)事件模型优化

events {
    use epoll;                  # 高效事件模型
    worker_connections 65535;   # 单进程最大连接数
    multi_accept on;            # 一次接受多个连接
}

(4)高效传输

sendfile on;                   # 零拷贝
tcp_nopush on;                 # 合并发送
tcp_nodelay on;                # 不延迟发送

(5)连接超时

keepalive_timeout 60;
client_header_buffer_size 4k;
open_file_cache max=65535 inactive=60s;
open_file_cache_valid 80s;
open_file_cache_min_uses 1;

(6)fastcgi调优

fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;

(7)gzip压缩

gzip on;
gzip_min_length 1k;
gzip_buffers 4 32k;
gzip_comp_level 6;
gzip_types text/css text/xml application/javascript;
gzip_vary on;

(8)expires缓存

location ~* \.(ico|jpe?g|gif|png|bmp|swf|flv)$ {
    expires 30d;
    access_log off;
}
location ~* \.(js|css)$ {
    expires 7d;
    access_log off;
}

(9)防盗链

location ~* \.(jpg|gif|png|swf|flv)$ {
    valid_referers none blocked www.example.com example.com;
    if ($invalid_referer) {
        return 404;
    }
}

(10)内核参数优化(见Linux系统基础章节)

7. 301和302的区别

  • 301 Moved Permanently:永久重定向,搜索引擎会把旧URL权重转移到新URL,适合域名更换、URL规范化
  • 302 Found:临时重定向,搜索引擎不转移权重,适合临时跳转、A/B测试

8. Nginx高可用

  • Nginx + Keepalived:主备模式,VIP漂移
  • Nginx + DNS轮询:多活模式
  • 云SLB + 多台Nginx

9. Nginx动静分离

location ~* \.(jpg|png|gif|css|js|html)$ {
    root /data/static;
    expires 7d;
}
location / {
    proxy_pass http://backend;
}

10. Nginx正向代理和反向代理

  • 正向代理:代理客户端,客户端知道目标服务器,如翻墙、公司上网代理
  • 反向代理:代理服务器,客户端不知道后端真实服务器,如Nginx代理Tomcat

11. Apache工作模式

prefork(预派生多进程):

  • 启动时预先派生多个子进程
  • 每个子进程处理一个请求
  • 稳定,但并发量低,内存占用大

worker(预派生多线程):

  • 每个子进程派生多个线程
  • 每个线程处理一个请求
  • 并发量较高,但长连接下线程利用率低

event(worker升级版):

  • 通过管理线程调度长连接
  • 长连接时线程可处理其他请求
  • 线程利用率最高

12. Tomcat

三个端口:

  • 8005:关闭端口(SHUTDOWN)
  • 8009:AJP协议端口(与Apache连接)
  • 8080:HTTP服务端口

JVM内存配置(catalina.sh):

JAVA_OPTS="-server -Xms2048m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m"
  • -Xms:初始堆内存
  • -Xmx:最大堆内存
  • -XX:PermSize:永久代初始大小
  • -XX:MaxPermSize:永久代最大大小

Tomcat优化:

  • 调整JVM内存参数
  • 开启APR/native库
  • 调整连接器(Connector)线程池
  • 启用gzip压缩
  • 关闭不必要的应用

13. 浏览器输入网址全过程

  1. 浏览器解析URL,提取域名
  2. DNS域名解析(浏览器缓存→系统缓存→hosts→本地DNS→根→顶级域→权威域)
  3. 建立TCP连接(三次握手)
  4. 发送HTTP请求
  5. 服务器处理请求,返回HTTP响应
  6. 浏览器解析HTML,加载CSS/JS/图片等资源
  7. 渲染页面
  8. 断开TCP连接(四次挥手)

14. Squid、Varnish、Nginx缓存区别

对比项SquidVarnishNginx
类型正向/反向代理缓存专业反向代理缓存Web服务器+缓存
性能一般最高(内存缓存)较高
配置复杂中等简单
缓存策略丰富丰富(VCL语言)基础
适用场景传统企业缓存高并发缓存通用Web+缓存

八、负载均衡与高可用

1. LVS三种工作模式

NAT模式(网络地址转换):

  • 原理:负载均衡器修改数据包目的IP为RS的IP,RS处理后返回给LB,LB再修改源IP返回客户端
  • 优点:服务器可用任意操作系统,只需LB有公网IP
  • 缺点:LB成为瓶颈(进出流量都经过LB),扩展性有限
  • RS使用私有IP,与LB在同一网段

DR模式(直接路由,默认):

  • 原理:LB和RS都配置VIP,LB通过修改目标MAC地址转发请求,RS处理后直接返回客户端(不经过LB)
  • 优点:LB只分发请求,应答包直接返回,性能好,LB不是瓶颈
  • 缺点:LB和RS必须在同一局域网(同一广播域),RS需配置VIP并抑制ARP
  • 生产环境最常用

TUN模式(IP隧道):

  • 原理:LB将请求包封装新IP头发送给RS,RS解封装后处理,直接返回客户端
  • 优点:RS可分布在不同地域,有独立公网IP,适合灾备
  • 缺点:效率低,RS需支持IP隧道协议,配置复杂

2. LVS调度算法

静态算法(不考虑后端实际状态):

  • rr(轮询):按顺序均等分配
  • wrr(加权轮询):按权重分配
  • sh(源地址哈希):客户端IP固定到同一RS,解决session
  • dh(目标地址哈希):目标IP固定到同一RS

动态算法(考虑后端实际状态):

  • lc(最少连接):分配给连接数最少的RS
  • wlc(加权最少连接,默认):连接数/权重最小的优先
  • lblc(基于局部的最少连接):目标IP优先分配给最近使用的RS
  • lblcr(带复制的基于局部最少连接):维护目标IP到一组RS的映射

3. LVS/Nginx/HAProxy对比

对比项LVSNginxHAProxy
工作层级4层7层4层/7层
性能最高(无流量)较高
正则支持不支持强大支持
健康检查端口端口端口+URL
Session保持sh算法ip_hash原生支持+Cookie
协议支持几乎所有TCPHTTP/HTTPS/EmailTCP/HTTP
配置复杂度较高简单中等
适用场景超大流量入口Web应用负载通用负载均衡

选型建议:

  • PV超过1000万:LVS(DR模式)+ Keepalived
  • PV 1000万以下:Nginx即可
  • 需要TCP负载或URL健康检查:HAProxy
  • 典型架构:LVS(4层入口)→ Nginx(7层分流)→ 应用服务器

4. Keepalived工作原理

基于VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)协议实现。

  • N台服务器组成一个路由器组,有一个master和多个backup
  • master持有VIP对外提供服务,定期发送VRRP组播包
  • backup收不到VRRP包时认为master宕机,根据优先级选举新master
  • 新master接管VIP,实现高可用

三个模块:

  • core:核心,主进程启动维护、配置文件加载解析
  • check:健康检查
  • vrrp:VRRP协议实现

5. Keepalived健康检查

HTTP_GET | SSL_GET {
    url {
        path /
        digest <STRING>          # 用genhash生成的摘要
        status_code 200          # 期望状态码
    }
    connect_port 80
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 2
}

6. 脑裂及防脑裂

脑裂原因:

  • 心跳线断开
  • 防火墙阻挡心跳包
  • 配置错误(优先级相同)
  • 网络延迟

防脑裂措施:

  • 双心跳线(双线冗余)
  • STONITH/Fence(自动隔离故障节点)
  • 监控报警,及时人工介入
  • 仲裁机制(第三方节点)

7. HAProxy特性

  • 支持虚拟主机
  • 支持Session保持、Cookie引导
  • 支持URL检测后端状态
  • 支持TCP协议(可对MySQL读负载均衡)
  • 8种负载均衡算法:roundrobin、static-rr、leastconn、source、ri、rl_param、hdr(name)、rdp-cookie(name)

8. 单点故障解决方案

  • 负载均衡层:LVS/Keepalived主备
  • Web层:多台应用服务器
  • 数据库层:主从复制+MHA/MMM高可用
  • 缓存层:Redis主从+哨兵/集群
  • 存储层:分布式存储(Ceph/GlusterFS)
  • DNS层:多线路智能解析

九、数据库-MySQL

1. InnoDB和MyISAM区别

对比项InnoDBMyISAM
事务支持支持不支持
锁粒度行锁表锁
MVCC支持不支持
外键支持不支持
全文索引5.6后支持支持
count(*)需扫描全表直接读取计数器(快)
崩溃恢复好(事务日志)
适用场景事务、高并发、频繁更新读多写少、查询统计

2. 事务ACID

  • A(Atomicity 原子性):事务中操作要么全部成功,要么全部失败
  • C(Consistency 一致性):事务前后数据保持一致状态
  • I(Isolation 隔离性):并发事务之间互不干扰
  • D(Durability 持久性):事务提交后数据永久保存

3. 事务隔离级别

隔离级别脏读不可重复读幻读
读未提交(Read Uncommitted)可能可能可能
读已提交(Read Committed)不会可能可能
可重复读(Repeatable Read,MySQL默认)不会不会可能(InnoDB通过MVCC+间隙锁解决)
串行化(Serializable)不会不会不会

4. 索引类型

  • 按数据结构:B+树索引、哈希索引、全文索引、R树索引
  • 按字段数:单列索引、联合索引(复合索引)
  • 按约束:主键索引、唯一索引、普通索引
  • 聚簇索引 vs 非聚簇索引
    • 聚簇索引:数据和索引在一起,InnoDB主键索引就是聚簇索引
    • 非聚簇索引(二级索引):索引存主键值,需回表查询

索引优化原则:

  • 最左前缀原则(联合索引)
  • 避免在索引列上使用函数、运算
  • 避免隐式类型转换
  • like查询避免以%开头
  • 覆盖索引(查询字段都在索引中,避免回表)
  • MRR(Multi-Range Read)优化回表

5. 锁机制

InnoDB锁类型:

  • 共享锁(S锁):读锁,允许多个事务同时读
  • 排他锁(X锁):写锁,阻塞其他读写
  • 意向锁:表级锁,表明事务即将加行锁
  • 间隙锁(Gap Lock):锁定范围,防止幻读
  • Next-Key Lock:行锁+间隙锁

查看锁:

SELECT * FROM information_schema.innodb_trx;       -- 当前事务
SELECT * FROM information_schema.innodb_locks;     -- 当前锁
SELECT * FROM information_schema.innodb_lock_waits; -- 锁等待

6. 死锁

四要素: 互斥、持有并请求、不可剥夺、循环等待

避免死锁:

  • 按固定顺序访问资源
  • 保持事务简短
  • 降低隔离级别
  • 使用合理的索引
  • 大事务拆分为小事务

7. MySQL主从复制原理

主库:

  • 开启binlog
  • dump线程:读取二进制日志,响应从库请求

从库:

  • IO线程:连接主库,请求binlog,保存到relay log(中继日志)
  • SQL线程:读取relay log,重放SQL

复制流程:

  1. 主库数据更新,写入binlog
  2. 主库dump线程通知从库IO线程
  3. 从库IO线程拉取binlog,写入relay log
  4. 从库SQL线程读取relay log,执行SQL
  5. 完成数据同步

8. 主从延迟原因及解决

原因:

  • 从库太多(超过10个)
  • 从库硬件差
  • 慢SQL(大事务)
  • 单线程复制(5.6前)
  • 网络延迟
  • 主库压力大,写入频繁
  • 从库开启了慢查询日志

解决:

  • 减少从库数量
  • 提升从库硬件
  • 优化慢SQL,避免大事务
  • 开启多线程复制(5.6后支持schema级,5.7支持logical_clock)
  • 优化网络
  • 主从使用相同配置

9. 主从数据一致性校验

工具: pt-table-checksum(Percona Toolkit)

# 主库执行校验
pt-table-checksum --nocheck-replication-filters --replicate=test.checksums --host=127.0.0.1 --user=root --password=123456

# 查看DIFFS列,0表示一致,非0表示不一致
SELECT db, tbl, chunk, this_cnt, master_cnt, this_crc, master_crc, diffs FROM test.checksums WHERE diffs != 0;

修复: pt-table-sync

pt-table-sync --replicate=test.checksums --sync-to-master h=127.0.0.1,u=root,p=123456 --print
pt-table-sync --replicate=test.checksums --sync-to-master h=127.0.0.1,u=root,p=123456 --execute

10. 主从不一致的13种原因

  1. 人为在从库写入数据
  2. 主库异常宕机(非干净关闭)
  3. replicate-ignore/do/rewrite规则
  4. binlog非ROW格式
  5. 异步复制本身的延迟
  6. 从库中断很久,binlog不连续
  7. 从库启用了存储过程/触发器
  8. 主从MySQL版本/分支不一致
  9. 备份恢复时没指定正确参数
  10. sql_mode不一致
  11. 一主二从server_id相同
  12. 自增列配置不一致
  13. 主从信息保存在文件,刷新非事务安全

11. 主库宕机切换步骤

  1. 停止业务写入(或确认主库已宕机)
  2. 检查各从库同步状态(show slave status\G)
  3. 选择数据最新的从库作为新主库
  4. 在新主库执行:STOP SLAVE; RESET SLAVE ALL; RESET MASTER; -- 清空binlog,作为新起点
  5. 其他从库指向新主库:CHANGE MASTER TO MASTER_HOST='新主库IP', MASTER_USER='slave', MASTER_PASSWORD='xxx', MASTER_LOG_FILE='xxx', MASTER_LOG_POS=xxx; START SLAVE;
  6. 修改应用配置指向新主库
  7. 恢复业务

12. MySQL高可用方案

方案切换时间数据一致性复杂度
MHA0-30秒好(尽量保证不丢数据)中等
MMM较快一般(双主可能冲突)中等
半同步复制
Group Replication秒级最好
云RDS自动

MHA(Master High Availability):

  • 由Manager节点和Node节点组成
  • 监控主库,故障时自动切换
  • 切换前会对比从库relay log,补全差异
  • 适合一主多从架构

13. MySQL备份方式

方式工具类型特点
逻辑备份mysqldump逻辑速度慢,适合小数据量,可跨版本
物理热备xtrabackup物理速度快,不锁表,支持增量
冷备tar/cp物理需停机,最简单
LVM快照lvmsnapshot物理几乎热备,需LVM

mysqldump:

# 全库备份
mysqldump -uroot -p123456 --all-databases --single-transaction --master-data=2 > all.sql
# 单库备份
mysqldump -uroot -p123456 --single-transaction dbname > dbname.sql
# 单表备份
mysqldump -uroot -p123456 dbname tablename > tablename.sql

从全库备份恢复单库/单表:

# 恢复单库
mysql -uroot -p123456 --one-database dbname < all.sql
# 恢复单表(需先提取)
sed -n '/^CREATE TABLE.*tablename/,/^UNLOCK TABLES/p' all.sql > tablename.sql
mysql -uroot -p123456 dbname < tablename.sql

14. binlog三种模式

  • STATEMENT:记录SQL语句,日志量小,但可能主从不一致(如now()、uuid())
  • ROW:记录行变化,数据一致,日志量大(5.7默认)
  • MIXED:混合模式,一般用STATEMENT,特殊情况自动切换ROW

15. 双1设置

[mysqld]
sync_binlog = 1                    # 每次事务提交都刷binlog到磁盘
innodb_flush_log_at_trx_commit = 1 # 每次事务提交都刷redo log到磁盘
  • 双1设置保证数据最高安全性,但性能有损耗
  • 从库可适当降低(如sync_binlog=100)提升性能

16. MySQL root密码重置

已知密码修改:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpassword');
FLUSH PRIVILEGES;

忘记密码(CentOS 7):

# 1. 停止MySQL
systemctl stop mysqld
# 2. 跳过权限表启动
mysqld --skip-grant-tables --user=mysql &
# 3. 无密码登录
mysql -uroot
# 4. 修改密码
UPDATE mysql.user SET authentication_string=PASSWORD('newpassword') WHERE user='root';
FLUSH PRIVILEGES;
# 5. 重启MySQL
systemctl restart mysqld

17. 慢查询优化

[mysqld]
slow_query_log = ON
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
log_queries_not_using_indexes = ON

分析工具: mysqldumpslow、pt-query-digest

优化方向:

  • 添加合适的索引
  • 优化SQL语句(避免select *、避免大事务)
  • 分库分表
  • 读写分离
  • 引入缓存(Redis)

18. drop、truncate、delete区别

对比项droptruncatedelete
类型DDLDDLDML
删除内容表结构+数据+索引全部数据部分或全部数据
回滚不可不可可(事务内)
速度最快慢(逐行删除)
触发器不触发不触发触发
自增重置重置为1不重置

19. MySQL CPU飙升500%处理

  1. top 确认是否mysqld进程占用高
  2. show processlist 找出消耗高的SQL
  3. kill 异常线程
  4. 分析SQL:explain执行计划,加索引、改SQL
  5. 调整内存参数(buffer_pool_size等)
  6. 分析连接数激增原因(攻击、慢查询堆积)

20. MySQL睡眠连接(sleep)过多

影响:

  • 占用连接数资源
  • 占用内存
  • 可能导致max_connections耗尽

解决:

  • 调整wait_timeout和interactive_timeout(缩短空闲超时)
  • 应用层使用连接池,及时释放连接
  • 排查是否有连接泄漏
  • 适当增大max_connections

21. key_buffer_size参数

  • 作用:MyISAM索引缓存大小
  • 不重启生效:SET GLOBAL key_buffer_size = 268435456;
  • 注意:InnoDB不使用此参数,用innodb_buffer_pool_size

22. 脱离主从结构

STOP SLAVE;
RESET SLAVE ALL;  -- 清除主从信息

十、数据库-NoSQL

1. NoSQL和SQL区别

对比项SQL(关系型)NoSQL(非关系型)
数据结构表、行、列键值、文档、列族、图
模式固定schema灵活schema
事务支持ACID一般不支持(或弱事务)
扩展性垂直扩展为主水平扩展
查询SQL语言各有不同
代表MySQL、PostgreSQLRedis、MongoDB、HBase

2. Redis为什么快

  1. 纯内存操作:数据存在内存中,读写速度极快
  2. 单线程模型:避免了多线程的锁竞争和上下文切换
  3. I/O多路复用:epoll模型,高并发处理
  4. 高效数据结构:底层使用跳表、压缩列表等优化

3. Redis数据结构

5种基础:

  • String:字符串,最大512M
  • List:列表,双向链表
  • Hash:哈希,适合存储对象
  • Set:无序集合,去重
  • Sorted Set(ZSet):有序集合,带score

2种高级:

  • HyperLogLog:基数统计
  • Stream:消息流(5.0新增)

4. Redis持久化

RDB(快照):

  • 定时将内存数据快照保存到磁盘
  • 优点:文件小,恢复快
  • 缺点:可能丢失最后一次快照后的数据
  • 触发:save(阻塞)、bgsave(后台fork)

AOF(追加日志):

  • 记录每个写命令,追加到文件
  • 优点:数据安全性高,最多丢1秒数据
  • 缺点:文件大,恢复慢
  • 刷盘策略:always(每条)、everysec(每秒,默认)、no(系统决定)

混合持久化(4.0后):

  • RDB做基础,AOF记录增量
  • 兼顾恢复速度和数据安全

5. Redis高可用

  • 主从复制:一主多从,读写分离
  • 哨兵(Sentinel):监控主从,自动故障转移
  • 集群(Cluster):分布式,16384个哈希槽,水平扩展

6. Redis三大问题

缓存雪崩: 大量key同时失效,请求全部打到数据库

  • 解决:过期时间加随机值、Redis高可用、本地缓存+限流、持久化快速恢复

缓存穿透: 查询不存在的数据,缓存不命中,每次都查数据库

  • 解决:布隆过滤器、空值缓存(短过期)

缓存击穿: 热点key失效,大量并发请求打到数据库

  • 解决:热点key永不过期、互斥锁(setnx)

7. Redis和Memcached区别

对比项RedisMemcached
数据结构丰富(5+种)仅String
持久化支持不支持
高可用主从/哨兵/集群客户端一致性哈希
内存管理虚拟内存(可换出)预分配slab
单线程多线程
适用复杂数据、持久化需求简单缓存

8. Redis优化

  • 合理设置过期时间
  • 使用批量操作(pipeline、mset)
  • 避免大key(String不超过10K,集合不超过5000)
  • 使用连接池
  • 合理配置maxmemory和淘汰策略
  • 慢查询监控

9. MongoDB

  • 文档型数据库,BSON格式(JSON二进制)
  • 适合存储非结构化数据、日志、物联网
  • 副本集(Replica Set)高可用
  • 分片(Sharding)水平扩展

十一、消息队列

1. 消息队列的好处

  • 解耦:生产者和消费者独立
  • 异步:非核心逻辑异步处理,提升响应速度
  • 削峰:高峰期请求缓存到MQ,消费者匀速处理
  • 重试:消费失败可重试
  • 顺序保证:部分MQ支持顺序消息

2. 消息队列两种模式

  • 点对点(P2P):一条消息只能被一个消费者消费,如队列
  • 发布订阅(Pub/Sub):一条消息可被多个订阅者消费,如Topic

3. RabbitMQ

  • 基于AMQP协议,Erlang开发
  • 核心概念:Exchange、Queue、Binding、Routing Key
  • 交换机类型:direct、fanout、topic、headers
  • 支持消息确认、持久化、死信队列

4. Kafka架构

核心组件:

  • Producer:生产者
  • Broker:Kafka服务器节点
  • Topic:主题,消息分类
  • Partition:分区,Topic的分片,有序
  • Replica:副本,Leader和Follower
  • Consumer:消费者
  • Consumer Group:消费者组,一个分区只能被组内一个消费者消费
  • Offset:消息偏移量
  • Zookeeper:协调服务(新版KRaft模式可去掉)

ISR(In-Sync Replicas): 同步副本队列,与Leader保持同步的副本集合。AR = ISR + OSR。

5. Kafka写入流程

  1. Producer找Partition Leader
  2. 发送消息到Leader
  3. Leader写入本地log
  4. Follower从Leader拉取消息,写入后ACK
  5. Leader收到所有ISR的ACK后,增加HW(High Watermark)
  6. Leader回复Producer确认

6. Kafka为什么快

  1. PageCache:利用操作系统页缓存,读写内存
  2. 顺序写:消息追加到文件末尾,磁盘顺序写性能接近内存
  3. 零拷贝:sendfile,数据直接从内核缓冲区到网卡,不经过用户态
  4. 批量处理:消息批量发送、批量压缩
  5. Pull模式:消费者主动拉取,按需消费

7. Kafka消息丢失和重复

消息丢失:

  • acks=0:不等确认,网络异常或缓冲区满就丢
  • acks=1:Leader写入成功即返回,Leader挂掉Follower未同步则丢
  • 解决:acks=all,min.insync.replicas>=2,副本数>=3

消息重复:

  • 消费后提交offset前消费者挂掉
  • 解决:消费者端幂等处理(唯一ID去重)

8. Kafka不支持读写分离的原因

  • 数据一致性问题:Follower同步有延迟
  • 延时问题:同步需要时间
  • Kafka设计目标是高吞吐,读都走Leader

9. Zookeeper

定义: 分布式协调服务,文件系统数据结构 + 通知机制

数据结构: ZNode树,每个节点最多存1MB数据

选举机制:

  • 第一次启动:按myid大小选举
  • 非第一次:Epoch > ZXID > SID
  • 半数以上节点存活即可服务,适合奇数台(3或5)

应用场景:

  • 统一命名服务
  • 统一配置管理
  • 集群管理(上下线感知)
  • 分布式锁
  • 软负载均衡

10. Zookeeper工作原理(SID/ZXID/Epoch)

  • SID(Server ID):服务器唯一标识,即myid
  • ZXID(事务ID):全局递增,每次事务+1
  • Epoch(选举周期):每次选举+1
  • 选举优先级:Epoch大的 > ZXID大的 > SID大的

十二、监控与日志

1. 常见监控软件

  • Zabbix:企业级开源监控,功能全面,适合中大型环境
  • Prometheus:云原生监控,时序数据库,适合容器/K8s
  • Nagios:老牌监控,插件丰富
  • Cacti:流量监控,基于SNMP
  • Grafana:可视化展示,常配合Prometheus/InfluxDB

2. Zabbix架构

核心组件:

  • Zabbix Server:核心服务,处理数据、触发告警
  • Database Storage:数据库存储(MySQL/PostgreSQL)
  • Web Interface:Web管理界面
  • Zabbix Proxy:分布式代理,分担Server压力
  • Zabbix Agent:客户端,采集数据

五个程序: zabbix_server、zabbix_agent、zabbix_proxy、zabbix_get、zabbix_sender

3. Zabbix监控方式

  • Agent被动:Server主动向Agent请求数据(默认10050端口)
  • Agent主动:Agent主动向Server提交数据(10051端口)
  • SNMP:网络设备、打印机等
  • IPMI:硬件监控(电源、温度、风扇)
  • JMX:Java应用监控(Tomcat、JVM)
  • SSH/Telnet:远程命令执行

4. Zabbix分布式

  • 大于500台主机建议使用分布式
  • Proxy分担Server压力,跨地域部署
  • Proxy只缓存数据,不处理告警
  • 分为主动Proxy和被动Proxy

5. Zabbix自动发现

  • 网络发现:按IP范围扫描,自动添加主机
  • 主动客户端自动注册:Agent启动后自动注册到Server
  • 低级别发现(LLD):自动发现磁盘、网卡、文件系统等,批量创建监控项

6. Zabbix常用术语

  • 主机(Host):被监控设备
  • 主机组(Host Group):主机分组
  • 监控项(Item/Key):具体监控指标
  • 触发器(Trigger):告警阈值判断
  • 事件(Event):触发器状态变化
  • 动作(Action):事件触发的操作(发邮件、远程命令)
  • 报警升级(Escalation):告警未处理时逐级升级
  • 媒介(Media):告警发送方式(邮件、微信、短信)
  • 模板(Template):监控项、触发器、图形的集合

7. Zabbix自定义监控项Key

# 内存
vm.memory.size[available]      可用内存
vm.memory.size[total]          总内存

# Swap
system.swap.size[,free]        可用swap
system.swap.size[,pfree]       可用swap百分比
system.swap.size[,total]       总swap

# CPU
system.cpu.util[,user]         用户态CPU
system.cpu.util[,system]       内核态CPU
system.cpu.util[,iowait]       IO等待CPU
system.cpu.util[,idle]         空闲CPU
system.cpu.load[percpu,avg1]   1分钟平均负载/CPU数
system.cpu.load[percpu,avg5]   5分钟平均负载/CPU数
system.cpu.load[percpu,avg15]  15分钟平均负载/CPU数

# 磁盘
vfs.fs.size[{#FSNAME},free]    可用磁盘空间
vfs.fs.size[{#FSNAME},pfree]   可用磁盘百分比
vfs.fs.size[{#FSNAME},total]   总磁盘空间
vfs.fs.size[{#FSNAME},used]    已用磁盘空间
vfs.fs.inode[{#FSNAME},pfree]  可用inode百分比

# 网络
net.if.in[{#IFNAME}]           入站流量
net.if.out[{#IFNAME}]          出站流量

# 进程
proc.num[]                     总进程数
proc.num[,,run]                运行中进程数

# 系统
system.localtime               系统时间
system.boottime                启动时间戳
system.hostname                主机名
system.uptime                  运行时长
system.users.num               登录用户数
kernel.maxfiles                最大文件句柄数
kernel.maxproc                 最大进程数

# Agent
agent.ping                     客户端可用性
agent.version                  客户端版本
agent.hostname                 客户端主机名

# 端口
net.tcp.listen[port]           端口是否监听

8. Zabbix日志监控

key: log[/var/log/message,error]
type: zabbix agent (active)  # 必须主动模式
log time format: MMpddphh:mm:ss  # 对应日志行头 Sep 14 07:32:38

日志监控原理:

  1. Server和Agent追踪日志文件大小和最后修改时间
  2. Agent从上次读取位置继续读取
  3. 数据记录在数据库,保证断点续读
  4. 文件轮转时从头读取
  5. 每秒发送日志量有上限(MaxLinePerSecond),防止CPU过高

9. Prometheus

概述: 开源监控报警系统和时序数据库,Go语言开发,Google BorgMon开源版。

核心组件:

  • Prometheus Server:核心,抓取和存储时序数据
  • Exporter:客户端,暴露指标(如node_exporter)
  • Pushgateway:推送网关(短生命周期任务)
  • Alertmanager:告警管理
  • Grafana:可视化展示

Server三部分:

  • Retrieval:抓取模块
  • Storage:存储模块
  • PromQL:查询语言

工作模式: Pull模式,主动拉取数据

时序数据类型:

  • Counter:计数器,只增不减
  • Gauge:计量器,可增可减
  • Histogram:直方图,分桶统计
  • Summary:汇总,分位数统计

10. ELK架构

组成:

  • Elasticsearch:分布式存储检索引擎,基于Lucene,Java开发,RESTful接口
  • Logstash:数据收集引擎,JRuby编写,JVM运行,内存占用大
  • Kibana:Node.js开发的展示工具,图形化日志分析

工作流程:

  1. Logstash收集日志(输入→过滤→输出)
  2. 输出到Elasticsearch存储索引
  3. Kibana连接ES,可视化查询展示

Filebeat: 轻量级日志搜集器,替代Logstash做收集,资源占用小。

EFK: ES + Fluentd + Kibana,Fluentd用Go语言,常用于K8s。

11. 日志分析常用命令

# 访问量TOP10 IP
cat access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -10

# 按时间段统计
awk '$4 >= "[10/Aug/2024:10:00:00" && $4 <= "[10/Aug/2024:12:00:00"' access.log | wc -l

# 状态码统计
awk '{print $9}' access.log | sort | uniq -c | sort -rn

# UV统计
awk '{print $1}' access.log | sort -u | wc -l

十三、虚拟化与云计算

1. 云计算特征

  • 按需自助服务
  • 广泛网络访问
  • 资源池化
  • 快速弹性伸缩
  • 可计量的服务

2. 云计算部署模式

  • 公有云:第三方提供商,如阿里云、AWS、腾讯云
  • 私有云:企业自建,仅供内部使用
  • 混合云:公有云+私有云结合
  • 社区云:特定社区共享

3. IaaS、PaaS、SaaS

模式全称说明代表
IaaS基础设施即服务提供虚拟机、存储、网络AWS EC2、阿里云ECS
PaaS平台即服务提供开发运行平台Heroku、阿里云ACE
SaaS软件即服务直接使用软件应用钉钉、企业微信、Salesforce

4. 云计算和虚拟化的区别

  • 虚拟化是云计算的底层技术之一
  • 云计算是一种服务模式,虚拟化是技术实现
  • 云计算包含虚拟化、分布式存储、网络、自动化等多种技术

5. 虚拟化产品

  • KVM:开源,Linux内核模块,主流
  • Xen:早期开源,半虚拟化/全虚拟化
  • VMware:商业,功能强大,企业级
  • Hyper-V:微软
  • OpenVZ:容器级虚拟化(类似LXC)

6. KVM

  • 基于Linux内核的虚拟化模块,2.6.20后集成
  • 使用Linux调度器,性能接近物理机
  • 支持全虚拟化,需CPU支持VT-x/AMD-V
  • 管理工具:libvirt、virsh、virt-manager

7. KVM工作流程

  1. 加载kvm.ko内核模块
  2. 创建VM,分配CPU、内存、磁盘
  3. QEMU模拟硬件设备
  4. VM通过/dev/kvm与内核交互
  5. CPU指令由KVM处理,IO由QEMU处理

十四、容器-Docker

1. Docker三大组件

  • 镜像(Image):只读模板,包含操作系统和应用
  • 容器(Container):镜像的运行实例,可读写
  • 仓库(Repository):存储镜像,如Docker Hub、Harbor

2. Docker和虚拟机的区别

对比项Docker容器虚拟机
隔离级别进程级(共享内核)系统级(独立OS)
启动速度秒级分钟级
资源占用小(MB级)大(GB级)
性能接近原生有损耗
隔离性一般
适用场景微服务、CI/CD多OS、强隔离

3. Docker使用的技术

  • Namespace:六项隔离
    • UTS:主机名和域名
    • IPC:信号量、消息队列、共享内存
    • PID:进程编号
    • NETWORK:网络设备、栈、端口
    • MOUNT:挂载点
    • USER:用户和组
  • Cgroups:资源限制(CPU、内存、IO)
  • UnionFS:联合文件系统,分层叠加
  • Container Runtime:runC、containerd

4. Docker网络模式

模式说明
bridge默认,容器连接到docker0网桥,NAT访问外网
host共享宿主机网络,端口直接占用宿主机
none无网络
container共享另一个容器的网络命名空间
overlay跨主机网络,用于Swarm/K8s
macvlan容器有独立MAC地址,直接接入物理网络

5. Dockerfile常用命令

命令说明
FROM基础镜像
MAINTAINER维护者
RUN构建时执行命令
COPY复制本地文件到镜像
ADD复制文件(支持URL和解压)
WORKDIR工作目录
ENV环境变量
EXPOSE暴露端口
VOLUME数据卷
CMD容器启动时执行(可被覆盖)
ENTRYPOINT容器启动时执行(不可被覆盖,优先级高)

ADD vs COPY:

  • ADD支持URL和自动解压tar
  • COPY只能复制本地文件
  • 推荐用COPY,更明确

ENTRYPOINT vs CMD:

  • ENTRYPOINT优先级高,exec形式不会被docker run覆盖
  • CMD可被docker run后的参数覆盖
  • 常组合使用:ENTRYPOINT定命令,CMD传默认参数

6. 联合文件系统(UnionFS)

  • 分层叠加:bootfs + rootfs(只读层)+ 读写层
  • 镜像层只读,容器层可写
  • 修改文件时复制到读写层(Copy-on-Write)
  • 优势:共享底层,节省空间,快速分发

7. Docker容器生命周期

Dockerfile → build → Image → run → Container → stop/start/restart → rm

8. docker run vs start

  • docker run:基于镜像创建并启动新容器
  • docker start:启动已停止的容器

9. docker stop vs kill

  • docker stop:发送SIGTERM,优雅停止(默认10秒超时后kill)
  • docker kill:发送SIGKILL,强制立即停止

10. Docker数据持久化

  • Volume:Docker管理的卷,/var/lib/docker/volumes
  • Bind Mount:绑定挂载宿主机目录
  • tmpfs:内存文件系统,临时

11. Docker镜像优化

  • 选择精简基础镜像(alpine)
  • 合并RUN指令,减少层数
  • 多阶段构建(multi-stage build)
  • 清理缓存(yum clean、rm -rf /var/cache)
  • 使用.dockerignore排除不必要文件

12. Harbor

VMware开源企业级Docker Registry,基于docker registry封装。

特性: 角色控制、镜像复制、LDAP/AD、镜像删除垃圾回收、图形界面、审计、RESTful API、中文支持

组件:

  • Proxy:nginx反向代理
  • Registry:存储镜像
  • Core services:UI、WebHook、Token
  • Database:MySQL/PostgreSQL
  • Job services:镜像复制
  • Log collector:日志收集

13. Docker安全配置

  • 内核级别:User Namespace、Cgroups、SELinux、Capability、Seccomp
  • 主机级别:定期更新、最小化安装
  • 网络级别:网络隔离、不使用–net=host
  • 镜像级别:可信镜像、扫描漏洞
  • 容器级别:非root运行、只读文件系统
  • 其他:TLS加密通信、限制资源

14. HTTPS/TLS证书认证流程

  1. 客户端发起请求,连接服务器进程端口
  2. 服务器有数字证书(公钥、颁发机构、失效日期)
  3. 服务器发送数字证书给客户端
  4. 客户端验证证书合法性,通过则生成随机密钥,用证书公钥加密
  5. 客户端发送加密后的密钥到服务器
  6. 服务器用私钥非对称解密,得到客户端密钥
  7. 服务器用客户端密钥对称加密返回数据
  8. 客户端用自己密钥对称解密得到数据

单向SSL:只有服务端有证书
双向SSL:客户端也有证书

15. consul服务发现

  • 基于Raft算法的分布式KV存储
  • Server/Client模式,3或5个Server节点
  • 特性:服务注册发现、健康检查、KV存储、多数据中心
  • 常与Docker配合实现服务注册发现

十五、容器编排-Kubernetes

1. Kubernetes定义和优势

K8s是Google开源的容器编排系统,用于自动化部署、扩展和管理容器化应用。

优势:

  • 自动装箱(资源调度)
  • 自我修复(重启失败容器、替换节点)
  • 水平扩展(HPA自动伸缩)
  • 服务发现和负载均衡
  • 滚动更新和回滚
  • 密钥和配置管理
  • 存储编排
  • 批处理执行

2. K8s架构

Master节点:

  • API Server:集群入口,RESTful接口,所有组件通信枢纽
  • Scheduler:调度Pod到合适的Node
  • Controller Manager:控制器管理(节点、副本、服务等)
  • etcd:分布式KV存储,保存集群所有数据

Node节点:

  • Kubelet:管理本节点Pod,与API Server通信
  • Kube-proxy:网络代理,实现Service负载均衡
  • 容器运行时:Docker/containerd

3. 创建Pod流程

  1. kubectl提交Pod定义到API Server
  2. API Server将信息存入etcd
  3. Controller Manager检测到新Pod,创建对应控制器
  4. Scheduler监听未调度Pod,执行调度(预选+优选)
  5. Scheduler将Pod绑定到目标Node,更新etcd
  6. 目标Node的Kubelet检测到Pod,启动容器
  7. Kube-proxy建立网络规则(Service/Endpoint)

4. 核心概念

  • Pod:最小调度单元,包含一个或多个容器,共享网络和存储
  • Node:工作节点
  • Namespace:命名空间,资源隔离
  • Label:标签,键值对,用于选择器
  • Annotation:注解,附加信息
  • Service:服务,Pod的稳定访问入口
  • Volume:数据卷
  • ConfigMap:配置管理
  • Secret:敏感数据管理

5. Pod控制器

控制器说明
Deployment无状态应用,滚动更新/回滚
StatefulSet有状态应用,稳定网络标识和存储
DaemonSet每个Node运行一个Pod(日志、监控)
Job一次性任务
CronJob定时任务
ReplicaSet副本管理(被Deployment管理)

6. ReplicaSet和Replication Controller区别

  • RC(Replication Controller):旧版,只支持基于等式的选择器
  • RS(Replica Set):新版,支持基于集合的选择器(in/notin/exists)
  • 一般不直接使用RS,由Deployment管理

7. kube-proxy模式

  • userspace:用户态,已废弃
  • iptables:内核态,规则匹配,濒临废弃(大规模性能差)
  • ipvs:推荐,基于Hash表,高性能,支持更多调度算法(rr/lc/sh/dh等)

8. Pod状态

  • Pending:等待调度
  • Running:运行中
  • Succeeded:成功完成(Job)
  • Failed:失败
  • Unknown:未知(Node失联)
  • Terminating:终止中

9. 重启策略

  • Always:总是重启(默认)
  • OnFailure:失败时重启
  • Never:从不重启

10. 镜像拉取策略

  • IfNotPresent:本地没有才拉取(默认)
  • Always:总是拉取(latest标签默认)
  • Never:从不拉取(只用本地镜像)

11. 健康检查

  • LivenessProbe(存活探针):判断容器是否存活,失败则重启
  • ReadinessProbe(就绪探针):判断容器是否就绪,失败则从Service摘除
  • startupProbe(启动探针,1.17+):判断容器是否启动完成,保护慢启动应用

探针方式:

  • ExecAction:执行命令
  • TCPSocketAction:TCP端口检测
  • HTTPGetAction:HTTP请求检测

12. 调度策略

  • Deployment/RC自动调度:默认
  • nodeSelector:定向调度(标签匹配)
  • NodeAffinity(节点亲和性)
    • 硬亲和(requiredDuringSchedulingIgnoredDuringExecution):必须满足
    • 软亲和(preferredDuringSchedulingIgnoredDuringExecution):尽量满足
  • Taints和Tolerations(污点和容忍):节点排斥Pod,Pod可配置容忍

13. pause容器

  • Pod中所有容器的父容器
  • 提供网络命名空间共享基础
  • PID=1的init进程,回收僵尸进程
  • 每个Pod都有一个pause容器

14. init container

  • 应用容器启动前运行完成
  • 可阻塞、延迟应用启动
  • 可访问Secret(应用容器也能,但init常用于初始化)
  • 常用于:等待依赖服务、初始化配置、注册等

15. Requests和Limits

  • Requests:资源预分配,调度依据
  • Limits:资源上限,超过可能被OOM Kill
  • CPU单位:m(毫核),1000m=1核
  • 内存单位:Mi、Gi

16. Deployment更新策略

  • Recreate(重建):先删旧Pod,再建新Pod,有停机
  • RollingUpdate(滚动更新,默认):逐步替换
    • maxUnavailable:最大不可用Pod数
    • maxSurge:最大超出期望Pod数

17. DaemonSet和Deployment区别

  • Deployment:管理无状态应用,Pod分布在任意节点,可指定副本数
  • DaemonSet:每个Node(或匹配节点)运行一个Pod,用于日志收集、监控Agent

18. port端口说明

  • port:集群内部访问Service的端口
  • nodePort:外部访问的端口(30000-32767)
  • targetPort:Pod的端口
  • containerPort:容器内部端口

19. HPA自动扩容

  • 基于CPU利用率(或自定义指标)自动伸缩Pod数量
  • 需要metrics-server提供指标数据
  • 命令:kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
  • 默认每30秒检测一次

20. Service类型

类型说明
ClusterIP集群内部虚拟IP(默认)
NodePort每个Node开放端口,外部可访问
LoadBalancer云平台负载均衡器
ExternalName外部域名别名
Headless无ClusterIP,直接返回Pod IP(StatefulSet用)

21. Service分发策略

  • RoundRobin:轮询(默认)
  • SessionAffinity:基于客户端IP会话保持

22. 几种IP

  • Node IP:Node物理网卡IP
  • Pod IP:Pod虚拟IP(容器网络)
  • Cluster IP:Service虚拟IP

23. 外部访问集群服务

  • NodePort:简单,端口管理麻烦,只支持四层
  • LoadBalancer:云平台,需额外费用
  • Ingress:七层转发,基于域名和URL路径,推荐

24. Ingress

  • API对象,定义请求转发规则(域名、URL路径→Service)
  • 需ingress-controller具体实现
  • 常用:ingress-nginx(官方维护)、Traefik、Kong

工作原理:

  1. ingress-controller与API Server交互,感知ingress规则变化
  2. 按规则生成nginx配置
  3. 写入ingress-controller Pod的nginx.conf
  4. reload生效

25. Scheduler调度过程

预选(Predicate): 过滤不满足条件的节点

  • PodFitsResources:资源是否足够
  • PodFitsHost:节点名是否匹配
  • PodFitsHostPorts:端口是否冲突
  • PodSelectorMatches:标签是否匹配
  • NoDiskConflict:卷是否冲突

优选(Priorities): 对通过的节点排序

  • LeastRequestedPriority:资源使用率低优先
  • BalancedResourceAllocation:CPU和内存使用率均衡优先
  • ImageLocalityPriority:已有镜像的节点优先

26. 安全机制

  • 基础设施隔离:容器与宿主机隔离
  • 最小权限原则
  • API Server认证(HTTPS/Token)和授权(RBAC)
  • Secret保护敏感数据
  • 准入控制(Admission Control)

27. 准入控制器

请求经过认证→授权→准入控制→操作对象。

常用插件:

  • NamespaceLifecycle:命名空间生命周期
  • LimitRanger:资源配额限制
  • ServiceAccount:自动添加SA
  • DefaultStorageClass:默认存储类
  • ResourceQuota:命名空间配额
  • NodeRestriction:节点最小权限

28. flannel和Calico区别

对比项FlannelCalico
方案Overlay(UDP/VxLAN)纯三层BGP
性能封包解包有损耗无Overlay,性能高
网络策略基础丰富(基于iptables)
适用简单环境大规模、需网络策略

Cilium: 基于eBPF/XDP,零拷贝内核态处理,性能可媲美DPDK。

29. 节点维护

kubectl drain node-1 --ignore-daemonsets --delete-local-data
# 维护完成后
kubectl uncordon node-1

30. 数据持久化方式

  • EmptyDir:临时存储,Pod删除即消失
  • HostPath:挂载宿主机目录
  • NFS:网络文件系统
  • PV/PVC:持久卷/持久卷声明,推荐

31. PV和PVC

  • PV(PersistentVolume):集群中已配置的存储资源,由管理员创建
  • PVC(PersistentVolumeClaim):用户对存储的请求,自动匹配PV

PV生命周期: Available → Bound → Released → Failed

完整流程: Provisioning(配置)→ Binding(绑定)→ Using(使用)→ Releasing(释放)→ Recycling(回收)

32. EFK在K8s中

  • Elasticsearch:存储查询
  • Fluentd:收集日志,DaemonSet方式部署在每个Node
  • Kibana:Web展示
  • Fluentd挂载/var/lib/docker/containers和/var/log

33. RBAC

  • 基于角色的访问控制
  • 可运行时调整,无需重启API Server
  • 核心对象:Role、ClusterRole、RoleBinding、ClusterRoleBinding

34. Secret

  • 保管密码、OAuth Tokens、SSH Keys等敏感数据
  • 三种使用方式:
    1. ServiceAccount自动使用
    2. 挂载到Pod中
    3. ImagePullSecrets拉取镜像

35. CNI

  • 容器网络插件化方案
  • 只关注创建容器时分配网络、销毁时删除网络
  • CNI Plugin:配置网络资源
  • IPAM Plugin:管理IP地址分配
  • 常用实现:flannel、Calico、Cilium

36. ETCD

  • 分布式KV存储,Raft一致性算法
  • 保存K8s集群所有数据
  • 奇数节点(3或5),半数以上存活即可
  • 需定期备份(etcdctl snapshot save)

十六、CI/CD与DevOps

1. 持续集成、持续交付、持续部署

  • 持续集成(CI):开发者频繁将代码集成到主干,自动化构建测试,及早发现问题
  • 持续交付(CD):在CI基础上,确保代码随时可安全部署到生产环境,人工确认发布
  • 持续部署(CD):在持续交付基础上,自动部署到生产环境,无需人工干预

2. CI/CD流程

  1. 代码提交(Git push)
  2. 触发构建(Webhook通知Jenkins)
  3. 拉取代码
  4. 编译构建(Maven/Gradle/npm)
  5. 自动化测试(单元测试、集成测试)
  6. 打包产物(jar/war/docker镜像)
  7. 部署到测试/生产环境
  8. 结果通知(邮件/钉钉)

3. Jenkins

  • 开源持续集成工具,Java开发
  • 支持多种SCM(Git、SVN)
  • 丰富的插件生态
  • 支持分布式构建(Master+Slave)
  • Pipeline as Code(Jenkinsfile)

Jenkins工作流程:

  1. 开发人员提交代码到Git仓库
  2. GitLab通过Webhook触发Jenkins
  3. Jenkins拉取代码,配合JDK/Maven编译、测试、打包
  4. Jenkins调用Ansible部署到目标服务器

4. Git和SVN区别

  • SVN:集中式版本控制,单一中央服务器,客户端只存最新文件
  • Git:分布式版本控制,每个客户端都是完整仓库,无中央服务器概念
  • Git支持离线工作、分支更轻量、性能更好

5. Git常用命令

git config --global user.name "name"     # 设置用户名
git config --global user.email "email"   # 设置邮箱
git init                                 # 初始化仓库
git clone url                            # 克隆仓库
git add .                                # 添加到暂存区
git commit -m "message"                  # 提交
git push                                 # 推送到远程
git pull                                 # 拉取远程
git status                               # 查看状态
git log                                  # 查看日志
git branch                               # 查看分支
git checkout -b dev                      # 创建并切换分支
git merge dev                            # 合并分支
git reset --hard HEAD^                   # 回退

6. GitLab和GitHub区别

  • GitHub:私有仓库需付费,开源项目首选
  • GitLab:可免费创建私有仓库,权限控制更细,适合企业内网搭建私服
  • GitLab-ce社区版免费,GitLab-ee企业版收费

7. 代码提交流程

  1. PM在GitLab创建任务,分配给开发
  2. 开发git clone拉取代码
  3. 创建开发分支(git checkout -b dev)
  4. 开发完成后git commit提交
  5. GitLab发起Merge Request
  6. PM审核代码,确认后合并到master
  7. 关闭issue

8. 公司上线流程

  1. 开发git push推送到GitLab
  2. GitLab触发Webhook通知Jenkins
  3. Jenkins通过GitLab插件拉取代码
  4. Jenkins调用Maven编译打包
  5. Jenkins调用Ansible部署到目标服务器
  6. 灰度发布(先部分节点,观察无误后全量)

9. 网站三种发布模式

  • 蓝绿发布:两套环境,蓝色运行当前版本,绿色部署新版本,测试通过后切流量
  • 灰度发布:按比例逐步切流量(10%→30%→50%→100%)
  • 滚动发布:逐个更新实例,不停机逐步替换

10. DevOps

  • 开发(Dev)和运维(Ops)团队协作的文化和实践
  • 通过CI/CD流水线自动化交付
  • 目标:缩短交付周期、提高质量、降低风险
  • 工具链:Git→Jenkins→Docker→K8s→Prometheus→ELK

11. 敏捷和DevOps区别

  • 敏捷:软件开发方法论,强调迭代、协作、响应变化
  • DevOps:开发和运维协作实践,强调自动化交付
  • 两者相辅相成:敏捷推动创新,DevOps管理交付

十七、自动化运维-Ansible

1. Ansible定义和优势

  • 基于Python开发的自动化运维工具
  • 无Agent,基于SSH通信
  • 幂等性(重复执行结果一致)
  • 配置简单,YAML语法
  • 丰富的模块生态

2. Ansible工作原理

  1. 管理端读取Inventory(主机清单)
  2. 通过SSH连接被管理端
  3. 将模块生成Python脚本,推送到被管理端
  4. 被管理端执行脚本,返回结果
  5. 管理端删除临时脚本

3. 配置文件优先级

$ANSIBLE_CONFIG > ./ansible.cfg > ~/.ansible.cfg > /etc/ansible/ansible.cfg

4. 常用模块

模块功能
command执行命令(不支持管道、重定向)
shell执行shell命令(支持管道)
cron定时任务
user用户管理
group组管理
copy复制文件
file文件管理(创建、删除、权限)
hostname修改主机名
ping连通性测试
yum包管理
service服务管理
script执行脚本
setup收集系统信息(facts)
template模板渲染(Jinja2)
yum_repositoryyum源配置

5. ad-hoc和playbook区别

  • ad-hoc:临时命令,一次性操作,适合简单任务ansible all -m ping ansible web -m shell -a "uptime"
  • playbook:YAML文件,可编排复杂任务,适合重复使用- hosts: web tasks: - name: install nginx yum: name=nginx state=present - name: start nginx service: name=nginx state=started enabled=yes

6. Playbook组成

  • hosts:目标主机
  • vars:变量
  • tasks:任务列表
  • handlers:处理器(被notify触发)
  • roles:角色

7. 变量

  • 全局变量:vars、vars_files、–extra-vars
  • 主机变量:host_vars/
  • 组变量:group_vars/
  • 主机清单变量:Inventory中定义
  • facts变量:setup模块收集的系统信息

8. 循环

- name: install packages
  yum: name={{ item }} state=present
  with_items:
    - nginx
    - mysql
    - redis

9. handler

tasks:
  - name: modify config
    template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
    notify: restart nginx

handlers:
  - name: restart nginx
    service: name=nginx state=restarted

handler只有被notify且任务实际改变时才执行,所有任务结束后执行。

10. Roles目录结构

roles/
  nginx/
    files/          # 静态文件
    templates/      # Jinja2模板
    tasks/          # 任务
    handlers/       # 处理器
    vars/           # 变量
    defaults/       # 默认变量(优先级低)
    meta/           # 元信息(依赖)

11. Ansible Vault

  • 加密敏感数据(密码、密钥)
  • ansible-vault create secret.yml 创建加密文件
  • ansible-vault edit secret.yml 编辑
  • playbook执行时加--ask-vault-pass

12. 错误处理

  • ignore_errors:忽略错误继续
  • failed_when:自定义失败条件
  • changed_when:自定义改变条件
  • block/rescue/always:异常处理(类似try/catch/finally)

十八、安全与堡垒机

1. 堡垒机定义和功能

堡垒机是在特定网络环境下,为保障网络和数据安全,运用技术手段监控和记录运维人员对服务器、网络设备、数据库等的操作行为,以便集中报警、及时处理及审计定责。

4A理念:

  • Authentication(认证)
  • Authorization(授权)
  • Account(账号)
  • Audit(审计)

2. 堡垒机功能

  • 集中管理、集中权限分配
  • 统一认证、集中审计
  • 数据安全、运维高效
  • 运维合规、风险管控
  • 文件传输(RDP/SFTP/FTP/SCP/RZ/SZ)
  • 细粒度控制(命令、传输)

3. 常见堡垒机产品

  • 收费:行云管家、纽盾堡垒机
  • 开源:Jumpserver

4. 堡垒机功能模块

  • 运维平台:RDP/VNC、SSH/Telnet、SFTP/FTP、数据库运维
  • 管理平台:三权分立、身份鉴别、主机管理、密码托管、电子工单
  • 自动化平台:自动改密、自动运维、自动收集、自动授权、自动备份
  • 控制平台:IP防火墙、命令防火墙、访问控制、会话阻断、运维审批
  • 审计平台:命令记录、文字记录、SQL记录、全文检索、审计报表

5. 身份认证方式

  • 本地认证(账号密码)
  • 远程认证(AD/LDAP/Radius)
  • 双因子认证(UsbKey、动态令牌、短信、手机APP)
  • 第三方认证(OAuth2.0、CAS)

6. 运维方式

  • B/S运维:浏览器
  • C/S运维:客户端(Xshell、CRT)
  • H5运维:网页直接打开远程桌面
  • 网关运维:SSH网关代理

7. 部署方式

  • 单机部署:旁路部署
  • HA高可用:主备+VIP
  • 异地同步:多数据中心配置同步
  • 集群部署:分布式,大量设备管理

8. Jumpserver

  • 全球首款完全开源堡垒机,GPL v2.0
  • Python/Django开发,Web 2.0
  • 分布式架构,支持多机房跨区域
  • 组件:Jumpserver(Core)、Coco(SSH/Web Terminal)、Luna(前端)、Guacamole(RDP)

9. Linux安全加固

见Linux系统基础章节”Linux系统优化”部分。

10. DDoS防护

  • 流量清洗(高防IP)
  • CDN加速
  • 防火墙限流
  • 云平台DDoS防护(阿里云高防IP)

十九、公有云

1. 阿里云四大件

  • ECS(云服务器):基本款,1核1G到32核64G,可升降配
  • RDS(云数据库):MySQL/PostgreSQL/SQL Server/MongoDB/Redis
  • SLB(负载均衡):流量分发,健康检查,抗DDoS
  • OSS(对象存储):海量非结构化数据存储(图片、视频)

2. 阿里云其他产品

  • CDN:内容分发网络,就近访问
  • VPC:专有网络,隔离的网络环境
  • 弹性伸缩:自动增减ECS实例
  • DDoS高防IP:抗DDoS攻击
  • 安骑士:主机安全(漏洞检测、病毒查杀)
  • 证书服务:SSL证书
  • 态势感知:安全威胁分析
  • 堡垒机:运维审计
  • 消息队列MQ:分布式消息中间件
  • 万网:域名、虚拟主机、企业邮箱、云解析DNS

3. ECS优势和组件

优势:

  • 无需自建机房
  • 分钟级交付,快速部署
  • 全球数据中心,BGP机房
  • 按需使用,弹性伸缩
  • 支持GPU/FPGA/裸金属
  • 内网访问其他云服务
  • 多重安全方案
  • 性能监控和主动运维
  • 标准API

组件:

  • 实例(CPU、内存、OS、网络、磁盘)
  • 镜像(OS+应用)
  • 块存储(云盘/本地盘)
  • 快照(备份恢复)
  • 安全组(虚拟防火墙)
  • 网络(VPC/经典网络)

4. RDS优势

  • 便宜易用,按需变配
  • 高性能(参数优化、SQL优化建议)
  • 高可用架构和容灾方案
  • 高安全性
  • 价格约ECS自建的1/3,自购服务器的1/10

5. VPC

  • 基于隧道技术的隔离虚拟网络
  • 每个VPC独立隧道号
  • 可自定义IP范围、网段、路由表、网关
  • 组件:交换机、网关、控制器
  • 应用场景:托管应用、跨可用区容灾、业务隔离、混合云

6. CDN

  • 将源站内容分发到边缘节点,用户就近获取
  • 关键概念:加速域名、CNAME记录、边缘节点、源站、回源、回源HOST、协议回源、过滤参数

7. SLB

  • 负载均衡实例 + 监听 + 后端服务器
  • 全冗余无单点,支持同城容灾
  • 抗DDoS攻击
  • 亿级并发连接,单实例千万级并发
  • 成本比传统硬件负载均衡低60%

8. 公有云和私有云区别

对比项公有云私有云
IT设施位置第三方数据中心企业内部
基础设施标准化、同构异构、定制化
商务模式按需付费,运营成本一次性投入,固定成本
控制程度租用,不管理底层完全拥有和控制
适用中小企业、弹性需求大型企业、数据安全要求高

二十、非技术面试题

1. 自我介绍

  • 基本信息(姓名、工作年限)
  • 技术栈和擅长领域
  • 项目经验(1-2个代表性项目)
  • 个人优势

2. 离职原因

  • 正面表述:寻求更好发展、技术挑战、职业规划
  • 避免负面:抱怨前公司、领导、同事

3. 对加班的看法

  • 运维岗位特性决定需要on-call,可接受合理加班
  • 注重效率,通过自动化减少重复性加班
  • 故障应急时义不容辞

4. 职业规划

  • 短期:熟悉业务,提升技术深度
  • 中期:在某一领域(云原生/DevOps/数据库)成为专家
  • 长期:技术架构师或技术管理方向

5. 入职后如何开展工作

  • 第一周:熟悉环境、文档、团队
  • 第一个月:了解业务架构、现有运维体系
  • 逐步:发现问题、优化改进、自动化建设

6. 期望薪资

  • 了解市场行情
  • 给出合理区间,留谈判空间
  • 可说”根据公司薪资体系和我的能力,期望在X-Y范围”

7. 你还有什么想问的

  • 团队规模和分工
  • 技术栈和架构
  • 运维流程和规范
  • 晋升机制和成长空间
  • (不要问工资、假期等HR问题,技术面问技术相关)

8. 运维工程师职责

  • 保障系统稳定运行
  • 部署发布、监控告警、故障处理
  • 性能优化、安全加固
  • 自动化建设、文档编写
  • 配合开发完成需求

9. 工作中最大的收获

  • 技术能力提升(具体技术点)
  • 解决问题的思路和方法
  • 沟通协作能力
  • 责任心和抗压能力

10. 找工作最关注什么

  • 技术成长空间
  • 团队氛围
  • 业务前景
  • 薪资待遇

本文档持续更新中,建议结合实际项目经验理解背诵,面试时灵活运用。

上一篇
下一篇