活动公告

系统通知
05-18 21:22
系统通知
通知:本站资源由网友上传分享,如有违规等问题请到版务模块进行投诉,资源失效请在帖子内回复要求补档,会尽快处理!
10-23 09:31

Red Hat Enterprise Linux高级配置实例企业服务器性能优化安全加固网络配置与故障排除详解系统管理员实战指南

SunJu_FaceMall

3万

主题

2860

科技点

3万

积分

白金月票

碾压王

积分
32872

塔罗立华奏

<font color=白金月票" /> 发表于 2025-9-10 23:40:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1. Red Hat Enterprise Linux系统基础与高级配置

Red Hat Enterprise Linux (RHEL) 是全球领先的企业级Linux发行版,广泛应用于企业服务器环境。作为系统管理员,掌握RHEL的高级配置对于确保服务器稳定运行至关重要。

1.1 系统安装与初始化配置

RHEL的安装可以通过多种方式进行,包括传统DVD安装、网络安装(PXE)和自动化安装(Kickstart)。

Kickstart是一种自动化安装方法,可以大大简化多台服务器的部署过程。以下是一个基本的Kickstart配置文件示例:
  1. #version=RHEL8
  2. install
  3. cdrom
  4. lang en_US.UTF-8
  5. keyboard us
  6. network --bootproto=dhcp --device=eth0 --onboot=on
  7. rootpw --iscrypted $6$longhashedpasswordstring
  8. firewall --enabled --ssh
  9. authconfig --enableshadow --passalgo=sha512
  10. selinux --enforcing
  11. timezone --utc America/New_York
  12. bootloader --location=mbr --drive-name=sda
  13. clearpart --all --initlabel
  14. part /boot --fstype=xfs --size=500
  15. part pv.01 --size=1 --grow
  16. volgroup vg_root pv.01
  17. logvol / --fstype=xfs --name=lv_root --vgname=vg_root --size=1 --grow
  18. reboot
  19. %packages
  20. @core
  21. @base
  22. %end
  23. %post
  24. #!/bin/bash
  25. echo "Custom post-installation script"
  26. # Add custom configurations here
  27. %end
复制代码

1.2 系统服务管理

RHEL 7及以后版本使用systemd作为系统和服务管理器。以下是一些常用的systemd命令:
  1. # 启动服务
  2. systemctl start httpd
  3. # 停止服务
  4. systemctl stop httpd
  5. # 重启服务
  6. systemctl restart httpd
  7. # 重新加载服务配置
  8. systemctl reload httpd
  9. # 设置服务开机自启
  10. systemctl enable httpd
  11. # 禁用服务开机自启
  12. systemctl disable httpd
  13. # 查看服务状态
  14. systemctl status httpd
  15. # 查看所有服务的状态
  16. systemctl list-units --type=service --all
  17. # 查看服务日志
  18. journalctl -u httpd
复制代码

1.3 内核参数调优

通过修改/etc/sysctl.conf文件或使用sysctl命令可以调整内核参数,优化系统性能。以下是一些常用的内核参数优化:
  1. # 增加文件描述符限制
  2. echo "fs.file-max = 100000" >> /etc/sysctl.conf
  3. # 优化网络参数
  4. cat >> /etc/sysctl.conf << EOF
  5. # TCP优化
  6. net.ipv4.tcp_fin_timeout = 30
  7. net.ipv4.tcp_keepalive_time = 1200
  8. net.ipv4.tcp_max_syn_backlog = 8192
  9. net.ipv4.tcp_max_tw_buckets = 5000
  10. net.ipv4.tcp_tw_reuse = 1
  11. net.ipv4.tcp_tw_recycle = 1
  12. # 网络队列优化
  13. net.core.netdev_max_backlog = 65535
  14. net.core.somaxconn = 65535
  15. # 内存优化
  16. vm.swappiness = 10
  17. vm.dirty_ratio = 60
  18. vm.dirty_background_ratio = 2
  19. EOF
  20. # 应用配置
  21. sysctl -p
复制代码

1.4 文件系统高级配置

RHEL支持多种文件系统,包括XFS、ext4等。以下是XFS文件系统的高级配置示例:
  1. # 创建XFS文件系统
  2. mkfs.xfs -f /dev/sdb1
  3. # 挂载XFS文件系统并指定选项
  4. mount -o noatime,nodiratime,largeio,inode64,swalloc /dev/sdb1 /data
  5. # 永久挂载配置
  6. echo "/dev/sdb1 /data xfs defaults,noatime,nodiratime,largeio,inode64,swalloc 0 0" >> /etc/fstab
  7. # 调整XFS文件系统参数
  8. xfs_admin -L "DataVolume" /dev/sdb1
  9. # 扩展XFS文件系统(如果使用LVM)
  10. lvextend -L +10G /dev/vg_root/lv_data
  11. xfs_growfs /data
复制代码

2. 企业服务器性能优化

性能优化是系统管理员的核心职责之一。本节将详细介绍如何优化RHEL服务器的性能。

2.1 CPU性能优化

CPU亲和性可以绑定进程到特定的CPU核心,减少缓存失效和上下文切换开销:
  1. # 查看CPU核心信息
  2. lscpu
  3. # 查看当前进程的CPU亲和性
  4. taskset -p <PID>
  5. # 设置进程的CPU亲和性
  6. taskset -cp 0,1,2,3 <PID>
  7. # 启动程序时指定CPU亲和性
  8. taskset -c 0,1,2,3 <command>
  9. # 使用numactl控制NUMA系统上的内存和CPU分配
  10. numactl --cpubind=0 --membind=0 <command>
复制代码

通过调整CPU频率可以平衡性能和能耗:
  1. # 安装cpufreq工具
  2. yum install cpupowerutils
  3. # 查看CPU频率驱动信息
  4. cpupower frequency-info
  5. # 设置CPU频率调节策略
  6. cpupower frequency-set -g performance
  7. # 查看可用的调节策略
  8. ls /sys/devices/system/cpu/cpufreq/policy0/scaling_available_governors
  9. # 设置CPU频率上限和下限
  10. cpupower frequency-set -u 3.0GHz
  11. cpupower frequency-set -d 1.2GHz
复制代码

2.2 内存性能优化
  1. # 查看内存使用情况
  2. free -h
  3. cat /proc/meminfo
  4. # 查看进程内存使用情况
  5. ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head
  6. # 使用smem工具查看更详细的内存使用情况
  7. yum install smem
  8. smem -k -p
  9. # 查看内存映射信息
  10. pmap <PID>
复制代码
  1. # 创建交换文件
  2. dd if=/dev/zero of=/swapfile bs=1M count=2048
  3. chmod 600 /swapfile
  4. mkswap /swapfile
  5. swapon /swapfile
  6. # 永久启用交换文件
  7. echo "/swapfile swap swap defaults 0 0" >> /etc/fstab
  8. # 调整swappiness参数(值越小,越倾向于使用物理内存)
  9. echo "vm.swappiness = 10" >> /etc/sysctl.conf
  10. sysctl -p
  11. # 查看交换空间使用情况
  12. swapon -s
  13. cat /proc/swaps
复制代码

2.3 磁盘I/O性能优化
  1. # 查看当前I/O调度器
  2. cat /sys/block/sda/queue/scheduler
  3. # 临时更改I/O调度器
  4. echo deadline > /sys/block/sda/queue/scheduler
  5. # 永久更改I/O调度器(通过udev规则)
  6. echo "ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline"" > /etc/udev/rules.d/60-io-scheduler.rules
  7. udevadm control --reload-rules
  8. udevadm trigger
复制代码
  1. # 安装fio工具
  2. yum install fio
  3. # 随机读测试
  4. fio --name=randread --ioengine=libaio --iodepth=16 --rw=randread --bs=4k --direct=1 --size=1G --numjobs=4 --runtime=60 --group_reporting
  5. # 随机写测试
  6. fio --name=randwrite --ioengine=libaio --iodepth=16 --rw=randwrite --bs=4k --direct=1 --size=1G --numjobs=4 --runtime=60 --group_reporting
  7. # 混合随机读写测试
  8. fio --name=randrw --ioengine=libaio --iodepth=16 --rw=randrw --rwmixread=70 --bs=4k --direct=1 --size=1G --numjobs=4 --runtime=60 --group_reporting
复制代码

2.4 网络性能优化
  1. # 查看网络接口信息
  2. ethtool eth0
  3. # 启用网络接口的多队列支持
  4. ethtool -L eth0 combined 8
  5. # 调整网络接口的队列长度
  6. ifconfig eth0 txqueuelen 10000
  7. # 启用网络接口的卸载功能
  8. ethtool -K eth0 gso on
  9. ethtool -K eth0 tso on
  10. ethtool -K eth0 lro on
  11. ethtool -K eth0 gro on
复制代码
  1. # 增加本地端口范围
  2. echo "net.ipv4.ip_local_port_range = 1024 65535" >> /etc/sysctl.conf
  3. # 优化TCP连接参数
  4. echo "net.ipv4.tcp_rmem = 4096 87380 16777216" >> /etc/sysctl.conf
  5. echo "net.ipv4.tcp_wmem = 4096 65536 16777216" >> /etc/sysctl.conf
  6. echo "net.core.rmem_max = 16777216" >> /etc/sysctl.conf
  7. echo "net.core.wmem_max = 16777216" >> /etc/sysctl.conf
  8. # 应用配置
  9. sysctl -p
复制代码

3. 安全加固

安全加固是保护企业服务器免受攻击的关键步骤。本节将介绍如何加强RHEL服务器的安全性。

3.1 系统访问控制
  1. # 创建新用户并设置强密码
  2. useradd -m -s /bin/bash admin
  3. passwd admin
  4. # 限制sudo访问
  5. visudo
  6. # 添加以下行,允许admin用户以root权限执行所有命令
  7. admin ALL=(ALL) ALL
  8. # 或者更严格的限制,只允许执行特定命令
  9. admin ALL=(ALL) /usr/bin/systemctl, /usr/bin/rpm, /usr/bin/yum
  10. # 禁用root用户SSH登录
  11. echo "PermitRootLogin no" >> /etc/ssh/sshd_config
  12. systemctl restart sshd
  13. # 设置密码策略
  14. yum install libpwquality
  15. echo "minlen = 12" >> /etc/security/pwquality.conf
  16. echo "minclass = 3" >> /etc/security/pwquality.conf
  17. echo "dcredit = -1" >> /etc/security/pwquality.conf
  18. echo "ucredit = -1" >> /etc/security/pwquality.conf
  19. echo "lcredit = -1" >> /etc/security/pwquality.conf
  20. echo "ocredit = -1" >> /etc/security/pwquality.conf
复制代码
  1. # 备份SSH配置文件
  2. cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
  3. # 修改SSH配置
  4. cat > /etc/ssh/sshd_config << EOF
  5. Port 2222
  6. Protocol 2
  7. PermitRootLogin no
  8. MaxAuthTries 3
  9. MaxSessions 3
  10. PubkeyAuthentication yes
  11. PasswordAuthentication yes
  12. PermitEmptyPasswords no
  13. ChallengeResponseAuthentication no
  14. UsePAM yes
  15. X11Forwarding no
  16. PrintMotd no
  17. AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
  18. AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
  19. AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
  20. AcceptEnv XMODIFIERS
  21. Subsystem sftp  /usr/libexec/openssh/sftp-server
  22. EOF
  23. # 重启SSH服务
  24. systemctl restart sshd
复制代码

3.2 防火墙配置

RHEL 7及以后版本使用firewalld作为默认防火墙管理工具:
  1. # 启动并启用firewalld
  2. systemctl start firewalld
  3. systemctl enable firewalld
  4. # 查看防火墙状态
  5. firewall-cmd --state
  6. # 查看默认区域
  7. firewall-cmd --get-default-zone
  8. # 查看活动区域
  9. firewall-cmd --get-active-zones
  10. # 查看当前区域的规则
  11. firewall-cmd --list-all
  12. # 开放端口
  13. firewall-cmd --permanent --add-port=80/tcp
  14. firewall-cmd --permanent --add-port=443/tcp
  15. # 开放服务
  16. firewall-cmd --permanent --add-service=http
  17. firewall-cmd --permanent --add-service=https
  18. # 重新加载防火墙规则
  19. firewall-cmd --reload
  20. # 端口转发
  21. firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=8080
  22. # 丰富的规则
  23. firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept'
  24. firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/8" reject'
复制代码

3.3 SELinux配置

SELinux是RHEL中的强制访问控制(MAC)系统,提供额外的安全层:
  1. # 查看SELinux状态
  2. sestatus
  3. # 临时设置SELinux为 enforcing模式
  4. setenforce 1
  5. # 永久设置SELinux为 enforcing模式
  6. sed -i 's/SELINUX=disabled/SELINUX=enforcing/g' /etc/selinux/config
  7. # 查看SELinux布尔值
  8. getsebool -a
  9. # 设置SELinux布尔值
  10. setsebool -P httpd_can_network_connect on
  11. # 查看文件和进程的SELinux上下文
  12. ls -Z
  13. ps -Z
  14. # 修改文件和目录的SELinux上下文
  15. chcon -t httpd_sys_content_t /var/www/html/*
  16. restorecon -Rv /var/www/html
  17. # 查看SELinux日志
  18. ausearch -m avc -ts recent
  19. sealert -a /var/log/audit/audit.log
复制代码

3.4 系统审计

审计系统可以记录系统上的活动,帮助检测和调查安全事件:
  1. # 安装审计工具
  2. yum install audit
  3. # 启动并启用auditd服务
  4. systemctl start auditd
  5. systemctl enable auditd
  6. # 查看审计规则
  7. auditctl -l
  8. # 添加审计规则
  9. auditctl -w /etc/passwd -p wa -k passwd_changes
  10. auditctl -w /etc/selinux/ -p wa -k selinux_changes
  11. auditctl -w /var/log/audit/ -p wa -k audit_log_changes
  12. # 永久保存审计规则
  13. echo "-w /etc/passwd -p wa -k passwd_changes" >> /etc/audit/rules.d/audit.rules
  14. echo "-w /etc/selinux/ -p wa -k selinux_changes" >> /etc/audit/rules.d/audit.rules
  15. echo "-w /var/log/audit/ -p wa -k audit_log_changes" >> /etc/audit/rules.d/audit.rules
  16. # 查看审计日志
  17. ausearch -k passwd_changes
  18. ausearch -m avc -ts recent
  19. aureport -x
  20. # 生成审计报告
  21. aureport -m
  22. aureport -l
  23. aureport -au
复制代码

4. 网络配置

网络配置是系统管理员的重要职责之一。本节将详细介绍如何在RHEL中配置和管理网络。

4.1 基本网络配置
  1. # 查看网络连接
  2. nmcli connection show
  3. # 查看活动连接
  4. nmcli connection show --active
  5. # 查看网络设备状态
  6. nmcli device status
  7. # 创建新的以太网连接
  8. nmcli connection add type ethernet ifname eth0 con-name eth0-static
  9. # 配置静态IP地址
  10. nmcli connection modify eth0-static ipv4.addresses 192.168.1.100/24
  11. nmcli connection modify eth0-static ipv4.gateway 192.168.1.1
  12. nmcli connection modify eth0-static ipv4.dns "8.8.8.8 8.8.4.4"
  13. nmcli connection modify eth0-static ipv4.method manual
  14. # 启用连接
  15. nmcli connection up eth0-static
  16. # 配置动态IP地址
  17. nmcli connection modify eth0-static ipv4.method auto
  18. # 禁用IPv6
  19. nmcli connection modify eth0-static ipv6.method ignore
复制代码
  1. # 配置以太网接口
  2. cat > /etc/sysconfig/network-scripts/ifcfg-eth0 << EOF
  3. TYPE=Ethernet
  4. BOOTPROTO=static
  5. DEFROUTE=yes
  6. PEERDNS=yes
  7. PEERROUTES=yes
  8. IPV4_FAILURE_FATAL=no
  9. IPV6INIT=no
  10. NAME=eth0
  11. DEVICE=eth0
  12. ONBOOT=yes
  13. IPADDR=192.168.1.100
  14. PREFIX=24
  15. GATEWAY=192.168.1.1
  16. DNS1=8.8.8.8
  17. DNS2=8.8.4.4
  18. EOF
  19. # 重启网络服务
  20. systemctl restart network
  21. # 配置DNS
  22. cat > /etc/resolv.conf << EOF
  23. nameserver 8.8.8.8
  24. nameserver 8.8.4.4
  25. search example.com
  26. EOF
复制代码

4.2 高级网络配置
  1. # 安装绑定工具
  2. yum install teamd
  3. # 创建绑定接口
  4. nmcli connection add type bond ifname bond0 con-name bond0 mode 802.3ad
  5. nmcli connection modify bond0 ipv4.addresses 192.168.1.200/24
  6. nmcli connection modify bond0 ipv4.gateway 192.168.1.1
  7. nmcli connection modify bond0 ipv4.dns "8.8.8.8 8.8.4.4"
  8. nmcli connection modify bond0 ipv4.method manual
  9. # 添加从接口到绑定
  10. nmcli connection add type ethernet ifname eth1 slave-type bond master bond0
  11. nmcli connection add type ethernet ifname eth2 slave-type bond master bond0
  12. # 启用绑定接口
  13. nmcli connection up bond0
  14. # 查看绑定状态
  15. cat /proc/net/bonding/bond0
复制代码
  1. # 创建VLAN接口
  2. nmcli connection add type vlan ifname eth0.100 dev eth0 id 100 con-name vlan100
  3. nmcli connection modify vlan100 ipv4.addresses 192.168.100.100/24
  4. nmcli connection modify vlan100 ipv4.gateway 192.168.100.1
  5. nmcli connection modify vlan100 ipv4.method manual
  6. # 启用VLAN接口
  7. nmcli connection up vlan100
复制代码
  1. # 安装网桥工具
  2. yum install bridge-utils
  3. # 创建网桥
  4. nmcli connection add type bridge ifname br0 con-name br0
  5. nmcli connection modify br0 ipv4.addresses 192.168.1.150/24
  6. nmcli connection modify br0 ipv4.gateway 192.168.1.1
  7. nmcli connection modify br0 ipv4.method manual
  8. # 添加接口到网桥
  9. nmcli connection add type ethernet ifname eth0 master br0
  10. # 启用网桥
  11. nmcli connection up br0
  12. # 查看网桥状态
  13. brctl show
复制代码

4.3 网络故障排除
  1. # 测试网络连通性
  2. ping 8.8.8.8
  3. ping -c 4 example.com
  4. # 跟踪网络路径
  5. traceroute 8.8.8.8
  6. tracepath example.com
  7. # 查看路由表
  8. ip route show
  9. netstat -rn
  10. # 查看网络连接
  11. netstat -tuln
  12. ss -tuln
  13. # 查看网络接口统计信息
  14. ip -s link show eth0
  15. cat /proc/net/dev
复制代码
  1. # 安装网络诊断工具
  2. yum install tcpdump nmap-ncat mtr nmap
  3. # 使用tcpdump捕获网络数据包
  4. tcpdump -i eth0 -n -c 10
  5. tcpdump -i eth0 port 80 -w capture.pcap
  6. # 使用ncat进行网络连接测试
  7. nc -zv 192.168.1.1 80
  8. nc -l -p 8080
  9. nc 192.168.1.100 8080
  10. # 使用mtr进行网络诊断
  11. mtr 8.8.8.8
  12. # 使用nmap进行端口扫描
  13. nmap -sT -p- 192.168.1.100
  14. nmap -sU -p 53,67,68 192.168.1.100
复制代码
  1. # 安装网络性能测试工具
  2. yum install iperf3 netperf
  3. # 使用iperf3测试网络带宽
  4. # 服务器端
  5. iperf3 -s
  6. # 客户端
  7. iperf3 -c 192.168.1.100 -t 60
  8. # 使用netperf测试网络性能
  9. # 服务器端
  10. netserver
  11. # 客户端
  12. netperf -H 192.168.1.100 -t TCP_STREAM -l 60
  13. netperf -H 192.168.1.100 -t UDP_STREAM -l 60
复制代码

5. 故障排除

故障排除是系统管理员的核心技能之一。本节将介绍如何诊断和解决RHEL系统中的常见问题。

5.1 系统启动问题
  1. # 查看GRUB配置
  2. cat /etc/default/grub
  3. cat /boot/grub2/grub.cfg
  4. # 重新生成GRUB配置
  5. grub2-mkconfig -o /boot/grub2/grub.cfg
  6. # 安装GRUB到MBR
  7. grub2-install /dev/sda
  8. # 进入救援模式
  9. # 1. 重启系统并在GRUB菜单按'e'编辑启动参数
  10. # 2. 在linux行末尾添加 'rd.break'
  11. # 3. 按'Ctrl+X'启动
  12. # 4. 在救援模式下执行以下命令
  13. # 挂载根文件系统
  14. mount -o remount,rw /sysroot
  15. chroot /sysroot
  16. # 修复SELinux上下文
  17. touch /.autorelabel
  18. exit
  19. reboot
复制代码
  1. # 查看系统启动日志
  2. journalctl -b
  3. journalctl -b -p err
  4. journalctl -b -1  # 查看上次启动的日志
  5. # 查看服务启动失败原因
  6. systemctl --failed
  7. systemctl status <failed-service>
  8. journalctl -u <failed-service>
  9. # 重置失败的服务
  10. systemctl reset-failed <failed-service>
  11. # 分析启动时间
  12. systemd-analyze
  13. systemd-analyze blame
  14. systemd-analyze critical-chain
复制代码

5.2 文件系统问题
  1. # 查看磁盘使用情况
  2. df -h
  3. df -i  # 查看inode使用情况
  4. # 查找大文件
  5. find / -type f -size +100M -exec ls -lh {} \;
  6. find / -type f -size +100M -exec du -h {} \;
  7. # 查找大目录
  8. du -sh /var/* | sort -rh
  9. du -sh /home/* | sort -rh
  10. # 清理旧日志
  11. journalctl --vacuum-size=100M
  12. logrotate -f /etc/logrotate.conf
复制代码
  1. # 检查文件系统
  2. fsck -n /dev/sda1  # 只检查,不修复
  3. # 修复文件系统
  4. # 首先卸载文件系统
  5. umount /dev/sda1
  6. # 修复ext4文件系统
  7. fsck -y /dev/sda1
  8. # 修复XFS文件系统
  9. xfs_repair -n /dev/sda1  # 只检查,不修复
  10. xfs_repair /dev/sda1     # 修复文件系统
复制代码

5.3 性能问题
  1. # 查看CPU使用情况
  2. top
  3. htop
  4. mpstat 1 5
  5. # 查看CPU负载
  6. uptime
  7. cat /proc/loadavg
  8. # 查看CPU使用率高的进程
  9. ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head
  10. # 查看进程的线程
  11. ps -eLf
  12. ps -T -p <PID>
  13. top -H -p <PID>
复制代码
  1. # 查看内存使用情况
  2. free -h
  3. cat /proc/meminfo
  4. # 查看内存使用率高的进程
  5. ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head
  6. # 查看进程的内存映射
  7. pmap <PID>
  8. # 查看系统内存统计信息
  9. vmstat 1 5
  10. sar -r 1 5
复制代码
  1. # 查看磁盘I/O统计
  2. iostat -xz 1 5
  3. iotop
  4. # 查看进程的I/O统计
  5. pidstat -d 1 5
  6. # 查看块设备统计
  7. cat /proc/diskstats
  8. lsblk
复制代码

5.4 网络问题
  1. # 检查网络接口状态
  2. ip addr show
  3. ip link show
  4. # 检查网络连接
  5. ping 8.8.8.8
  6. ping -c 4 example.com
  7. # 检查DNS解析
  8. nslookup example.com
  9. dig example.com
  10. host example.com
  11. # 检查路由
  12. ip route show
  13. traceroute 8.8.8.8
  14. tracepath example.com
复制代码
  1. # 检查网络服务状态
  2. systemctl status network
  3. systemctl status NetworkManager
  4. # 检查网络连接
  5. netstat -tuln
  6. ss -tuln
  7. # 检查防火墙状态
  8. firewall-cmd --state
  9. firewall-cmd --list-all
  10. # 检查SELinux状态
  11. sestatus
  12. getsebool -a | grep http
复制代码

6. 系统管理员实战案例

本节将通过一些实际案例,展示如何应用前面介绍的知识解决实际问题。

6.1 案例一:Web服务器性能优化

一个运行Apache的Web服务器在高峰期响应缓慢,需要优化性能。
  1. # 1. 检查系统资源使用情况
  2. top
  3. free -h
  4. iostat -xz 1 5
  5. # 2. 检查Apache配置
  6. cat /etc/httpd/conf/httpd.conf | grep -E "^KeepAlive|^MaxKeepAliveRequests|^KeepAliveTimeout|^ServerLimit|^MaxClients"
  7. # 3. 优化Apache配置
  8. cat >> /etc/httpd/conf/httpd.conf << EOF
  9. # 性能优化配置
  10. KeepAlive On
  11. MaxKeepAliveRequests 100
  12. KeepAliveTimeout 5
  13. <IfModule prefork.c>
  14.     ServerLimit 256
  15.     MaxClients 256
  16.     StartServers 10
  17.     MinSpareServers 10
  18.     MaxSpareServers 30
  19.     MaxRequestsPerChild 4000
  20. </IfModule>
  21. EOF
  22. # 4. 启用Apache缓存模块
  23. yum install mod_cache
  24. cat >> /etc/httpd/conf.d/cache.conf << EOF
  25. LoadModule cache_module modules/mod_cache.so
  26. LoadModule cache_disk_module modules/mod_cache_disk.so
  27. <IfModule mod_cache_disk.c>
  28.     CacheEnable disk /
  29.     CacheRoot /var/cache/httpd
  30.     CacheDirLevels 2
  31.     CacheDirLength 1
  32. </IfModule>
  33. EOF
  34. # 5. 优化系统内核参数
  35. cat >> /etc/sysctl.conf << EOF
  36. # 网络优化
  37. net.ipv4.tcp_fin_timeout = 30
  38. net.ipv4.tcp_keepalive_time = 1200
  39. net.ipv4.tcp_max_syn_backlog = 8192
  40. net.ipv4.tcp_max_tw_buckets = 5000
  41. net.ipv4.tcp_tw_reuse = 1
  42. net.ipv4.tcp_tw_recycle = 1
  43. net.core.netdev_max_backlog = 65535
  44. net.core.somaxconn = 65535
  45. # 文件系统优化
  46. vm.swappiness = 10
  47. vm.dirty_ratio = 60
  48. vm.dirty_background_ratio = 2
  49. EOF
  50. # 6. 应用配置并重启服务
  51. sysctl -p
  52. systemctl restart httpd
  53. # 7. 监控性能
  54. yum install htop iotop
  55. htop
  56. iotop
复制代码

6.2 案例二:数据库服务器安全加固

一个运行MySQL的数据库服务器需要加强安全性,防止未授权访问和数据泄露。
  1. # 1. 更新系统
  2. yum update -y
  3. # 2. 安装MySQL
  4. yum install mysql-server -y
  5. systemctl start mysqld
  6. systemctl enable mysqld
  7. # 3. 运行MySQL安全脚本
  8. mysql_secure_installation
  9. # 4. 配置MySQL
  10. cat > /etc/my.cnf << EOF
  11. [mysqld]
  12. # 安全配置
  13. skip-symbolic-links
  14. local-infile=0
  15. skip-show-database
  16. max_connect_errors=10
  17. max_user_connections=25
  18. # 网络配置
  19. bind-address=127.0.0.1
  20. port=3306
  21. # 日志配置
  22. log-error=/var/log/mysqld.log
  23. slow_query_log=1
  24. slow_query_log_file=/var/log/mysql-slow.log
  25. long_query_time=2
  26. # 性能配置
  27. innodb_buffer_pool_size=2G
  28. innodb_log_file_size=256M
  29. innodb_log_buffer_size=8M
  30. innodb_flush_log_at_trx_commit=2
  31. innodb_flush_method=O_DIRECT
  32. innodb_file_per_table=1
  33. EOF
  34. # 5. 重启MySQL服务
  35. systemctl restart mysqld
  36. # 6. 配置防火墙
  37. firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="mysql" accept'
  38. firewall-cmd --reload
  39. # 7. 配置SELinux
  40. setsebool -P mysql_connect_any on
  41. setsebool -P daemons_enable_cluster_mode on
  42. # 8. 创建数据库用户并授权
  43. mysql -u root -p
  44. CREATE DATABASE myapp;
  45. CREATE USER 'myappuser'@'localhost' IDENTIFIED BY 'strongpassword';
  46. GRANT ALL PRIVILEGES ON myapp.* TO 'myappuser'@'localhost';
  47. FLUSH PRIVILEGES;
  48. EXIT;
  49. # 9. 配置数据库备份
  50. yum install mariadb-backup
  51. cat > /etc/cron.daily/mysql-backup << EOF
  52. #!/bin/bash
  53. DATE=\$(date +%Y%m%d)
  54. mkdir -p /backup/mysql
  55. mysqldump --all-databases --single-transaction --routines --triggers | gzip > /backup/mysql/mysql-backup-\$DATE.sql.gz
  56. find /backup/mysql -name "*.sql.gz" -mtime +7 -delete
  57. EOF
  58. chmod +x /etc/cron.daily/mysql-backup
  59. # 10. 配置审计规则
  60. echo "-w /etc/my.cnf -p wa -k mysql_config" >> /etc/audit/rules.d/audit.rules
  61. echo "-w /var/lib/mysql -p wa -k mysql_data" >> /etc/audit/rules.d/audit.rules
  62. systemctl restart auditd
复制代码

6.3 案例三:高可用性集群配置

需要配置一个高可用性的Web服务集群,确保在节点故障时服务不中断。
  1. # 1. 在所有节点上安装必要的软件
  2. yum install -y pacemaker pcs fence-agents-all resource-agents
  3. # 2. 设置hacluster用户密码
  4. echo "hacluster:StrongPassword" | chpasswd
  5. # 3. 启动并启用pcsd服务
  6. systemctl start pcsd
  7. systemctl enable pcsd
  8. # 4. 认证集群节点
  9. pcs cluster auth node1 node2 node3 -u hacluster -p StrongPassword
  10. # 5. 创建集群
  11. pcs cluster setup --name mycluster node1 node2 node3
  12. # 6. 启动集群
  13. pcs cluster start --all
  14. pcs cluster enable --all
  15. # 7. 查看集群状态
  16. pcs status
  17. # 8. 禁用STONITH(用于测试环境,生产环境应配置STONITH)
  18. pcs property set stonith-enabled=false
  19. # 9. 配置浮动IP
  20. pcs resource create vip ocf:heartbeat:IPaddr2 ip=192.168.1.100 cidr_netmask=24 op monitor interval=20s
  21. # 10. 配置Web服务
  22. pcs resource create webserver systemd:httpd op monitor interval=20s
  23. # 11. 配置资源约束
  24. pcs constraint colocation add webserver with vip
  25. pcs constraint order vip then webserver
  26. # 12. 配置文件系统(如果需要共享存储)
  27. # 假设使用NFS共享存储
  28. yum install -y nfs-utils
  29. mkdir -p /var/www/html
  30. echo "192.168.1.200:/share /var/www/html nfs defaults 0 0" >> /etc/fstab
  31. mount -a
  32. # 13. 配置文件系统资源
  33. pcs resource create websitefs Filesystem device="192.168.1.200:/share" directory="/var/www/html" fstype="nfs" op monitor interval=20s
  34. # 14. 更新资源约束
  35. pcs constraint colocation add websitefs with vip
  36. pcs constraint order vip then websitefs
  37. pcs constraint colocation add webserver with websitefs
  38. pcs constraint order websitefs then webserver
  39. # 15. 查看集群状态
  40. pcs status
  41. # 16. 测试故障转移
  42. # 在node1上停止pacemaker服务
  43. systemctl stop pacemaker
  44. # 在其他节点上查看集群状态
  45. pcs status
复制代码

6.4 案例四:系统备份与恢复

需要为关键服务器配置可靠的备份策略,并测试恢复流程。
  1. # 1. 安装备份工具
  2. yum install -y rsync tar
  3. # 2. 创建备份脚本
  4. cat > /usr/local/bin/system-backup.sh << 'EOF'
  5. #!/bin/bash
  6. # 配置变量
  7. BACKUP_DIR="/backup"
  8. DATE=$(date +%Y%m%d)
  9. HOSTNAME=$(hostname)
  10. RETENTION_DAYS=30
  11. # 创建备份目录
  12. mkdir -p $BACKUP_DIR/$DATE
  13. # 备份系统配置文件
  14. tar -czf $BACKUP_DIR/$DATE/etc-$DATE.tar.gz /etc
  15. # 备份用户数据
  16. tar -czf $BACKUP_DIR/$DATE/home-$DATE.tar.gz /home
  17. # 备份系统引导信息
  18. dd if=/dev/sda of=$BACKUP_DIR/$DATE/mbr-$DATE.img bs=512 count=1
  19. # 备份分区表
  20. sfdisk -d /dev/sda > $BACKUP_DIR/$DATE/partitions-$DATE.sfdisk
  21. # 备份RPM包列表
  22. rpm -qa > $BACKUP_DIR/$DATE/rpmlist-$DATE.txt
  23. # 创建备份清单
  24. cat > $BACKUP_DIR/$DATE/backup-manifest-$DATE.txt << EOM
  25. Backup Date: $(date)
  26. Hostname: $HOSTNAME
  27. Kernel: $(uname -r)
  28. EOM
  29. # 清理旧备份
  30. find $BACKUP_DIR -type d -mtime +$RETENTION_DAYS -exec rm -rf {} \;
  31. # 记录备份日志
  32. logger "System backup completed on $DATE"
  33. EOF
  34. # 3. 设置脚本权限
  35. chmod +x /usr/local/bin/system-backup.sh
  36. # 4. 配置cron任务
  37. echo "0 2 * * 6 /usr/local/bin/system-backup.sh" > /etc/cron.d/system-backup
  38. # 5. 创建恢复脚本
  39. cat > /usr/local/bin/system-restore.sh << 'EOF'
  40. #!/bin/bash
  41. # 检查参数
  42. if [ $# -ne 1 ]; then
  43.     echo "Usage: $0 <backup-date>"
  44.     exit 1
  45. fi
  46. BACKUP_DATE=$1
  47. BACKUP_DIR="/backup/$BACKUP_DATE"
  48. # 检查备份是否存在
  49. if [ ! -d "$BACKUP_DIR" ]; then
  50.     echo "Backup directory $BACKUP_DIR not found"
  51.     exit 1
  52. fi
  53. # 恢复MBR
  54. dd if=$BACKUP_DIR/mbr-$BACKUP_DATE.img of=/dev/sda
  55. # 恢复分区表
  56. sfdisk /dev/sda < $BACKUP_DIR/partitions-$BACKUP_DATE.sfdisk
  57. # 重新读取分区表
  58. partprobe
  59. # 恢复系统配置文件
  60. tar -xzf $BACKUP_DIR/etc-$BACKUP_DATE.tar.gz -C /
  61. # 恢复用户数据
  62. tar -xzf $BACKUP_DIR/home-$BACKUP_DATE.tar.gz -C /
  63. # 记录恢复日志
  64. logger "System restore completed from backup $BACKUP_DATE"
  65. EOF
  66. # 6. 设置恢复脚本权限
  67. chmod +x /usr/local/bin/system-restore.sh
  68. # 7. 创建系统镜像备份脚本(用于完整系统恢复)
  69. cat > /usr/local/bin/system-image-backup.sh << 'EOF'
  70. #!/bin/bash
  71. # 配置变量
  72. BACKUP_DIR="/backup/images"
  73. DATE=$(date +%Y%m%d)
  74. HOSTNAME=$(hostname)
  75. RETENTION_DAYS=30
  76. # 创建备份目录
  77. mkdir -p $BACKUP_DIR
  78. # 创建系统镜像
  79. fsarchiver savefs $BACKUP_DIR/system-$DATE.fsa /dev/sda1 /dev/sda2
  80. # 清理旧备份
  81. find $BACKUP_DIR -name "*.fsa" -mtime +$RETENTION_DAYS -delete
  82. # 记录备份日志
  83. logger "System image backup completed on $DATE"
  84. EOF
  85. # 8. 设置镜像备份脚本权限
  86. chmod +x /usr/local/bin/system-image-backup.sh
  87. # 9. 安装fsarchiver
  88. yum install -y fsarchiver
  89. # 10. 配置cron任务(每月一次完整镜像备份)
  90. echo "0 3 1 * * /usr/local/bin/system-image-backup.sh" > /etc/cron.d/system-image-backup
  91. # 11. 创建系统镜像恢复脚本
  92. cat > /usr/local/bin/system-image-restore.sh << 'EOF'
  93. #!/bin/bash
  94. # 检查参数
  95. if [ $# -ne 1 ]; then
  96.     echo "Usage: $0 <backup-date>"
  97.     exit 1
  98. fi
  99. BACKUP_DATE=$1
  100. BACKUP_FILE="/backup/images/system-$BACKUP_DATE.fsa"
  101. # 检查备份是否存在
  102. if [ ! -f "$BACKUP_FILE" ]; then
  103.     echo "Backup file $BACKUP_FILE not found"
  104.     exit 1
  105. fi
  106. # 恢复系统镜像
  107. fsarchiver restfs $BACKUP_FILE id=0,dest=/dev/sda1 id=1,dest=/dev/sda2
  108. # 记录恢复日志
  109. logger "System image restore completed from backup $BACKUP_DATE"
  110. EOF
  111. # 12. 设置镜像恢复脚本权限
  112. chmod +x /usr/local/bin/system-image-restore.sh
  113. # 13. 创建测试恢复脚本(测试恢复而不实际执行)
  114. cat > /usr/local/bin/test-restore.sh << 'EOF'
  115. #!/bin/bash
  116. # 配置变量
  117. BACKUP_DIR="/backup"
  118. DATE=$(date +%Y%m%d)
  119. TEST_DIR="/tmp/restore-test"
  120. # 创建测试目录
  121. mkdir -p $TEST_DIR
  122. # 查找最新备份
  123. LATEST_BACKUP=$(ls -t $BACKUP_DIR | head -n1)
  124. # 测试恢复系统配置文件
  125. tar -tzf $BACKUP_DIR/$LATEST_BACKUP/etc-$LATEST_BACKUP.tar.gz > /dev/null
  126. if [ $? -eq 0 ]; then
  127.     echo "System configuration backup is valid"
  128. else
  129.     echo "System configuration backup is corrupted"
  130. fi
  131. # 测试恢复用户数据
  132. tar -tzf $BACKUP_DIR/$LATEST_BACKUP/home-$LATEST_BACKUP.tar.gz > /dev/null
  133. if [ $? -eq 0 ]; then
  134.     echo "User data backup is valid"
  135. else
  136.     echo "User data backup is corrupted"
  137. fi
  138. # 记录测试日志
  139. logger "Backup test completed on $DATE"
  140. EOF
  141. # 14. 设置测试恢复脚本权限
  142. chmod +x /usr/local/bin/test-restore.sh
  143. # 15. 配置cron任务(每周测试备份)
  144. echo "0 4 * * 5 /usr/local/bin/test-restore.sh" > /etc/cron.d/test-backup
复制代码

结论

Red Hat Enterprise Linux作为企业级服务器操作系统,提供了强大的功能和灵活性。通过本文详细介绍的高级配置、性能优化、安全加固、网络配置和故障排除技术,系统管理员可以更好地管理和维护RHEL服务器。

在实际工作中,系统管理员需要不断学习和实践,结合具体的应用场景和需求,灵活运用这些技术,以确保服务器的稳定、安全和高效运行。同时,定期进行系统备份和测试恢复流程也是保障业务连续性的重要措施。

希望本文能够为系统管理员提供实用的指导和参考,帮助他们更好地应对日常工作中的挑战。
「七転び八起き(ななころびやおき)」
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则