CentOS系统入门与实战:从安装到性能调优全指南
1. CentOS系统入门:为什么选择这个Linux发行版?
第一次接触CentOS是在2016年一个企业级项目部署时。当时客户明确要求使用这个系统,我才真正开始系统性地学习它。CentOS作为Red Hat Enterprise Linux(RHEL)的社区版,继承了RHEL的稳定性和企业级特性,特别适合需要长期稳定运行的生产环境。
与Ubuntu等面向个人用户的发行版不同,CentOS的软件包更新策略更为保守。这意味着你可能无法第一时间用上最新功能,但换来的是经过充分测试的稳定版本。我在实际运维中就遇到过Ubuntu某个版本内核更新导致生产环境崩溃的情况,而同样的服务在CentOS上运行了三年从未出过问题。
2. CentOS基础环境搭建
2.1 系统安装要点
安装CentOS时,有几个关键选择会影响后续使用体验。首先是分区方案,我建议采用以下配置:
- /boot分区:1GB(存放内核和启动文件)
- swap分区:物理内存的1.5-2倍(特别是服务器环境)
- /分区:剩余所有空间(简化管理)
注意:企业级环境建议将/var单独分区,防止日志文件占满根分区
安装源选择也很关键。国内用户可以使用阿里云或清华大学的镜像源加速下载:
# 替换为阿里云镜像源 sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' \ -e 's|^#baseurl=http://mirror.centos.org|baseurl=https://mirrors.aliyun.com|g' \ -i.bak \ /etc/yum.repos.d/CentOS-*.repo2.2 基础配置优化
安装完成后,有几项必须立即进行的配置:
关闭SELinux(学习阶段建议关闭,生产环境需谨慎)
sudo setenforce 0 sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config配置静态IP(服务器环境必备)
sudo nmcli con mod "有线连接" ipv4.addresses 192.168.1.100/24 sudo nmcli con mod "有线连接" ipv4.gateway 192.168.1.1 sudo nmcli con mod "有线连接" ipv4.dns "8.8.8.8 114.114.114.114" sudo nmcli con mod "有线连接" ipv4.method manual sudo nmcli con up "有线连接"安装基础工具包
sudo yum install -y vim wget curl net-tools lsof telnet tree htop
3. 核心命令实战解析
3.1 文件操作黄金命令集
掌握这些命令可以解决90%的日常文件操作需求:
# 查看目录大小(人类可读格式) du -sh * # 查找并删除7天前的日志文件 find /var/log -name "*.log" -mtime +7 -exec rm -f {} \; # 快速比较两个目录差异 diff -rq dir1 dir2 # 批量重命名(将所有.txt改为.md) rename .txt .md *.txt3.2 网络诊断三板斧
当网络出现问题时,这三个命令组合使用能快速定位问题:
# 检查网络连通性 ping -c 4 baidu.com # 查看路由路径 traceroute baidu.com # 检查端口开放情况 telnet baidu.com 80更专业的网络分析可以用tcpdump:
# 捕获eth0网卡的HTTP流量 sudo tcpdump -i eth0 -A port 804. 系统管理进阶技巧
4.1 服务管理systemd详解
CentOS 7开始使用systemd替代传统的init系统。常用操作:
# 查看服务状态 systemctl status nginx # 设置开机启动 systemctl enable nginx # 立即启动服务 systemctl start nginx # 查看服务依赖关系 systemctl list-dependencies nginx4.2 日志分析实战
系统日志集中在/var/log目录,几个关键日志文件:
- /var/log/messages:系统常规日志
- /var/log/secure:认证相关日志
- /var/log/cron:定时任务日志
使用journalctl可以查看systemd日志:
# 查看最近50条内核日志 journalctl -k -n 50 # 跟踪查看nginx服务日志 journalctl -u nginx -f5. 常见问题排错指南
5.1 磁盘空间告急处理
当收到磁盘空间报警时,按照这个流程排查:
快速定位大文件
du -ahx / | sort -rh | head -20检查inode使用情况(有时文件数过多也会导致问题)
df -i清理旧内核(长期运行的系统容易积累多个内核版本)
rpm -q kernel sudo package-cleanup --oldkernels --count=2
5.2 性能瓶颈分析
系统变慢时,使用这个命令组合快速诊断:
# 综合性能概览(1秒刷新一次) dstat -tcmnd --disk-util 1 # CPU使用率TOP top -c -o %CPU # 内存使用TOP top -c -o %MEM # IO等待分析 iostat -x 16. 开发环境配置
6.1 Python多版本管理
CentOS自带Python2,但现代开发需要Python3:
# 安装Python3.8 sudo yum install -y python38 python38-devel # 设置替代版本 sudo alternatives --set python /usr/bin/python3 # 安装pip curl https://bootstrap.pypa.io/get-pip.py | python36.2 Docker环境部署
在CentOS上安装Docker的推荐方式:
# 卸载旧版本 sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine # 安装依赖 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # 添加仓库 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 安装Docker sudo yum install -y docker-ce docker-ce-cli containerd.io # 启动服务 sudo systemctl start docker sudo systemctl enable docker7. 安全加固建议
7.1 基础安全配置
生产环境必须做的几项安全设置:
修改SSH默认端口
sudo sed -i 's/#Port 22/Port 2222/g' /etc/ssh/sshd_config sudo systemctl restart sshd禁用root远程登录
sudo sed -i 's/#PermitRootLogin yes/PermitRootLogin no/g' /etc/ssh/sshd_config配置防火墙规则
sudo firewall-cmd --permanent --add-port=2222/tcp sudo firewall-cmd --reload
7.2 定期安全检查
建议每月执行的安全检查脚本:
# 检查异常用户 awk -F: '($3 == 0) {print $1}' /etc/passwd # 检查SUID文件 find / -perm -4000 -type f -exec ls -la {} \; 2>/dev/null # 检查异常进程 ps aux | awk '{print $1,$11}' | sort | uniq -c | sort -nr | head -208. 备份与恢复策略
8.1 系统级备份
使用tar进行全系统备份(排除不需要的目录):
sudo tar -cvpzf /backup/centos_backup_$(date +%Y%m%d).tar.gz \ --exclude=/backup \ --exclude=/proc \ --exclude=/lost+found \ --exclude=/sys \ --exclude=/mnt \ --exclude=/media \ --exclude=/run \ /8.2 增量备份方案
结合rsync的增量备份脚本示例:
#!/bin/bash SOURCE_DIR="/var/www/html" BACKUP_DIR="/backup/web" LOG_FILE="/var/log/backup.log" # 每日增量备份 rsync -avz --delete --link-dest=$BACKUP_DIR/latest $SOURCE_DIR $BACKUP_DIR/$(date +%Y%m%d) >> $LOG_FILE 2>&1 # 更新latest链接 rm -f $BACKUP_DIR/latest ln -s $BACKUP_DIR/$(date +%Y%m%d) $BACKUP_DIR/latest9. 性能调优实战
9.1 内核参数优化
/etc/sysctl.conf中的关键参数调整:
# 避免TCP TIME_WAIT状态过多 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 # 增加文件描述符限制 fs.file-max = 65535 # 内存相关优化 vm.swappiness = 10 vm.overcommit_memory = 1应用配置:
sudo sysctl -p9.2 磁盘IO优化
针对SSD的优化方案:
# 查看调度器 cat /sys/block/sda/queue/scheduler # 修改为deadline(SSD推荐) echo 'deadline' | sudo tee /sys/block/sda/queue/scheduler # 禁用访问时间记录 sudo mount -o remount,noatime /10. 容器化转型路径
10.1 传统服务容器化
将已有服务迁移到容器的步骤:
分析服务依赖
ldd $(which nginx) rpm -q --whatprovides libssl.so.10编写Dockerfile
FROM centos:7 RUN yum install -y epel-release && \ yum install -y nginx && \ yum clean all COPY nginx.conf /etc/nginx/nginx.conf EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]构建并运行
docker build -t my-nginx . docker run -d -p 80:80 --name nginx my-nginx
10.2 Kubernetes集群部署
使用kubeadm部署生产级集群的注意事项:
所有节点关闭swap
sudo swapoff -a sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab安装必要组件
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOF sudo yum install -y kubelet kubeadm kubectl sudo systemctl enable --now kubelet初始化控制平面
sudo kubeadm init --pod-network-cidr=10.244.0.0/16