ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

系统运维工程师笔试攻略:生产环境从零搭建与维护完整思路

系统运维工程师笔试攻略:生产环境从零搭建与维护完整思路 每年校招季我都有个保留节目帮关系好的学弟学妹看笔试题。前两天一个小伙子发来一套“系统运维工程师”的笔试套题其中有一道开放性大题问的是“如何在生产环境从零搭建一个系统并做好后续维护”。我看了下这类题目本身不算复杂但特别能反映一个人的运维基本功——很多简历上写着“熟悉Linux”的同学看到这种题就开始发懵因为平时都是对着教程一步步敲命令真要他独立设计一套交付方案脑子里是没有框架的。这篇文章我就以这套笔试为引子聊聊系统运维工程师岗位的考察逻辑以及生产环境下从零搭建系统、做好后续维护的完整思路。不管你是正在准备校园招聘笔试的应届生还是刚入职做基础运维的初级工程师这篇内容应该都能用得上。我尽量把笔试题背后的考察点、实际操作的细节、以及那些踩过坑才知道的注意事项都讲透。1. 笔试题目背后的真实考察逻辑不只是问你命令怎么敲1.1 一道“从零搭建系统”的题面试官到底在看什么笔试和面试不同面试可以靠沟通灵活应变笔试只能用答案说话。系统运维工程师的笔试题表面上考的是Linux命令、网络配置、服务部署实际上考的是一个新人有没有“从需求到交付”的闭环思维。比如“从零搭建一个系统”这道题如果只答“装CentOS、配IP、装MySQL、启动完事”那基本就是送命答案。面试官想看的是这几个层次你有没有容量规划意识。给一台服务器先想跑什么业务、并发多大、数据量多少再决定硬件和系统配置而不是拿到机器就装系统。你有没有风险意识。RAID怎么选、分区怎么分、swap给多大、是否做LVM背后都是对数据安全和未来扩展的判断。你有没有可维护性意识。装完系统之后监控、日志轮转、备份、安全加固、日常巡检这些后续维护工作才是运维工程师工作的常态。换句话说面试官要的是一个“能独立负责一套系统”的人而不是一个只会执行命令的操作员。1.2 你以为的“装系统”和面试官眼中的“搭建系统”很多在校生觉得运维不就是装个操作系统吗我VMware里装过七八遍了闭着眼都会。但生产环境和虚拟机完全是两码事。虚拟机里装系统装坏了快照回滚网络随便配磁盘随便分丢了数据也无所谓。生产环境下你面对的是真实业务装系统之前要考虑硬件兼容性RAID卡驱动能不能识别多块磁盘要承担什么角色业务数据盘和数据盘怎么隔离系统和备份放哪里。装完之后还要做基础优化、安全设置、接入监控这些环节少一个将来都可能变成一个事故。我在笔试批改中最常看到的扣分点就是答题时只写了“安装CentOS 7配置网络安装Nginx/MySQL”后面什么都没有了。这暴露出的问题是答题人对生产环境的基本认知还没有建立。1.3 一套试卷里常见的题型分布和准备方向校园招聘笔试里系统运维工程师的卷子一般分几块选择题Linux常用命令、系统基础、网络基础比如top命令输出里哪个字段代表CPU使用率crontab里五个星号的含义子网掩码计算等。这些靠刷题和平时积累就能过关。简答题常考TCP三次握手的过程、Linux启动流程、DNS解析过程、软链接硬链接区别之类属于必须背熟的基础。实操/设计题也就是今天要重点说的“从零搭建系统”这类题目考察综合设计和排错能力。准备这类笔试光背命令不够建议多动手做几遍完整的搭建实验从裸机或新开的云主机开始装系统、配网络、调内核参数、部署一个Web应用加数据库、接上监控、写一个备份脚本。完整走两遍笔下自然有东西。2. 从零搭建一套生产系统的完整设计思路2.1 需求梳理与容量规划先想清楚业务再动手我要强调一件事无论笔试还是实际工作拿到一台服务器第一件事绝对不是装系统而是搞清楚这机器要干什么。是前端Web后端API还是MySQL数据库不同角色的服务器硬件选型、系统配置、优化方向完全不一样。以一道典型的笔试题为例假设业务是一套小型电商系统预计日PV五十万数据库用MySQL需要两台物理服务器搭建基础环境。每台服务器配置是两颗10核CPU、128G内存、2块600G SAS盘加2块480G SSD盘要求设计一个从零到可交付生产的方案。这时候你的答题思路应该是先分角色一台跑NginxTomcat或PHP-FPM另一台跑MySQL。再定存储方案Web服务器用两块SAS盘做RAID1装系统并存放Web代码两块SSD做RAID1放缓存或临时目录数据库服务器同样两块SAS做RAID1装系统两块SSD做RAID1放数据库数据文件。定操作系统生产环境推荐用相对稳定的发行版比如CentOS 7系列或对应的长期支持版本不要用最新版本当小白鼠。问题来了为什么分区要单独划分RAID级别怎么选这就是考察点。笔答题时你要把这些逻辑写出来而不是只给一个结论。2.2 分区方案设计LVM不是万能药规范才是分区方案是个经典考题。基础答案是“/boot、/、/home、/data分盘”进阶答案是解释为什么这么分。笔试里能说出“业务数据和系统盘分离防止日志或数据把系统盘写满拖垮整个服务器”这个答案的层次就上来了。以数据库服务器为例我通常按这个思路分/boot1G系统启动专用不用太大。/40G-60G放系统目录和软件安装建议用LVM方便后期扩容。swap如果内存128G可以给16G-32G具体看业务。我习惯按内存的1/4到1/2设置但内存很大的机器swap可以适当调小。/data剩余所有空间用于挂载业务数据盘目录MySQL数据文件、备份文件都放在这里。为什么业务数据要单独放/data而不是放默认的/var/lib/mysql因为系统盘一旦被日志灌满或者需要重装系统数据盘的独立管理能让你少很多麻烦。数据库数据放单独分区将来做快照、扩容、迁移都方便。这里就体现出“可维护性”的考量。还有一个细节如果使用LVM/和/data都可以作为独立VG或LV。但要注意LVM的快照功能对MySQL这种数据量大且写频繁的场景并不友好笔试时提到“使用LVM便于后期扩容”没问题但别把快照说得过于万能。2.3 系统安装完成后的标准初始化操作系统装完生产环境的初始化有一串固定动作这部分笔试时也可以按步骤写。我按实际工作顺序列一下设置主机名hostnamectl set-hostname web01或db01主机名规范对于后续监控和日志排查非常重要。配置静态IP修改网卡配置文件或使用nmcli命令确保服务器重启后IP不漂移。生产环境用DHCP是很危险的事一旦IP变了监控、SSH全部失联。配置DNS和hosts内网DNS、云上DNS按环境来hosts里加上集群各节点之间的映射避免服务间调用的DNS解析故障。配置软件源替换为国内镜像源配好epel源保证yum安装软件稳定快速。同步时间安装chrony并配置NTP服务器时间偏差过大会引发数据库、日志、证书校验等一系列诡异问题。关闭或配置SELinux生产环境除非有强制安全需求多数时候我建议直接关闭SELinux或者设置为宽松模式避免SELinux拦截Nginx访问文件、MySQL写数据这类问题。笔试答题时建议说“根据企业安全策略决定个人在普通Web场景选择关闭”让面试官觉得你有安全意识。配置防火墙不要直接一上来就systemctl stop firewalld了事。生产环境可以用firewalld按需放行端口比如Nginx放行80/443SSH放行自定义端口。最小化放行是安全底线笔试里特别能加分。2.4 内核参数和系统资源限制优化这一步是区分“会装系统”和“会做运维”的分水岭。生产环境特别是数据库服务器内核参数不调跑一段时间就会出现各种莫名其妙的问题。我最常调整的参数包括vm.swappiness默认60对数据库服务器我会改成10甚至更低减少swap使用优先用内存对普通Web服务器可以默认或调到30。笔试时能说出这个参数的意思和修改理由已经能超过一半人。net.core.somaxconn提高TCP连接队列长度从默认128改成1024或更大高并发下避免连接被丢弃。net.ipv4.tcp_tw_reuse开启TIME-WAIT复用配合tcp_timestamps高并发短连接场景下能显著减少端口被占用的问题。fs.file-max和ulimit系统对文件句柄数的限制非常重要。数据库高并发下“too many open files”是最常见故障之一。我一般把/etc/security/limits.conf里的nofile设为65535或更高同时确认systemd服务文件里加LimitNOFILE。关闭透明大页THPMySQL等数据库场景建议关闭透明大页会导致内存分配延迟波动写多读多的业务感受明显。这是笔试里的加分项很多非数据库方向的运维都容易忽略。磁盘IO调度器SSD用none或noop机械盘用deadline或mq-deadline。比如数据库SSD盘设置IO调度器为none减少IO延迟。这些参数调整不是背下来就完了笔试时建议写清楚“为什么要调、调到多少、什么场景用”面试官一眼就能看出你是背答案还是真做过。3. 后续维护才是真正的重头戏稳定运行靠的是体系3.1 监控系统建设没有监控的服务器等于睁眼瞎笔试考“做好后续维护”如果只写“我会定期登录看看”那还不够。生产环境维护一个系统的第一要务是建立监控。监控的核心目标是在用户发现故障之前你先发现故障。我建议的监控体系分三层主机层CPU、内存、磁盘使用率、inode使用率、负载、网络流量。磁盘和inode满是最容易忽视的告警项。应用层关键进程是否存活、端口是否监听、Nginx的活跃连接数、MySQL的QPS/慢查询数、Java应用GC情况和线程数。日志层系统日志/var/log/messages、业务日志Nginx access/error log、应用日志的收集与告警。具体工具上中小公司现在比较流行的组合是PrometheusGrafanaAlertmanager配合node_exporter采集主机指标。这些工具在笔试时提出来并简单说明“每个node_exporter暴露9100端口Prometheus拉取时序数据Grafana做展示Alertmanager负责告警”就能展示出你有实战认知。但我要提醒一点监控工具选型只是表面真正难的是报警阈值的制定和报警路由。阈值设太紧天天半夜告警同事会崩溃阈值设太松磁盘满了还没人收到消息那这监控等于白搭。我的经验是从保守开始逐步调整先保证“该收到的一定能收到”再减少无效告警。3.2 日志管理不轮转的日志是磁盘杀手后续维护过程中日志文件增长是磁盘空间耗尽的第一大元凶。Nginx access log在高流量下一天增长几个GB是很正常的事如果不做轮转两周后/分区就会爆掉。系统自带的logrotate一般会覆盖/var/log下的日志但业务日志一定要自己配置。我举个例子Nginx日志轮转配置/usr/local/nginx/logs/*.log { daily rotate 30 copytruncate compress dateext missingok notifempty create 644 nginx nginx }这段配置的意思日志每天切割一次保留30份切割时用copytruncate方式复制后清空原文件避免Nginx进程需要reload才能继续写日志旧日志按天归档并压缩。特别是copytruncate这个参数很多新手容易忽略日志轮转后Nginx不reload就丢日志。笔试时如果你能主动提到“我会用logrotate做日志轮转并配置切割策略”这属于实打实的加分回答。另外进阶一些的思路是把日志集中采集到ES或者通过Loki采集方便做链路追踪和错误分析。但笔试题里点到即可不用展开太深。3.3 安全加固清单安全不是部署完才做的事安全加固是后续维护里最容易偷懒的环节也是笔试简答题高频区。笔试中如果涉及安全题目别只写“改个密码就行”。我给出生产环境常用的最小加固清单SSH加固禁止root直接登录、使用密钥认证、修改SSH默认端口比如22222、限制允许登录的用户。这是最基础也最有效的手段。防火墙最小化只放行业务需要的端口管理端口按来源IP做白名单。用户与权限控制运维人员使用普通用户登录通过sudo提权执行管理命令并且按需分配权限不要给所有运维开root。系统补丁和漏洞修复关注安全公告重要补丁在维护窗口统一更新。定时任务审计检查/etc/cron*和/var/spool/cron/下有没有异常任务防止被植入后门。文件和目录权限重要的配置文件如/etc/my.cnf、/etc/shadow权限要收紧不要图省事chmod 777。笔试答题时如果能补充一句“安全加固需要根据业务妥协平衡比如修改SSH端口会影响自动化批量管理工具所以要提前评估”能体现你的工程化思维比报菜名式列一堆命令强得多。3.4 备份与容灾平时不测试的备份等于没备份生产维护体系中备份这件事技术含量不是最高的但地位极其重要。笔试答题时只写“写个脚本每天凌晨用crontab备份”那基本拿不到分。合格的回答要包含三要素备份策略、恢复演练、异地冗余。备份策略上我建议区分数据和配置数据备份MySQL用mysqldump做逻辑备份每天全量加上binlog增量对大库可以先用XtraBackup做物理备份。Web代码可以用rsync同步到备份服务器或者从Git仓库直接部署代码本身不是备份难点。配置文件备份个人经验是所有改过的系统配置都放到一个受控目录比如/etc下用git或etcd管理每次变更留记录。挂一次配置的经验告诉我没有版本管理的配置变更等于赌博。恢复演练是很多人忽略的点。备份文件存在那不代表能恢复。我吃过一次亏备份脚本跑了大半年等真需要恢复时发现备份文件是0字节。从那以后我给自己定了个规矩至少每个季度做一次恢复演练专门在测试环境把备份数据完整恢复一遍确认数据可用、时间可控。笔试时能写一句“备份体系必须包含定期恢复演练否则备份没有实际意义”这个答案立刻就有层次了。4. 笔试答题的坑与生产实战排错方法4.1 笔试中最容易被扣分的表达方式结合我带人的经验笔试作答里常见的丢分点有这几类只说结论不说理由。比如“分区选/data”但没有写为什么要分开。面试官想看到的是你的决策过程。只写操作不写验证。装完系统、配完服务没写怎么确认成功。比如配完Nginx连curl -I查看状态码这种最基本的验证都不提。方案里只有技术没有业务。比如提到数据库就只说安装MySQL不涉及业务量级、数据量大小对参数选型的影响。备份方案没有恢复逻辑。写了“crontab每天备份”但恢复流程、恢复时间、是否做过验证一概没有。我建议答题时用“目标-手段-验证”三段式写每一个环节。比如写系统初始化先说目标是确保稳定性再列手段最后写“配置完成后用ss -lntp查看端口监听状态、用timedatectl确认时间同步”之类的验证方式。这套思路放在笔试里会显得你逻辑闭环。4.2 生产环境上线后最常见的几个事故现场维护工作做久了你会发现日常故障有一半以上是重复的。我在实际工作里遇到过的高频故障按频率排磁盘分区写满。最常见原因不外乎日志没轮转、备份文件堆积、core文件没清理。处理思路是先用df -h和du -sh /*定位大目录再判断哪些可以清理。注意inode同样会满df -i也要看。防火墙或安全组规则挡掉端口导致服务“看起来起来了但外面连不上”。处理优先级是先确认进程在跑、端口在听再看本地防火墙再看云安全组/物理防火墙。教一个新人的口诀先看“听没听”再看“放没放”。配置文件改错了忘了备份。比如改了Nginx配置然后nginx -t报错但原配置已经被覆盖无法回滚。这就是为什么我强调改配置前必须复制出.bak文件或者纳入版本管理。依赖或软件源问题导致安装失败。比如用yum装包提示依赖冲突折腾半天发现是源配置不对或者一个同名包版本太旧。这类问题用“清理缓存更换源逐个解决依赖”基本能解。时钟不同步引发连锁故障。数据库主从延迟、日志时间错乱、HTTPS证书校验失败都可能是因为某台服务器的时间偏了。遇到这些怪问题先date看一眼时钟往往有惊喜。把这些故障在多写几遍你会发现运维工作没有太多天才式的时刻比的都是谁基本功扎实、谁流程更规范。4.3 关于笔试和实际工作我给新人几条实在的建议说得有点远了回到笔试这个话题。每年校招都有人问我系统运维工程师到底要准备到什么程度才敢去投简历。我的意见是不一定非要精通Ceph、K8s这种偏底层的技术但基础的那一亩三分地一定要扎实。具体来说Linux的基础命令、启动流程、权限体系、网络基础、至少一种web服务Nginx/Apache和一种数据库MySQL/PostgreSQL的部署调优这是硬底子。在这之上会一门脚本语言Shell或Python理解监控和备份体系是加分项。把这些内容完整过一遍笔试前再拿几套真题掐着时间模拟练手通过的把握会大很多。我个人还有一个小习惯想分享平时把排查过的故障、看过的文章、改过的配置都记录下来用的时候能快速检索。笔试前翻一翻很多答题素材都是现成的远比临时背书来得扎实。系统运维工程师干到最后拼的不是谁敲命令快而是谁的体系更完整、谁的坑踩得更少、谁能把不确定性变成确定性。这套思路无论是笔试答题还是日后工作都值得贯彻下去。
返回列表