1. RH134课程核心内容解析
作为红帽认证系统管理员(RHCSA)的进阶课程,RH134在Linux系统管理领域扮演着承上启下的关键角色。这门课程我前后反复研习过三遍,每次都能发现新的技术细节和操作技巧。不同于基础课程,RH134更注重培养学员解决实际生产环境问题的能力,特别是在无人值守安装、存储管理、系统调优等企业级场景中的应用。
课程最显著的特点是"做中学"的教学理念。每个技术点都配有对应的实验环节,比如在LVM实验部分就要求学员完成从物理卷创建到文件系统扩展的完整流程。这种设计使得抽象的概念变得具体可感,我在第一次练习时曾因漏掉pvcreate步骤导致后续操作全部失败——这种"刻骨铭心"的错误反而加深了对存储管理层次的理解。
2. 自动化部署与系统安装
2.1 Kickstart无人值守安装
企业级Linux部署的核心痛点在于规模化操作。手动安装几十台服务器不仅效率低下,还容易产生配置偏差。Kickstart方案通过预置的应答文件(ks.cfg)实现自动化安装,其配置文件结构主要包含:
bash复制# 系统语言和键盘设置
lang en_US
keyboard us
# 网络配置
network --device=eth0 --bootproto=dhcp
# 分区方案
part /boot --fstype="xfs" --size=500
part pv.01 --size=8192 --grow
volgroup vg_root pv.01
logvol / --fstype="xfs" --vgname=vg_root --size=4096
实际部署时最容易忽略的是%post安装后脚本部分。有次客户现场部署时,我忘记在脚本中添加chmod +x执行权限,导致自动化部署的监控agent全部未能启动。后来养成了在ks.cfg中添加如下校验机制的习惯:
bash复制%post
#!/bin/bash
# 服务状态检查函数
check_service() {
systemctl is-active --quiet $1 || echo "$1 service failed!" >> /root/install_errors.log
}
# 关键服务检查清单
check_service crond
check_service sshd
%end
2.2 镜像定制与部署优化
标准安装镜像往往包含不必要的软件包。通过lorax工具创建定制镜像时,需要特别注意依赖关系处理。建议在干净的环境中操作:
bash复制dnf install -y lorax createrepo mkisofs
mkdir -p /var/tmp/custom_iso
lorax -p "RHEL-Custom" -v 8.6 -r 8.6 \
--nomacboot --noupgrade \
-s https://mirror.example.com/rhel8/BaseOS \
-s https://mirror.example.com/rhel8/AppStream \
/var/tmp/custom_iso
常见问题排查表:
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 镜像构建失败 | 临时目录空间不足 | 确保/var/tmp有10GB+空间 |
| 启动时卡在dracut | 缺少驱动模块 | 在lorax命令添加--add-template=/usr/share/lorax/templates.d/99-generic/disk.tmpl |
| 无法识别kickstart文件 | 文件名或路径错误 | 确认isolinux.cfg中正确指定ks=cdrom:/ks.cfg |
3. 高级存储管理实战
3.1 LVM精细化操作
逻辑卷管理的核心优势在于动态调整能力,但实际扩容操作存在诸多陷阱。执行顺序必须严格遵循:
- 物理卷扩容(如果是云磁盘先扩展底层块设备)
- 扩展PV大小:
pvresize /dev/vdb1 - 扩展VG容量:
vgextend vg_data /dev/vdb2 - 扩展LV空间:
lvextend -L +10G /dev/vg_data/lv_www - 文件系统扩容:
xfs_growfs /mnt/www(ext4使用resize2fs)
曾遇到生产环境中的经典案例:某应用日志暴涨导致根分区空间告急。由于未预留PE空间,常规扩容无法进行。最终采用临时方案:
bash复制# 创建应急卷组
pvcreate /dev/vdc1
vgcreate vg_temp /dev/vdc1
lvcreate -n lv_temp -L 5G vg_temp
mkfs.xfs /dev/vg_temp/lv_temp
mount /dev/vg_temp/lv_temp /var/log/app
# 后续通过备份重组彻底解决
3.2 Stratis存储方案对比
新一代的Stratis存储管理简化了传统LVM的复杂性,但其适用场景需要仔细评估:
特性对比表:
| 特性 | LVM | Stratis |
|---|---|---|
| 快照功能 | 手动创建 | 自动集成 |
| 精简配置 | 需额外设置 | 原生支持 |
| 缓存机制 | 需配置cachepool | 内置智能缓存 |
| 元数据管理 | 手动维护 | 自动优化 |
| 文件系统支持 | 任意类型 | 仅XFS |
实际测试中发现Stratis在容器存储场景表现优异,创建卷仅需:
bash复制stratis pool create nvme_pool /dev/nvme0n1
stratis fs create nvme_pool container_vol
4. 系统调优与性能分析
4.1 tuned调优配置解析
默认的tuned配置往往需要根据业务特性调整。Web服务器推荐使用throughput-performance方案,但需要额外优化:
bash复制tuned-adm profile throughput-performance
# 自定义追加配置
cat > /etc/tuned/web-custom/tuned.conf <<EOF
[main]
include=throughput-performance
[sysctl]
net.ipv4.tcp_tw_reuse = 1
vm.swappiness = 10
EOF
关键参数调整原则:
vm.swappiness:数据库服务建议5-10,桌面环境可设30-60kernel.sched_migration_cost_ns:CPU密集型应用调高到5000000net.core.somaxconn:高并发服务至少设置2048
4.2 性能瓶颈定位方法
系统响应缓慢时,应按以下顺序排查:
uptime查看负载均值dstat -tcmnd --disk-util综合监控iostat -x 1定位磁盘IO问题perf top分析CPU热点
某次线上故障排查记录:
bash复制# 发现%sys异常偏高
$ mpstat -P ALL 1
Linux 5.4.17-2102.201.3.el8uek.x86_64 06/15/2023 _x86_64_ (16 CPU)
10:30:45 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
10:30:46 AM all 8.12 0.00 47.63 0.25 0.00 0.38 0.00 0.00 0.00 43.62
# 进一步追踪系统调用
$ perf top -s comm,dso
Samples: 64K of event 'cycles:ppp', 4000 Hz, Event count (approx.): 35559127636
Overhead Shared Object Symbol
42.18% [kernel] [k] _raw_spin_lock_irqsave
15.32% libc-2.28.so [.] __memset_avx2_unaligned_erms
最终定位到是某监控软件的频繁spin lock导致,调整采集间隔后恢复正常。
5. 安全加固与合规检查
5.1 OpenSCAP合规审计
自动化合规检查是RH134的重点内容。使用OpenSCAP进行CIS基准检测时,建议先生成定制化的检查方案:
bash复制oscap info /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml
# 生成定制化检查文件
oscap xccdf generate fix --profile xccdf_org.ssgproject.content_profile_cis \
/usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml > cis_remediation.sh
典型问题处理经验:
- 密码复杂度策略冲突:修改/etc/security/pwquality.conf后需同时更新PAM配置
- 日志文件权限问题:rsyslog生成的日志需设置0600权限,但需确保日志收集服务有读取权限
- 不必要的服务禁用:注意依赖关系,如禁用firewalld前需确认是否有其他防火墙方案
5.2 证书管理实战
企业证书管理常见误区包括:
- 私钥权限设置不当(必须600)
- 证书链不完整(需包含中间CA)
- CRL检查未配置
创建自签名证书的正确流程:
bash复制# 生成CA私钥(密码保护)
openssl genrsa -aes256 -out ca.key 4096
# 创建CA证书
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 \
-out ca.crt -subj "/CN=My Internal CA"
# 服务器证书请求
openssl req -newkey rsa:2048 -nodes -keyout server.key \
-out server.csr -subj "/CN=web.example.com"
# 使用CA签名
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
-out server.crt -days 825 -sha256 -extfile <(printf "subjectAltName=DNS:web.example.com")
6. 容器化与系统服务进阶
6.1 Podman核心操作
与传统Docker相比,Podman的无守护进程架构更适合企业环境。但网络配置存在差异:
bash复制# 创建自定义网络
podman network create --subnet 192.168.100.0/24 app_net
# 运行容器并指定IP
podman run -d --name web --network app_net --ip 192.168.100.10 nginx
# 生成systemd单元文件
podman generate systemd --new --name web > /etc/systemd/system/container-web.service
常见问题处理:
- 权限问题:使用
--privileged或精细化的--cap-add - 存储驱动选择:overlay在RHEL8需要
--storage-opt overlay.mount_program=/usr/bin/fuse-overlayfs - 用户命名空间:rootless模式需配置/etc/subuid和/etc/subgid
6.2 系统服务深度控制
systemd单元文件的高级应用包括:
- 依赖关系控制:
After=和Requires=的区别 - 资源限制:
MemoryMax=和CPUQuota= - 安全沙盒:
ProtectSystem=strict和PrivateTmp=yes
生产环境中的服务模板示例:
ini复制[Unit]
Description=API Service
After=network.target
Requires=postgresql.service
[Service]
Type=exec
User=appuser
Group=appuser
EnvironmentFile=/etc/sysconfig/api
ExecStartPre=/usr/bin/podman pull ${IMAGE}
ExecStart=/usr/bin/podman run --rm --name api \
-e DB_HOST=${DB_HOST} \
-v /data/config:/config:Z \
${IMAGE}
Restart=on-failure
RestartSec=30s
TimeoutStopSec=60s
MemoryMax=2G
CPUQuota=80%
[Install]
WantedBy=multi-user.target
7. 网络配置与故障排除
7.1 nmcli高级用法
NetworkManager的CLI工具在批量配置时极为高效。绑定网卡配置示例:
bash复制nmcli con add type bond con-name bond0 ifname bond0 \
mode active-backup miimon 100
nmcli con add type bond-slave ifname eth0 master bond0
nmcli con add type bond-slave ifname eth1 master bond0
nmcli con mod bond0 ipv4.addresses '192.168.1.100/24'
nmcli con mod bond0 ipv4.gateway '192.168.1.1'
nmcli con mod bond0 ipv4.dns '8.8.8.8'
nmcli con up bond0
VLAN配置的注意事项:
- 确保交换机端口已配置为trunk模式
- 接口命名规范建议使用
eth0.100格式 - 使用
nmcli con show --active验证配置
7.2 防火墙策略优化
firewalld的富规则(rich rules)提供更精细的控制:
bash复制# 允许特定IP访问SSH
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" \
source address="192.168.1.50/32" service name="ssh" accept'
# 限制ICMP速率
firewall-cmd --permanent --add-rich-rule='rule protocol value="icmp" limit value="5/s" accept'
# 端口转发配置
firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=8080
调试技巧:
journalctl -u firewalld -f实时查看防火墙日志firewall-cmd --list-all-zones检查完整配置firewall-cmd --direct --get-all-rules查看直接规则
8. 自动化运维与Ansible基础
8.1 临时命令执行模式
ad-hoc模式适合快速批量操作,常用模块示例:
bash复制# 软件包管理
ansible webservers -m yum -a "name=httpd state=latest"
# 文件分发
ansible dbservers -m copy -a "src=/tmp/my.cnf dest=/etc/my.cnf owner=root group=root mode=0644"
# 服务管理
ansible all -m systemd -a "name=firewalld enabled=yes state=started"
性能优化参数:
-f 10设置并发进程数--ssh-common-args='-o ControlMaster=auto -o ControlPersist=60s'复用SSH连接-T 30设置超时时间(秒)
8.2 Playbook编写规范
规范的playbook结构示例:
yaml复制---
- name: Configure web servers
hosts: webservers
become: yes
vars:
http_port: 8080
max_clients: 200
tasks:
- name: Install httpd
yum:
name: httpd
state: latest
- name: Configure httpd
template:
src: templates/httpd.conf.j2
dest: /etc/httpd/conf/httpd.conf
notify: restart httpd
handlers:
- name: restart httpd
systemd:
name: httpd
state: restarted
最佳实践建议:
- 使用
ansible-lint检查语法 - 敏感变量存放在
vars_prompt或Ansible Vault中 - 为每个role添加
meta/main.yml定义依赖关系 - 使用
tags标记关键任务便于选择性执行
9. 日志集中化管理方案
9.1 rsyslog高级配置
多日志源处理配置示例:
bash复制# /etc/rsyslog.conf 添加:
module(load="imfile" PollingInterval="10")
# 监控特定应用日志
input(type="imfile"
File="/var/log/app/error.log"
Tag="app_error"
Severity="error"
Facility="local7")
# 远程日志转发规则
if $fromhost-ip startswith '192.168.1' then {
action(type="omfwd" Target="logserver.example.com" Port="514" Protocol="tcp")
}
性能调优参数:
$WorkDirectory指定工作目录避免内存溢出$ActionQueueSize增大队列缓冲$ActionResumeRetryCount设置重试次数
9.2 journalctl日志分析
systemd日志的灵活查询方式:
bash复制# 按时间范围筛选
journalctl --since "2023-06-01" --until "2023-06-15 15:00"
# 显示内核日志并跟踪新内容
journalctl -k -f
# 以JSON格式输出特定服务日志
journalctl -u nginx -o json-pretty
# 显示磁盘IO详情
journalctl -u systemd-io --no-pager
实用技巧:
--vacuum-size=100M限制日志大小-o verbose显示完整字段--disk-usage检查日志占用空间- 添加
Storage=persistent确保重启后日志保留
10. 内核参数调优实战
10.1 网络栈优化
高并发场景下的关键参数:
bash复制# /etc/sysctl.d/99-network.conf
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 1024 65000
参数调整注意事项:
tcp_tw_recycle在NAT环境下易导致问题(RHEL8已移除)net.ipv4.tcp_mem需要根据物理内存计算net.core.netdev_max_backlog对10G+网卡需调大
10.2 虚拟内存管理
数据库服务器的典型配置:
bash复制# /etc/sysctl.d/99-memory.conf
vm.swappiness = 5
vm.dirty_ratio = 40
vm.dirty_background_ratio = 10
vm.overcommit_memory = 1
vm.overcommit_ratio = 95
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
调优原则:
swappiness:物理内存充足时设为1-10,避免swapdirty_*:写密集型应用适当增大比率shmmax:需大于Oracle等数据库的SGA需求- 使用
vmstat 1监控si/so值判断swap是否活跃
11. 备份与恢复策略
11.1 ReaR系统救援
灾难恢复工具配置示例:
bash复制# /etc/rear/local.conf
OUTPUT=ISO
BACKUP=NETFS
BACKUP_URL=nfs://backup.example.com/REAR
NETFS_KEEP_OLD_BACKUP_COPY=yes
BACKUP_PROG_EXCLUDE=("${BACKUP_PROG_EXCLUDE[@]}" '/tmp/*' '/var/tmp/*')
实际恢复流程注意事项:
- 测试环境验证备份可用性
- 确保驱动兼容性(特别是RAID卡)
- 网络恢复阶段手动干预点确认
- 恢复后检查fstab和网络配置
11.2 差异化备份方案
结合rsync的增量备份脚本:
bash复制#!/bin/bash
BACKUP_DIR="/backup/$(date +%Y%m%d)"
PREV_DAY=$(date -d "1 day ago" +%Y%m%d)
[ -d "/backup/$PREV_DAY" ] && LINK_DEST="--link-dest=/backup/$PREV_DAY"
mkdir -p $BACKUP_DIR
rsync -aAXhv --delete $LINK_DEST \
--exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} \
/ $BACKUP_DIR/
# 保留最近7天备份
find /backup -type d -mtime +7 -exec rm -rf {} \;
关键检查点:
- 备份完整性验证(checksum比对)
- 恢复速度测试(特别是全量恢复)
- 监控备份窗口时间
- 定期演练恢复流程
12. 多系统引导管理
12.1 GRUB2深度配置
自定义引导菜单示例:
bash复制# /etc/grub.d/40_custom
menuentry 'RHEL8 (Debug Mode)' {
set root='hd0,msdos1'
linux16 /vmlinuz-4.18.0-348.el8.x86_64 root=/dev/mapper/rhel-root ro crashkernel=auto rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap systemd.unit=rescue.target
initrd16 /initramfs-4.18.0-348.el8.x86_64.img
}
故障修复技巧:
- 光盘引导进入救援模式后:
bash复制chroot /mnt/sysimage grub2-install /dev/sda grub2-mkconfig -o /boot/grub2/grub.cfg - 忘记root密码时在启动参数添加
rd.break - 内核崩溃收集配置
crashkernel=auto
12.2 安全启动管理
UEFI环境下的密钥处理:
bash复制# 查看当前密钥
mokutil --list-enrolled
# 导入新密钥
mokutil --import /path/to/key.der
# 签名内核模块
kmodsign sha512 /etc/keys/private.key /etc/keys/public.der $(modinfo -n module_name)
常见问题处理:
- 双系统时间不一致:
timedatectl set-local-rtc 1 - NVIDIA驱动签名:需先禁用Secure Boot或使用预签名驱动
- 引导顺序调整:
efibootmgr -o 0000,0001,0002
13. 虚拟化环境适配
13.1 KVM性能优化
虚拟机XML配置关键参数:
xml复制<cpu mode='host-passthrough' check='none'>
<topology sockets='2' cores='4' threads='2'/>
</cpu>
<memoryBacking>
<hugepages/>
</memoryBacking>
<devices>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' cache='none' io='native'/>
<source file='/var/lib/libvirt/images/vm1.qcow2'/>
</disk>
<interface type='bridge'>
<driver name='vhost' queues='4'/>
</interface>
</devices>
性能对比测试数据:
| 配置项 | 默认值 | 优化值 | 性能提升 |
|---|---|---|---|
| CPU模式 | qemu64 | host-passthrough | 15-20% |
| 磁盘缓存 | writeback | none | 30% IOPS提升 |
| 网络队列 | 1 | 4 | 网络吞吐量翻倍 |
| 内存分配 | 普通页 | 大页 | 减少TLB miss 40% |
13.2 虚拟机模板管理
创建标准化模板的流程:
bash复制# 清理现有系统
fstrim -av
dnf clean all
rm -rf /var/cache/dnf/*
# 生成新SSH密钥
rm -f /etc/ssh/ssh_host_*
ssh-keygen -A
# 清理日志和临时文件
journalctl --vacuum-time=1s
rm -rf /var/log/*-???????? /var/log/*.gz
# 转换为模板
virt-sysprep -d vm-template --operations \
customize,ssh-hostkeys,logfiles,package-manager-cache
克隆部署时的网络配置技巧:
bash复制# 使用virt-customize注入配置
virt-customize -a vm-clone.qcow2 \
--hostname newvm01 \
--run-command 'nmcli con mod "System eth0" ipv4.addresses 192.168.1.100/24' \
--ssh-inject root:file:/root/.ssh/id_rsa.pub
14. 故障诊断工具箱
14.1 系统救援模式实战
紧急恢复的典型场景操作:
- 从安装介质启动选择"Troubleshooting"
- 挂载原有系统:
bash复制mkdir /mnt/sysroot mount /dev/mapper/rhel-root /mnt/sysroot mount /dev/sda1 /mnt/sysroot/boot mount --bind /proc /mnt/sysroot/proc mount --bind /dev /mnt/sysroot/dev mount --bind /sys /mnt/sysroot/sys - chroot环境操作:
bash复制chroot /mnt/sysroot passwd root systemctl enable --now sshd
14.2 性能诊断工具集
常用工具速查表:
| 工具 | 用途 | 关键参数 |
|---|---|---|
| strace | 系统调用跟踪 | -p PID -ff -ttT -o trace.log |
| ltrace | 库函数跟踪 | -S -n 2 -o ltrace.log |
| tcpdump | 网络包分析 | -i eth0 -w capture.pcap port 80 |
| bpftrace | 内核级追踪 | -e 'tracepoint:syscalls:sys_enter_* { @[probe] = count(); }' |
| perf | 性能分析 | stat -a sleep 10 / record -g -p PID |
内存泄漏诊断示例:
bash复制# 监控进程内存增长
watch -n 1 'ps -eo pid,comm,rss | grep app_process'
# 生成内存快照对比
valgrind --leak-check=full --show-leak-kinds=all ./app
# 内核内存分析
echo 1 > /proc/sys/vm/drop_caches
grep -i slab /proc/meminfo
15. 认证考试准备建议
15.1 实验环境搭建
推荐使用以下自动化脚本创建练习环境:
bash复制#!/bin/bash
# 创建练习用LV
lvcreate -n lv_practice -L 5G vg_data
mkfs.xfs /dev/vg_data/lv_practice
mkdir /practice
mount /dev/vg_data/lv_practice /practice
# 设置ACL权限
setfacl -m u:user1:rwx /practice
setfacl -m g:group1:r-x /practice
# 创建练习用户
for i in {1..5}; do
useradd -G wheel,group1 user$i
echo "P@ssw0rd$i" | passwd --stdin user$i
done
# 配置sudo权限
echo "%wheel ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/wheel
15.2 考试时间管理
RH134考试典型时间分配建议:
| 任务类型 | 建议时间 | 技巧 |
|---|---|---|
| 系统安装 | 15分钟 | 提前测试kickstart文件 |
| 存储管理 | 25分钟 | 先确认PV/VG空间再操作 |
| 网络配置 | 20分钟 | 使用nmcli高效配置 |
| 安全设置 | 15分钟 | 记住关键文件位置 |
| 故障排除 | 30分钟 | 从日志和systemctl入手 |
| 检查验证 | 15分钟 | 全面测试各项功能 |
重点复习清单:
- 密码策略修改(/etc/security/pwquality.conf)
- cron作业创建规范
- SELinux上下文修复(restorecon/semanage/chcon)
- 防火墙富规则语法
- Podman存储卷管理
- 系统启动过程排错