CentOS 7.6 最佳实践与性能优化
CentOS 7.6 作为一款稳定、可靠且广泛使用的企业级 Linux 发行版,在服务器领域占据着重要的地位。然而,为了充分发挥其潜力,确保系统安全、高效地运行,我们需要遵循一系列最佳实践并进行适当的性能优化。本文将深入探讨 CentOS 7.6 的最佳实践和性能优化策略,涵盖系统安装、安全加固、内核调优、网络优化、存储优化、应用程序优化以及监控与维护等方面。
一、 系统安装与初始化
-
选择合适的安装方式:
- 最小化安装: 强烈建议选择最小化安装(Minimal Install),只安装必要的软件包。这可以减少系统 footprint,降低安全风险,并提高性能。后续根据实际需要安装所需的软件包。
- 网络安装: 如果有多个服务器需要安装,可以考虑使用网络安装方式(PXE 启动),通过 Kickstart 文件实现自动化安装,提高部署效率。
- 自定义分区: 根据服务器的用途和数据存储需求,合理规划分区。建议至少创建以下分区:
/boot
:存放内核和引导加载程序。/
:根分区,存放系统文件。swap
:交换分区,当物理内存不足时使用。大小通常为物理内存的 1-2 倍,但不建议超过 8GB。/home
:(可选)如果服务器用作多用户环境,可以创建单独的/home
分区。/var
:存放日志、缓存等可变数据。建议单独分区,防止/
分区被填满。/tmp
:存放临时文件。建议单独分区,并设置noexec
、nodev
、nosuid
挂载选项。- 数据分区:根据应用需求创建单独的数据分区,例如
/data
。
-
配置网络:
- 静态 IP 地址: 服务器通常需要配置静态 IP 地址,以确保网络连接的稳定性。
- 主机名: 设置一个有意义的主机名,方便管理和识别。
- DNS 解析: 配置正确的 DNS 服务器地址,确保域名解析正常。
- 防火墙: 启用防火墙(firewalld),并配置必要的规则,只允许必要的网络流量通过。
-
更新系统:
- 安装完成后,立即更新系统到最新版本:
bash
yum update -y - 定期更新系统,以获取最新的安全补丁和功能更新。
- 安装完成后,立即更新系统到最新版本:
-
安装常用工具:
- 安装一些常用的系统管理工具,例如
vim
、wget
、curl
、net-tools
、htop
、iotop
、sysstat
等。
- 安装一些常用的系统管理工具,例如
二、 安全加固
安全性是服务器管理的重中之重。以下是一些关键的安全加固措施:
-
SSH 安全:
- 禁用 root 远程登录: 在
/etc/ssh/sshd_config
中设置PermitRootLogin no
。 - 使用密钥认证: 禁止密码登录,改用密钥认证。设置
PasswordAuthentication no
。 - 修改默认端口: 将 SSH 默认端口 22 修改为其他不常用的端口,例如 2222。设置
Port 2222
。 - 限制登录尝试次数: 使用
fail2ban
等工具,防止暴力破解。 - 启用双因素认证(2FA): 考虑使用 Google Authenticator 等工具实现双因素认证,进一步提高安全性。
- 禁用 root 远程登录: 在
-
防火墙配置:
- firewalld: CentOS 7 默认使用 firewalld 作为防火墙。学习并熟练使用
firewall-cmd
命令进行配置。 - 最小化开放端口: 只开放必要的端口,例如 SSH 端口(修改后的)、Web 服务端口(80/443)等。
- 限制访问来源: 对于某些服务,可以限制只允许特定的 IP 地址或 IP 段访问。
- 自定义规则: 根据实际需求,创建自定义的防火墙规则。
- firewalld: CentOS 7 默认使用 firewalld 作为防火墙。学习并熟练使用
-
SELinux:
- 启用 SELinux: CentOS 7 默认启用 SELinux。SELinux 提供强制访问控制(MAC),可以有效防止恶意程序或配置错误导致的系统破坏。
- 了解 SELinux 上下文: 学习 SELinux 的基本概念和管理工具,例如
semanage
、restorecon
、audit2allow
等。 - 排查 SELinux 问题: 当遇到由于 SELinux 导致的访问问题时,不要直接禁用 SELinux,而是应该通过查看日志(
/var/log/audit/audit.log
)和使用audit2allow
等工具来解决问题。
-
用户和权限管理:
- 最小权限原则: 为每个用户分配合适的权限,避免过度授权。
- sudo: 使用
sudo
命令来执行需要 root 权限的操作,而不是直接使用 root 用户登录。 - 定期审查用户: 定期检查系统中的用户和组,删除不再需要的用户和组。
-
系统日志:
- rsyslog: CentOS 7 默认使用 rsyslog 作为系统日志服务。
- 配置日志轮转: 配置日志轮转,防止日志文件过大。
- 集中日志管理: 考虑将多台服务器的日志集中到一个日志服务器上,方便统一管理和分析。
- 监控日志: 定期检查系统日志,及时发现和处理异常情况。
-
禁用不必要的服务:
- 使用
systemctl list-unit-files --type=service
查看系统中的服务。 - 禁用不需要的服务,例如
postfix
(如果不需要邮件服务)、cups
(如果不需要打印服务)等。 - 使用
systemctl disable <service_name>
禁用服务。
- 使用
-
定期安全审计:
- 使用
lynis
等工具进行系统安全审计,发现潜在的安全漏洞。 - 定期进行漏洞扫描,例如使用 Nessus 或 OpenVAS。
- 使用
三、 内核调优
内核调优可以显著提高系统性能。以下是一些常见的内核调优参数:
-
文件描述符限制:
- 修改
/etc/security/limits.conf
文件,增加文件描述符限制:
“`- soft nofile 65535
- hard nofile 65535
“`
- 或者通过
sysctl
临时修改:
bash
sysctl -w fs.file-max=65535
- 修改
-
网络参数调优:
- 修改
/etc/sysctl.conf
文件,添加以下参数(根据实际情况调整):
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0 # 不建议开启,可能导致 NAT 环境下连接问题
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 10000 65535
net.ipv4.tcp_syncookies = 1
net.core.netdev_max_backlog = 2500
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 65536 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_default = 8388608
net.core.wmem_max = 16777216 - 执行
sysctl -p
使配置生效。
- 修改
-
内存管理:
vm.swappiness
:控制系统使用 swap 分区的积极性。默认值为 60。对于服务器,建议降低此值,例如设置为 10 或 1。
bash
sysctl -w vm.swappiness=10vm.dirty_ratio
和vm.dirty_background_ratio
:控制脏页(已修改但未写入磁盘的内存页)的比例。根据服务器负载和 I/O 性能调整。
-
I/O 调度器:
- CentOS 7 默认的 I/O 调度器是
deadline
。对于 SSD,可以考虑使用noop
或deadline
。对于机械硬盘,deadline
或cfq
通常是较好的选择。 - 查看当前 I/O 调度器:
bash
cat /sys/block/<device>/queue/scheduler - 临时修改 I/O 调度器:
bash
echo noop > /sys/block/<device>/queue/scheduler - 永久修改 I/O 调度器:
- 编辑
/etc/default/grub
,在GRUB_CMDLINE_LINUX
行中添加elevator=noop
。 - 重新生成 grub 配置文件:
grub2-mkconfig -o /boot/grub2/grub.cfg
。 - 重启服务器。
- 编辑
- CentOS 7 默认的 I/O 调度器是
四、 网络优化
-
禁用 IPv6(如果不需要):
- 如果不需要 IPv6,可以禁用以减少资源占用和潜在的安全风险。
- 编辑
/etc/sysctl.conf
,添加以下内容:
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1 - 执行
sysctl -p
使配置生效。 - 在网络配置文件中(例如
/etc/sysconfig/network-scripts/ifcfg-eth0
)设置IPV6INIT=no
。
-
优化网络设备驱动程序:
- 确保使用最新版本的网络设备驱动程序。
- 对于某些高性能网卡,可以考虑使用厂商提供的专用驱动程序。
-
使用 TCP BBR 拥塞控制算法(如果内核版本支持):
- TCP BBR 是 Google 开发的一种拥塞控制算法,可以显著提高网络吞吐量和降低延迟。
- CentOS 7.6 内核版本较老,需要手动升级内核或者使用第三方仓库。
- 升级内核后,编辑
/etc/sysctl.conf
,添加以下内容:
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr - 执行
sysctl -p
使配置生效。
五、 存储优化
-
选择合适的文件系统:
- CentOS 7 默认使用 XFS 文件系统。XFS 是一种高性能、可扩展的文件系统,适合大多数服务器应用。
- 对于某些特定场景,例如数据库服务器,可以考虑使用 ext4 或其他文件系统。
-
优化挂载选项:
noatime
:禁用文件访问时间的更新,可以减少 I/O 操作。nodiratime
:禁用目录访问时间的更新。discard
:(对于 SSD)启用 TRIM 支持,可以提高 SSD 性能和寿命。data=ordered
:(对于 ext4)在写入数据之前先写入元数据,可以提高数据一致性。
-
RAID:
- 对于需要高可用性和数据冗余的服务器,使用 RAID 技术。
- 根据需求选择合适的 RAID 级别,例如 RAID 1(镜像)、RAID 5(带奇偶校验的条带化)、RAID 10(RAID 1 + RAID 0)。
- 使用硬件 RAID 控制器可以提高性能和可靠性。
-
LVM:
- 使用 LVM(逻辑卷管理器)可以灵活地管理磁盘空间,方便扩容和缩容。
- 创建 LVM 卷组和逻辑卷,并根据需要调整大小。
六、 应用程序优化
-
Web 服务器(例如 Nginx、Apache):
- Nginx:
- 调整 worker 进程数和连接数。
- 启用 Gzip 压缩。
- 配置缓存。
- 使用 keepalive 连接。
- 使用 upstream 负载均衡。
- Apache:
- 选择合适的 MPM 模块(prefork、worker 或 event)。
- 调整 MaxClients、MaxRequestsPerChild 等参数。
- 启用 Gzip 压缩。
- 配置缓存。
- Nginx:
-
数据库服务器(例如 MySQL、PostgreSQL):
- MySQL:
- 调整
innodb_buffer_pool_size
(对于 InnoDB 存储引擎)。 - 优化查询语句。
- 使用慢查询日志进行性能分析。
- 配置主从复制或集群。
- 调整
- PostgreSQL:
- 调整
shared_buffers
、work_mem
、maintenance_work_mem
等参数。 - 优化查询语句。
- 使用
pg_stat_statements
扩展进行性能分析。 - 配置流复制或逻辑复制。
- 调整
- MySQL:
-
PHP(如果使用):
- 使用 PHP-FPM。
- 调整
pm.max_children
、pm.start_servers
、pm.min_spare_servers
、pm.max_spare_servers
等参数。 - 启用 OPcache。
七、 监控与维护
-
系统监控:
- 使用
top
、htop
、vmstat
、iostat
、sar
等工具监控 CPU、内存、I/O 和网络等系统资源的使用情况。 - 使用
nmon
、glances
等工具进行更全面的系统监控。 - 考虑使用专业的监控系统,例如 Zabbix、Nagios、Prometheus + Grafana 等。
- 使用
-
日志监控:
- 定期检查系统日志和应用程序日志,及时发现和处理错误。
- 使用
logwatch
等工具自动分析日志。 - 考虑使用 ELK Stack(Elasticsearch、Logstash、Kibana)进行日志集中管理和分析。
-
性能分析:
- 使用
perf
、strace
、gdb
等工具进行性能分析,找出性能瓶颈。
- 使用
-
定期备份:
- 制定并执行定期备份策略,确保数据安全。
- 使用
rsync
、tar
、dump
等工具进行备份。 - 考虑使用云存储服务进行异地备份。
-
系统维护:
- 定期清理系统中的临时文件和过时的软件包。
总结
CentOS 7.6 的最佳实践和性能优化是一个持续的过程,需要根据服务器的实际用途和负载情况进行调整。本文提供了一系列通用的建议和策略,涵盖了系统安装、安全加固、内核调优、网络优化、存储优化、应用程序优化以及监控与维护等方面。通过遵循这些最佳实践并进行适当的性能优化,可以确保 CentOS 7.6 服务器安全、高效地运行,充分发挥其潜力。请注意,在进行任何配置更改之前,务必备份重要数据,并在测试环境中进行充分测试,以避免潜在的风险。