本文目录导读:
为什么需要配置物理服务器?
(案例引入)
某电商公司去年因为虚拟机性能不足导致促销活动崩溃,今年决定搭建4台物理服务器集群,负责人老张带着4个新入职的运维小妹,对着服务器白板上的IP地址和硬盘型号发愁,这时候就需要我们手把手教他们怎么用命令行配置服务器了。
基础配置四步走(表格对比更直观)
系统安装与分区
| 服务器型号 | 硬盘容量 | 推荐分区方案 |
|---|---|---|
| DELL PowerEdge R750 | 2TB | /dev/sda1(ESP): 512MB系统,/dev/sda2(根): 20GB,/dev/sda3(数据): 1.5TB |
| HPE ProLiant DL380 | 1TB | /dev/sda1(ESP): 1GB系统,/dev/sda2(根): 15GB,/dev/sda3(数据): 884GB |
实操命令:

# 系统安装后自动分区(CentOS) parted /dev/sda --script mklabel gpt mkpart ESP 512M 1G mkpart root 1G 20G mkpart data 20G 100% # 手动调整分区(需要先删除原有分区) parted /dev/sda --script mklabel gpt mkpart ESP 512M 1G mkpart root 1G 20G mkpart data 20G 100%
用户权限管理
# 创建管理员账户(密码复杂度要求) sudo useradd -m -s /bin/bash admin sudo passwd admin # 设置sudo权限(仅允许使用特定命令) echo "admin ALL=(ALL) NOPASSWD: /usr/bin/myscript.sh" >> /etc/sudoers
静态IP配置
# 编辑网络配置文件(CentOS 8) sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0 # 关键参数: IPADDR=192.168.1.100 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 ONBOOT=yes
首次登录安全加固
# 启用SSH密钥登录 sudo sed -i 's#PermitRootLogin no#PermitRootLogin yes#' /etc/ssh/sshd_config # 修改SSH端口(推荐22端口) sudo sed -i 's#Port 22#Port 2022#' /etc/ssh/sshd_config # 保存配置后重启服务 sudo systemctl restart sshd
网络配置实战(问答形式)
Q1:为什么4台服务器IP地址要规划在同一子网?
A:这样可以通过单台交换机实现设备互通,比如192.168.1.0/24子网下:
- 服务器1:192.168.1.100
- 服务器2:192.168.1.101
- 服务器3:192.168.1.102
- 服务器4:192.168.1.103
- 交换机:192.168.1.1
Q2:如何实现服务器间自动发现?
A:在每台服务器执行:
sudo nmcli connection modify eth0 autoconnect yes sudo systemctl enable network.target sudo systemctl start network.target
存储管理进阶(表格+案例)
RAID配置对比
| RAID级别 | 读写性能 | 容错能力 | 适用场景 |
|---|---|---|---|
| RAID0 | 速度优先 | ||
| RAID1 | 数据安全 | ||
| RAID5 | 成本平衡 |
案例: 某视频网站存储4TB视频素材,采用RAID10配置:
# 使用mdadm创建RAID10阵列(4块硬盘) sudo mdadm --create /dev/md0 --level=10 --raid-devices=4 /dev/sdb /dev/sdc /dev/sdd /dev/sde # 挂载到系统 echo "/dev/md0 /data ext4 defaults,nofail 0 0" >> /etc/fstab
LVM动态扩容
# 创建物理卷组 sudo pvcreate /dev/sdb1 # 创建逻辑卷 sudo lvcreate -l +100G /dev/md0 # 扩容逻辑卷(需先调整物理卷) sudo pvresize /dev/sdb1 /dev/sdc1 sudo lvextend -L +100G /dev/md0
安全加固三重奏
防火墙配置(iptables+firewalld)
# 允许SSH和HTTP服务 sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload
密码策略强化
# 修改密码复杂度要求 sudo nano /etc/pam.d password # 添加以下内容: 密码必需包含: - 至少8个字符 - 包含大写字母、小写字母、数字、特殊字符 - 90天内不能重复使用
日志审计(wazuh+ELK)
# 安装wazuh客户端 sudo yum install wazuh-agent -y # 配置服务端地址 sudo wazuh-ctl enroll --server 192.168.1.100 # 查看实时日志 sudo wazuh-ctl status
监控与维护(实战案例)
系统健康检查
# 每日自动执行脚本
#!/bin/bash
# CPU使用率
top -n 1 | grep "Cpu(s)" | awk '{print $2}'
# 内存使用率
free -m | awk 'NR==2 {print $3}'
# 磁盘IO
iostat -x 1 | grep sda
故障排查案例
场景: 服务器2突然无法访问
# 第一步:检查网络连接 ip a | grep eth0 # 第二步:查看防火
知识扩展阅读:
环境准备阶段
硬件配置建议 | 服务器类型 | CPU配置 | 内存 | 硬盘 | 网卡 | |------------|---------|------|------|------| | 核心业务服务器 | 16核以上 | 64GB | 2TB SSD | 双万兆网卡 | | 应用服务器 | 8核 | 32GB | 1TB SSD | 千兆网卡 | | 数据库服务器 | 12核 | 64GB | 2TB RAID | 双万兆网卡 | | 辅助服务器 | 4核 | 16GB | 500GB | 千兆网卡 |
软件环境准备
- 操作系统:CentOS 7.9 / Ubuntu 20.04
- 配置工具:Ansible 2.9+ / SaltStack
- 安全工具:ClamAV / rsyslog
基础配置阶段
网络配置
ipv4.gateway 192.168.1.1 ipv4.dns 8.8.8.8 \ ipv6.method ignore # 设置主机名 hostnamectl set-hostname server01 # 同步时区 timedatectl set-timezone Asia/Shanghai
安全基线配置
# 关闭SElinux setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config # 禁用root远程登录 sed -i 's/PermitRootLogin yes/PermitRootLogin prohibit-password/' /etc/ssh/sshd_config # 设置密码复杂度策略 authconfig --passalgo sha512 --enforce-passwords --update
网络配置进阶
VLAN划分示例

# 创建VLAN 10(管理网) vconfig add eth0 10 ip addr add 10.0.0.1/24 dev eth0.10 # 配置VLAN路由 echo "1: eth0.10" >> /etc/network/interfaces echo " inet 10.0.0.1/24" >> /etc/network/interfaces
防火墙策略
# 开放HTTP服务 firewall-cmd --permanent --add-service http firewall-cmd --reload # 允许特定IP访问 firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service http accept'
安全配置强化
密码策略配置
# 设置密码最短长度 authconfig --passminlen 12 --update # 禁用空密码账户 sed -i '/^PermitEmptyPasswords yes/c\PermitEmptyPasswords no' /etc/ssh/sshd_config
日志审计配置
# 启用登录审计 echo "auth required pam_tally2.so onerr=fail deny=6 unlock_time=600" >> /etc/pam.d/password-auth # 配置rsyslog集群 echo "local7.* @logserver:514" >> /etc/rsyslog.conf systemctl restart rsyslog
服务部署案例
LAMP环境部署
# 安装基础组件
yum install -y httpd php mysql-server php-mysql
# 配置虚拟主机
cat > /etc/httpd/conf.d/vhost.conf <<EOF
<VirtualHost *:80>
ServerName server01.example.com
DocumentRoot /var/www/html
ErrorLog logs/server01_error.log
</VirtualHost>
EOF
# 启动服务
systemctl enable --now httpd
systemctl enable --now mysqld
高可用集群配置
# 安装pacemaker
yum install -y pacemaker corosync
# 配置资源组
crm configure primitive fs_nginx ocf:heartbeat:Filesystem \
params device="/dev/sdb1" directory="/var/www/html" \
options "type=ext4" \
op monitor interval="10s"
crm configure ms ms_nginx fs_nginx master
配置验证
网络连通性测试
# 测试内网互通
for i in {10..13}; do ping -c 3 192.168.1.$i & done
# 测试外网访问
ab -c 100 -n 1000 http://server01.example.com/
安全状态检查
# 检查开放端口 ss -tulnp | grep -E 'LISTEN' # 检查防火墙状态 firewall-cmd --list-all # 检查SELinux状态 sestatus
常见问题解答
Q1:如何处理服务器时间不同步问题?
# 安装chrony服务 yum install chrony # 配置NTP服务器 echo "server 2.cn.pool.ntp.org" > /etc/chrony.conf # 启动服务 systemctl enable --now chronyd
Q2:忘记root密码怎么办?
# 进入单用户模式 reboot --force --enter-bios # 在GRUB菜单选择Recovery Mode -> Drop to root shell passwd root
Q3:如何实现服务器自动备份?
# 编写备份脚本 cat > /usr/local/bin/server-backup.sh <<EOF #!/bin/bash tar czf /backup/\$(hostname)-\$(date +%Y%m%d).tar.gz /etc EOF # 设置定时任务 echo "0 3 * * * root /usr/local/bin/server-backup.sh" > /etc/cron.d/server-backup
总结与建议
- 配置顺序:网络→基础安全→服务部署→验证
- 文档记录:使用Consul或Etcd管理配置信息
- 监控体系:部署Zabbix或Prometheus实现告警
- 备份策略:每日增量+每周全备,保留至少3个月历史
本指南基于CentOS 7.9编写,实际操作时请根据具体环境调整配置,生产环境建议启用SSL/TLS加密通信,并定期进行渗透测试。
相关的知识点:

