泷(Enigma)

博客园 首页 新随笔 联系 订阅 管理

一、项目概述

项目名称 校园服务器运维与监控容灾平台
项目类型 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/

image_3f8b6d7a

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 后手动设密码

十、项目总结与收获

本项目从零搭建了一个模拟企业级运维环境,完整实践了:

  1. 服务器初始化与安全加固:3 台 CentOS 7 虚拟机,关闭防火墙/SELinux,时间同步
  2. 基础中间件部署:Nginx 反向代理、MariaDB、Redis 安装与配置
  3. Docker 容器化:镜像加速、Nginx 容器、MySQL 容器部署与管理
  4. Shell 自动化运维:系统资源巡检脚本 + 数据库定时备份 + Crontab 定时任务
  5. 监控平台搭建:Prometheus 采集指标 + Grafana 可视化大屏,覆盖 3 台服务器
  6. 容灾演练:模拟数据误删、用备份文件恢复,形成完整容灾闭环
  7. 故障排查:记录了 6+ 个真实排错案例,覆盖 YAML 语法、网络限制、包源缺失等常见问题
posted on 2026-05-14 16:25  泷(Enigma)  阅读(0)  评论(0)    收藏  举报