← 返回主页
案例 01
新服务器从零到生产就绪的标准化部署

背景描述

客户采购了 20 台 Dell R750xs 服务器(CentOS 7.9),要求在 2 天内完成全部服务器的系统安装、网络配置、安全加固和基础软件部署,确保可直接交付业务团队使用。

解决方案

编写 Kickstart 无人值守安装脚本 + Ansible 初始化 Playbook,实现从 PXE 网络启动到业务就绪的全自动化。批量安装耗时 4 小时完成全部 20 台。

技术要点

  • PXE + Kickstart 无人值守安装,统一分区方案(/boot 1G, / 100G, /data 剩余, swap 32G)
  • SELinux 配置为 permissive + 自定义策略模块,关闭不必要的系统服务(postfix, rpcbind 等 12 项)
  • 内核参数调优:TCP 缓冲区、文件句柄数(nofile 65535)、Swappiness=10
  • 安装基础包:chrony 时间同步、iotop/htop/sysstat 监控套件、jq/tree 运维工具
# 批量关闭无用服务 ansible all -m systemd -a "name={{ item }} state=stopped enabled=no" \ -e '{"item":["postfix","rpcbind","avahi-daemon","cups"]}' # 内核调优 cat >> /etc/sysctl.d/99-ops.conf << 'EOF' net.core.somaxconn = 65535 net.ipv4.tcp_max_syn_backlog = 8192 vm.swappiness = 10 fs.file-max = 655350 EOF sysctl -p /etc/sysctl.d/99-ops.conf
案例 02
生产服务器 SSH 安全加固与堡垒机对接

背景描述

某金融客户通过安全审计发现,大量生产服务器仍使用密码登录且 root 可直接 SSH,存在暴力破解风险。需在不停业务的前提下,完成 80+ 台服务器的 SSH 安全加固,并接入 JumpServer 堡垒机。

解决方案

分三批次灰度执行:先改 sshd_config 禁用 root 密码登录、启用密钥认证,再部署 JumpServer Agent,最后关闭 22 端口直接访问。每批次变更在凌晨窗口执行,变更前自动备份原配置。

技术要点

  • 禁用 root 密码登录,仅允许密钥 + 堡垒机跳板登录
  • 修改 SSH 默认端口为 22022,减少扫描器骚扰
  • 配置 fail2ban:3 次失败后封禁 IP 24 小时
  • JumpServer 资产管理 → 系统用户授权 → 会话录像审计
# sshd_config 加固配置 PermitRootLogin prohibit-password PasswordAuthentication no PubkeyAuthentication yes Port 22022 MaxAuthTries 3 ClientAliveInterval 300 ClientAliveCountMax 2 # fail2ban jail.local [sshd] enabled = true port = 22022 maxretry = 3 bantime = 86400 findtime = 600 # Ansible 批量推送 ansible prod -m copy -a "src=sshd_config dest=/etc/ssh/sshd_config" --become ansible prod -m service -a "name=sshd state=restarted" --become
案例 03
CentOS 7 EOL 迁移到 Rocky Linux 8

背景描述

CentOS 7 于 2024 年 6 月 EOL,客户 40+ 台生产服务器需在 3 个月内完成操作系统迁移至 Rocky Linux 8,涉及 MySQL、Nginx、Redis、Kafka 等十余个中间件。业务不能长时间中断。

解决方案

采用"新装 + 数据迁移"策略:新服务器安装 Rocky Linux 8,通过 rsync 增量同步数据,逐台切换 DNS/负载均衡流量。编写跨版本兼容的 Ansible Playbook。

技术要点

  • Rocky Linux 8 最小化安装,使用 LVM 灵活分区
  • rsync -avzP 增量同步 /data 目录,正式切割前 2 小时做最终同步
  • 中间件跨版本配置兼容:MySQL 5.7→8.0 sql_mode 兼容处理,Nginx 模块差异适配
  • 每台切换窗口 15 分钟,DNS TTL 提前降为 60s
# 增量同步数据(正式切割前执行) rsync -avzP --delete \ --exclude='*.log' --exclude='tmp/' \ root@old-server:/data/ /data/ # 验证数据一致性 diff <(ssh old-server "find /data -type f -exec md5sum {} \; | sort") \ <(find /data -type f -exec md5sum {} \; | sort) # DNF 安装基础包(Rocky Linux 8) dnf install -y epel-release dnf install -y vim htop iotop sysstat net-tools chrony
案例 04
服务器性能瓶颈诊断与内核调优

背景描述

某电商客户的 API 网关服务器(4C8G)在晚高峰时段 CPU iowait 飙升至 60%+,接口响应从 50ms 恶化到 3s 以上。客户怀疑需要扩容,经深入诊断发现是内核参数和磁盘调度策略问题。

解决方案

通过 perf、iostat、pidstat 系统诊断工具逐层定位瓶颈:磁盘 IO 调度器从 cfq 切换为 deadline,调整 vm.dirty_ratio 减少脏页冲刷峰值,优化后 iowait 降至 5% 以下。

技术要点

  • perf top 发现大量时间消耗在 blk_queue_bio,确认 IO 瓶颈
  • iostat -x 1 观察到 await 高达 80ms,磁盘调度器为 cfq(不适合 SSD)
  • 调整虚拟内存脏页参数降低突发写入压力
  • 优化文件系统挂载选项:noatime、nodiratime
# 诊断命令链 iostat -x 1 5 # 磁盘 IO 指标 pidstat -d 1 5 # 进程级 IO perf top -g # 内核热点函数 # 修改磁盘调度器(SSD 推荐 deadline 或 noop) echo deadline > /sys/block/sda/queue/scheduler # 持久化 grubby --update-kernel=ALL --args="elevator=deadline" # 脏页参数优化 cat >> /etc/sysctl.d/99-ops.conf << EOF vm.dirty_background_ratio = 5 vm.dirty_ratio = 10 vm.dirty_expire_centisecs = 1500 EOF sysctl -p /etc/sysctl.d/99-ops.conf # fstab 挂载优化 # /dev/mapper/vg_data-lv_data /data xfs defaults,noatime,nodiratime 0 2
案例 05
系统级安全审计与合规整改

背景描述

某政务云项目需通过等保三级测评,要求对所有 Linux 服务器进行安全基线检查与整改,涵盖身份鉴别、访问控制、安全审计、入侵防范等 6 大类共 84 个检查项。

解决方案

基于 CIS Benchmark 标准,编写自动化安全基线检查脚本,逐项扫描并生成整改报告。使用 Ansible 批量实施整改,确保 200+ 台服务器全部通过等保测评工具扫描。

技术要点

  • 密码策略:PAM 配置最小长度 12 位,复杂度要求大小写+数字+特殊字符
  • 账户锁定:连续 5 次失败锁定 30 分钟
  • 审计日志:auditd 记录所有 sudo 操作和关键文件变更
  • 入侵防范:限制 cron/at 仅授权用户使用
# 密码策略 /etc/security/pwquality.conf minlen = 12 minclass = 4 maxrepeat = 2 lcredit = -1 ucredit = -1 dcredit = -1 ocredit = -1 # 账户锁定 /etc/pam.d/system-auth auth required pam_faillock.so preauth silent deny=5 unlock_time=1800 auth required pam_faillock.so authfail deny=5 unlock_time=1800 # auditd 关键文件监控 auditctl -w /etc/passwd -p wa -k identity auditctl -w /etc/sudoers -p wa -k sudoers auditctl -w /var/log/audit/ -p wa -k auditlog # 限制 cron 使用 echo "root" > /etc/cron.allow chmod 600 /etc/cron.allow