一、项目概述
| 项目名称 | 校园服务器运维与监控容灾平台 |
|---|---|
| 项目类型 | Linux 运维 / 云运维实战项目 |
| 运行环境 | CentOS 7.9 + VMware 虚拟机 |
| 项目周期 | 2026 年 5 月 |
二、项目架构
2.1 服务器规划
| 主机名 | IP 地址 | 角色 | 部署组件 |
|---|---|---|---|
| Host | 192.168.73.100 | 监控主节点 | Prometheus、Grafana、Node Exporter |
| from1 | 192.168.73.101 | Web 应用服务器 | Nginx(宿主机+容器)、Docker、Node Exporter |
| from2 | 192.168.73.102 | DB 数据库服务器 | MariaDB、Redis、Node Exporter、备份脚本 |
2.2 架构图(文字描述)
浏览器 → Nginx 反向代理(101:80) → 百度首页(模拟后端应用)
浏览器 → Grafana(100:3000) → Prometheus(100:9090) → Node Exporter(100:9100/101:9100/102:9100)
Docker 容器 Nginx(101:8080) / MySQL(101:3306)
Crontab 定时备份(102) → /backup/mysql/
2.3 核心技术栈
- 操作系统:CentOS 7.9
- 基础服务:Nginx、MariaDB 5.5、Redis
- 容器技术:Docker CE 26.1.4
- 自动化:Shell 脚本 + Crontab 定时任务
- 监控组件:Prometheus 2.53.0、Grafana、Node Exporter 1.8.2
- 连接工具:MobaXterm / Tabby
三、环境准备与系统初始化
3.1 虚拟机配置
- 三台 VMware 虚拟机,2 核 4G、磁盘 40G
- 网络模式:桥接,固定 IP(73.x 网段)
- 操作系统:CentOS 7.9
3.2 初始化操作(三台均执行)
# 关闭防火墙和 SELinux
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 安装基础工具
yum install -y wget vim net-tools lrzsz tree ntpdate
# 时间同步
ntpdate ntp.aliyun.com
# 历史命令格式化
echo 'export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "' >> /etc/profile
source /etc/profile
四、基础服务部署运维
4.1 Nginx(Web 服务器 from1:101)
# 安装 EPEL 源(CentOS 7 默认仓库不含 Nginx)
yum install -y epel-release
# 安装 Nginx
yum install -y nginx
systemctl start nginx
systemctl enable nginx
4.2 Nginx 反向代理配置
编辑 /etc/nginx/nginx.conf,在 server 块中添加:
location / {
proxy_pass http://www.baidu.com;
proxy_set_header Host www.baidu.com;
proxy_set_header X-Real-IP $remote_addr;
}
重载配置:nginx -t && systemctl reload nginx
访问 http://192.168.73.101 显示百度首页,验证成功。
4.3 MariaDB(DB 服务器 from2:102)
yum install -y mariadb-server mariadb
systemctl start mariadb
systemctl enable mariadb
root 初始密码为空,直接登录后设置密码:
mysql -u root
USE mysql;
UPDATE user SET password=PASSWORD('123456') WHERE User='root';
FLUSH PRIVILEGES;
EXIT;
4.4 Redis(DB 服务器 from2:102)
yum install -y epel-release
yum install -y redis
systemctl start redis
systemctl enable redis
redis-cli ping # 返回 PONG 即成功
五、Docker 容器化运维实践
5.1 Docker 安装(Web 服务器 from1:101)
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce
systemctl start docker
systemctl enable docker
5.2 镜像加速配置
国内直连 Docker Hub 超时,配置镜像加速器:
mkdir -p /etc/docker
cat > /etc/docker/daemon.json << 'EOF'
{
"registry-mirrors": ["https://docker.m.daocloud.io"]
}
EOF
systemctl restart docker
5.3 容器部署
# Nginx 容器(映射宿主机 8080 端口)
docker run -d --name nginx-test -p 8080:80 nginx
# MySQL 5.7 容器(映射宿主机 3306 端口)
docker run -d --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
访问 http://192.168.73.101:8080 验证 Nginx 容器欢迎页。
六、Shell 自动化运维脚本
6.1 系统巡检脚本(Monitor 100)
/root/check_sys.sh:
#!/bin/bash
echo "======== 系统巡检报告 $(date) ========"
echo "主机名: $(hostname)"
echo "运行时间: $(uptime -p)"
echo ""
echo "--- CPU 使用率 ---"
top -bn1 | grep "Cpu(s)" | awk '{print "CPU 使用率: " 100-$8 "%"}'
echo ""
echo "--- 内存使用 ---"
free -h | awk '/Mem/{print "已用/总计: " $3 "/" $2}'
echo ""
echo "--- 磁盘使用 ---"
df -h / | awk 'NR==2{print "已用/总计: " $3 "/" $2 " (" $5 ")"}'
echo "======================================"
6.2 数据库定时备份脚本(DB 服务器 102)
/root/backup_mysql.sh:
#!/bin/bash
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
mysqldump -u root -p123456 --all-databases > $BACKUP_DIR/db_$DATE.sql
find $BACKUP_DIR -name "db_*.sql" -mtime +7 -delete
echo "备份完成: db_$DATE.sql"
6.3 Crontab 定时任务
crontab -e
# 添加:0 2 * * * /root/backup_mysql.sh
七、Prometheus + Grafana 监控平台
7.1 Prometheus 部署(Monitor 100)
cd /opt
wget https://github.com/prometheus/prometheus/releases/download/v2.53.0/prometheus-2.53.0.linux-amd64.tar.gz
tar xf prometheus-2.53.0.linux-amd64.tar.gz
mv prometheus-2.53.0.linux-amd64 /usr/local/prometheus
创建 systemd 服务 /etc/systemd/system/prometheus.service,启动并启用。
7.2 Node Exporter 部署(三台全部安装)
cd /opt
wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz
tar xf node_exporter-1.8.2.linux-amd64.tar.gz
mv node_exporter-1.8.2.linux-amd64 /usr/local/node_exporter
创建 systemd 服务,启动监听 9100 端口。
7.3 Prometheus 配置文件
/usr/local/prometheus/prometheus.yml:
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'servers'
static_configs:
- targets:
- '192.168.73.100:9100'
- '192.168.73.101:9100'
- '192.168.73.102:9100'
7.4 Grafana 部署与仪表盘
yum install -y grafana
systemctl start grafana-server
systemctl enable grafana-server
访问 http://192.168.73.100:3000,默认账号 admin/admin。
- 添加 Prometheus 数据源(URL:
http://192.168.73.100:9090) - 导入 Node Exporter Full 仪表盘(Grafana ID: 1860)
最终实现三台服务器 CPU、内存、磁盘、网络的实时可视化监控大屏。
八、备份与容灾演练
8.1 手动备份
/root/backup_mysql.sh
ls /backup/mysql/
8.2 模拟故障恢复流程
# 创建测试数据库
mysql -u root -p123456 -e "CREATE DATABASE test_recover;"
# 删除测试数据库(模拟误删)
mysql -u root -p123456 -e "DROP DATABASE test_recover;"
# 用备份文件恢复
mysql -u root -p123456 < /backup/mysql/db_具体日期时间.sql
# 验证恢复结果
mysql -u root -p123456 -e "SHOW DATABASES;"
备份→删除→恢复的完整容灾闭环验证通过。
九、项目中的故障排查记录
| 故障现象 | 排查过程 | 解决方法 |
|---|---|---|
| yum 找不到 nginx 包 | yum repolist 发现无 EPEL |
yum install -y epel-release |
| Nginx 装错机器(装到 100) | 终端标签混淆 | yum remove -y nginx 卸载,在 101 重新安装 |
| Docker 镜像拉取超时 | 国内直连 Docker Hub 失败 | 配置 daemon.json 镜像加速器 |
| Prometheus 启动失败 | 日志报 static_configs already set |
vim 编辑导致 YAML 重复,用 cat 命令重建配置文件 |
| Prometheus 页面 403 | 清华镜像源限制 GitHub 下载 | 换用 GitHub 官方地址或镜像代理 |
| Grafana 仪表盘部分无数据 | 旧模板兼容性问题 | 重新导入 1860 或 16098,配置数据源 |
| mysql_secure_installation 报 Access denied | root 密码冲突 | 空密码直接登录 mysql 后手动设密码 |
十、项目总结与收获
本项目从零搭建了一个模拟企业级运维环境,完整实践了:
- 服务器初始化与安全加固:3 台 CentOS 7 虚拟机,关闭防火墙/SELinux,时间同步
- 基础中间件部署:Nginx 反向代理、MariaDB、Redis 安装与配置
- Docker 容器化:镜像加速、Nginx 容器、MySQL 容器部署与管理
- Shell 自动化运维:系统资源巡检脚本 + 数据库定时备份 + Crontab 定时任务
- 监控平台搭建:Prometheus 采集指标 + Grafana 可视化大屏,覆盖 3 台服务器
- 容灾演练:模拟数据误删、用备份文件恢复,形成完整容灾闭环
- 故障排查:记录了 6+ 个真实排错案例,覆盖 YAML 语法、网络限制、包源缺失等常见问题
浙公网安备 33010602011771号