网站搭建好后采用高可用集群方案(Nginx 负载均衡 + 双机热备)实现网站稳定运行

简介: 网站建设好后,部署在云服务器上,网站的稳定运行直接关第到网站在搜索引挚排名中的表现,如果服务器中途崩溃,流量会被搜索引挚处罚,最严重的结果就是网站流量给清零,这可不是站长们想要的结果,下面就详细说明通过负载均衡 + 双机热备方案实现网站稳定运行:

网站建设好后,部署在云服务器上,网站的稳定运行直接关第到网站在搜索引挚排名中的表现,如果服务器中途崩溃,流量会被搜索引挚处罚,最严重的结果就是网站流量给清零,这可不是站长们想要的结果,下面就详细说明通过Nginx 负载均衡 + 双机热备方案实现网站稳定运行:

方案架构图

     互联网用户
          ↓
┌─────────────────────┐
│   阿里云 SLB/Nginx   │  (健康检查 + 负载均衡)
│   47.xxx.xxx.100     │
└─────────────────────┘
          ↓
     (自动分发)
          ↓
┌──────────┴──────────┐
↓                     ↓

┌─────────┐ ┌─────────┐
│服务器 A │ │服务器 B │
│(主节点) │ │(备节点) │
│47.x.x.1 │ │47.x.x.2 │
└─────────┘ └─────────┘
↓ ↓
└──────────┬──────────┘

┌─────────────────────┐
│ 阿里云 RDS 数据库 │ (主从同步)
│ MySQL 主备实例 │
└─────────────────────┘

┌─────────────────────┐
│ 阿里云 NAS/OSS │ (共享文件存储)
│ 文件同步 │
└─────────────────────┘

【一、核心组件】

  1. 负载均衡层
    ├── 阿里云 SLB (推荐)
    │ ├── 公网 IP + 固定带宽
    │ ├── 健康检查: 每 5 秒检测一次
    │ ├── 失败阈值: 连续 3 次失败则剔除
    │ └── 恢复检测: 连续 3 次成功则恢复

    └── 自建 Nginx (备选)

    ├── 独立服务器/轻量服务器
    └── nginx upstream 健康检查模块
    
  2. 应用服务器层 (双节点)
    ├── 服务器 A (主) - 阿里云 ECS
    │ ├── CPU: 4核
    │ ├── 内存: 8GB
    │ ├── 系统盘: 40GB
    │ ├── 数据盘: 100GB
    │ └── Tomcat 9 + Cms

    └── 服务器 B (备) - 阿里云 ECS (相同配置)

    └── 实时同步状态
    
  3. 数据库层
    ├── 阿里云 RDS MySQL (主备版)
    │ ├── 自动主从同步
    │ ├── 自动故障切换
    │ └── 数据一致性保证

    └── 或自建数据库主从复制

    ├── 服务器 A: MySQL 主库
    └── 服务器 B: MySQL 从库
    
  4. 文件存储层
    ├── 阿里云 NAS (推荐)
    │ ├── 双节点同时挂载
    │ ├── 自动同步
    │ └── 高可用保证

    └── 或自建文件同步

    ├── rsync + inotify 实时同步
    └── /opt/tomcat11/webapps/ROOT/
    

【二、工作原理】

  1. 正常状态
    ┌────────────┐
    │ SLB 接收请求 │
    │ ↓ │
    │ 健康检查 A: ✓ 正常 │
    │ 健康检查 B: ✓ 正常 │
    │ ↓ │
    │ 按权重分发 (A: 100%, B: 0%) │
    │ ↓ │
    │ 所有流量 → 服务器 A │
    └─────────────┘

  2. A 故障切换
    ┌────────────┐
    │ 服务器 A 崩溃 │
    │ ↓ │
    │ SLB 健康检查失败 (15秒内) │
    │ ↓ │
    │ 自动剔除 A │
    │ ↓ │
    │ 所有流量 → 服务器 B │
    │ ↓ │
    │ 用户无感知 (切换时间 < 1秒) │
    └──────────────┘

  3. A 恢复上线
    ┌────────────┐
    │ 修复服务器 A │
    │ ↓ │
    │ 启动 Tomcat │
    │ ↓ │
    │ SLB 健康检查成功 │
    │ ↓ │
    │ 自动加入集群 │
    │ ↓ │
    │ 流量逐步切回 A │
    └────────────┘

【三、详细配置步骤】

步骤1: 准备两台服务器

服务器 A (主)

  • 区域: 华南1 (广州)
  • IP: 47.xxx.xxx.101
  • 安装: Tomcat 9 + Cms
  • 状态: 当前运行中

服务器 B (备)

  • 区域: 华南1 (广州) - 必须同区域!
  • IP: 47.xxx.xxx.102
  • 安装: 与 A 完全相同的环境
  • 状态: 待部署

服务器 B 快速部署方法:

  1. 购买与 A 相同配置的 ECS
  2. 使用 A 的系统盘创建镜像
  3. 用镜像创建 B (最快,配置完全一致)
  4. 修改 B 的配置文件 (IP、hostname)

步骤2: 配置数据库 (选择其一)

【方案 A: 阿里云 RDS (推荐)】

  1. 购买 RDS MySQL 主备版

    • 规格: 2核4GB 起步
    • 存储: 100GB
    • 自动主从同步、自动故障切换
  2. 迁移数据库

    # 在服务器 A 导出
    mysqldump -h127.0.0.1 -ucms -p cms > cms.sql
    
    # 导入到 RDS
    mysql -hRDS地址 -ucms -p cms < cms.sql
    
  3. 修改两台服务器配置

    # 服务器 A 和 B 都修改
    vim /opt/tomcat11/webapps/ROOT/WEB-INF/config/cms.properties
    
    # 修改数据库地址为 RDS 内网地址
    db.pool.default.jdbcUrl=jdbc:mysql://rm-xxxxx.mysql.rds.aliyuncs.com:3306/cms
    

【方案 B: 自建数据库主从】

  1. 服务器 A 配置为主库

    vim /etc/my.cnf
    [mysqld]
    server-id=1
    log-bin=mysql-bin
    binlog-do-db=cms
    
  2. 服务器 B 配置为从库

    vim /etc/my.cnf
    [mysqld]
    server-id=2
    relay-log=mysql-relay-bin
    read_only=1
    
  3. 配置主从复制

    -- 在主库 A 执行
    CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
    FLUSH PRIVILEGES;
    SHOW MASTER STATUS;  -- 记录 File 和 Position
    
    -- 在从库 B 执行
    CHANGE MASTER TO
      MASTER_HOST='47.xxx.xxx.101',
      MASTER_USER='repl',
      MASTER_PASSWORD='password',
      MASTER_LOG_FILE='mysql-bin.000001',
      MASTER_LOG_POS=154;
    START SLAVE;
    SHOW SLAVE STATUS\G  -- 确认同步正常
    

步骤3: 配置文件同步 (选择其一)

【方案 A: 阿里云 NAS (推荐)】

  1. 购买 NAS 文件系统

    • 类型: 通用型 NAS
    • 协议: NFS
  2. 在两台服务器挂载

    # 安装 NFS 客户端
    yum install -y nfs-utils
    
    # 挂载 NAS
    mount -t nfs -o vers=3 file-system-id.region.nas.aliyuncs.com:/ /mnt/nas
    
    # 开机自动挂载
    echo "file-system-id.region.nas.aliyuncs.com:/ /mnt/nas nfs vers=3,defaults 0 0" >> /etc/fstab
    
  3. 迁移 Cms 文件

    # 停止 Tomcat
    /opt/tomcat11/bin/shutdown.sh
    
    # 复制到 NAS
    cp -r /opt/tomcat11/webapps/ROOT /mnt/nas/cms
    
    # 创建软链接
    rm -rf /opt/tomcat11/webapps/ROOT
    ln -s /mnt/nas/cms /opt/tomcat11/webapps/ROOT
    
    # 启动 Tomcat
    /opt/tomcat11/bin/startup.sh
    

【方案 B: rsync 实时同步】

  1. 在服务器 B 安装 rsync

    yum install -y rsync inotify-tools
    
  2. 创建同步脚本 (在服务器 A)

    vim /opt/sync.sh
    
    #!/bin/bash
    # 实时同步到服务器 B
    
    SRC="/opt/tomcat11/webapps/ROOT/"
    DEST="root@47.xxx.xxx.102:/opt/tomcat11/webapps/ROOT/"
    
    # 排除不需要同步的目录
    EXCLUDE="--exclude=work --exclude=logs --exclude=temp"
    
    # 初始全量同步
    rsync -avz $EXCLUDE $SRC $DEST
    
    # 监控文件变化并实时同步
    inotifywait -mrq --timefmt '%Y-%m-%d %H:%M:%S' --format '%T %w%f %e' \
    -e modify,create,delete,attrib $SRC | while read date time file event
    do
        rsync -avz $EXCLUDE $SRC $DEST
        echo "$date $time $file $event 已同步"
    done
    
  3. 配置 SSH 免密登录

    ssh-keygen -t rsa
    ssh-copy-id root@47.xxx.xxx.102
    
  4. 启动同步服务

    chmod +x /opt/sync.sh
    nohup /opt/sync.sh > /var/log/sync.log 2>&1 &
    

步骤4: 配置阿里云 SLB (推荐方案)

  1. 创建 SLB 实例

    - 进入阿里云控制台
    - 产品: 传统型负载均衡 CLB
    - 网络类型: 公网
    - 规格: 性能保障型 (slb.s2.small)
    - 价格: ¥200-300/月
    
  2. 添加监听器

    监听协议: HTTPS/443
    └── SSL 证书: 选择已有证书
    └── 后端协议: HTTP/8080
    
    健康检查:
    ├── 检查方法: HEAD
    ├── 检查路径: /
    ├── 检查间隔: 5秒
    ├── 响应超时: 3秒
    ├── 健康阈值: 3次
    └── 不健康阈值: 3次
    
    会话保持: 开启 (Cookie, 超时1800秒)
    
  3. 添加后端服务器

    服务器 A:
    ├── IP: 47.xxx.xxx.101
    ├── 端口: 8080
    └── 权重: 100
    
    服务器 B:
    ├── IP: 47.xxx.xxx.102
    ├── 端口: 8080
    └── 权重: 0 (备用,平时不接收流量)
    
  4. 修改域名解析

    将域名 A 记录指向 SLB 公网 IP
    www.wangzhanjianshe9.com.cn → SLB IP
    
  5. 测试故障切换

    # 在服务器 A 停止 Tomcat
    /opt/tomcat11/bin/shutdown.sh
    
    # 观察 SLB 日志
    # 应该在 15 秒内自动切换到服务器 B
    
    # 访问网站,应该正常
    curl https://www.wangzhanjianshe9.com.cn
    

步骤5: 配置自建 Nginx (备选方案)

如果不用 SLB,可以自建 Nginx 负载均衡

  1. 准备 Nginx 服务器 (轻量服务器即可)

    yum install -y nginx
    
  2. 配置 Nginx

    vim /etc/nginx/nginx.conf
    
    upstream cms_backend {
         
        # 服务器 A (主)
        server 47.xxx.xxx.101:8080 weight=100 max_fails=3 fail_timeout=30s;
    
        # 服务器 B (备)
        server 47.xxx.xxx.102:8080 weight=0 max_fails=3 fail_timeout=30s backup;
    
        # 健康检查 (需要 nginx-plus 或第三方模块)
        # 免费方案: 使用 max_fails 被动检查
    }
    
    server {
         
        listen 80;
        listen 443 ssl http2;
        server_name www.wangzhanjianshe9.com.cn;
    
        ssl_certificate /etc/nginx/ssl/cert.pem;
        ssl_certificate_key /etc/nginx/ssl/key.pem;
    
        location / {
         
            proxy_pass http://cms_backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
    
            # 超时设置
            proxy_connect_timeout 30s;
            proxy_send_timeout 30s;
            proxy_read_timeout 30s;
        }
    
        # 健康检查端点 (可选)
        location /health {
         
            access_log off;
            return 200 "OK";
        }
    }
    
  3. 启动 Nginx

    nginx -t
    systemctl start nginx
    systemctl enable nginx
    
  4. 主动健康检查脚本 (弥补 Nginx 被动检查的不足)

    vim /opt/nginx_health_check.sh
    
    #!/bin/bash
    # Nginx 主动健康检查
    
    BACKEND_A="http://47.xxx.xxx.101:8080/"
    BACKEND_B="http://47.xxx.xxx.102:8080/"
    NGINX_CONF="/etc/nginx/nginx.conf"
    
    while true; do
        # 检查 A 是否正常
        if curl -sf -m 5 "$BACKEND_A" > /dev/null; then
            # A 正常,确保权重为 100
            sed -i 's/weight=0 /weight=100 /' $NGINX_CONF
            sed -i 's/weight=100 backup/weight=0 backup/' $NGINX_CONF
            nginx -s reload
        else
            # A 异常,切换到 B
            sed -i 's/weight=100 /weight=0 /' $NGINX_CONF
            sed -i 's/weight=0 backup/weight=100 backup/' $NGINX_CONF
            nginx -s reload
    
            # 发送报警 (可选)
            echo "服务器 A 故障,已切换到 B" | mail -s "告警" admin@example.com
        fi
    
        sleep 10
    done
    
    chmod +x /opt/nginx_health_check.sh
    nohup /opt/nginx_health_check.sh > /var/log/health_check.log 2>&1 &
    

【四、成本分析】

【方案 A: 阿里云全托管 (推荐)】

【方案 B: 自建混合 (省钱)】

【方案 C: 最小化 (仅双机)】

【五、优缺点对比】

【方案 A: 阿里云全托管】
✅ 优点:

  • 自动故障切换 (< 1秒)
  • 自动数据库主从同步
  • 自动文件同步
  • 无需手动维护
  • 稳定性最高 (99.95% SLA)

❌ 缺点:

  • 成本较高

【方案 B: 自建混合】
✅ 优点:

  • 成本适中
  • 灵活可控
  • 性能足够

❌ 缺点:

  • 需要配置和维护
  • 数据库主从需要监控
  • 文件同步可能延迟

【方案 C: 最小化】
✅ 优点:

  • 成本最低
  • 实现基本高可用

❌ 缺点:

  • Nginx 单点故障风险
  • 需要较多手动配置
  • 文件同步不稳定

【六、运维管理】

  1. 日常监控

    # 检查集群状态
    curl https://www.wangzhanjianshe9.com.cn
    
    # 查看 SLB 日志 (阿里云控制台)
    # 查看后端服务器健康状态
    
    # 检查数据库同步
    mysql -e "SHOW SLAVE STATUS\G"
    
    # 检查文件同步
    tail -f /var/log/sync.log
    
  2. 故障演练

    # 模拟服务器 A 故障
    ssh 47.xxx.xxx.101 "/opt/tomcat11/bin/shutdown.sh"
    
    # 观察切换时间和用户体验
    # 应该在 15 秒内完成切换
    
    # 恢复服务器 A
    ssh 47.xxx.xxx.101 "/opt/tomcat11/bin/startup.sh"
    
  3. 告警配置

    阿里云监控:
    ├── CPU > 80%
    ├── 内存 > 80%
    ├── 磁盘 > 80%
    ├── Tomcat 进程消失
    └── 健康检查失败
    
    告警方式:
    ├── 短信
    ├── 电话
    └── 邮件
    
  4. 备份策略

    # 数据库自动备份 (RDS 自带)
    # 每天自动备份,保留 7 天
    
    # 文件手动备份
    tar -czf cms_backup_$(date +%Y%m%d).tar.gz \
        /opt/tomcat11/webapps/ROOT/
    
    # 上传到 OSS
    ossutil cp cms_backup_*.tar.gz oss://backup-bucket/
    

【七、注意事项】

⚠️ 1. Session 共享问题
Cms 后台登录 session 需要共享

解决方案:

  • 方案 A: 使用 Redis 共享 session
  • 方案 B: SLB 开启会话保持 (推荐)
  • 方案 C: 后台单独域名,不负载均衡

⚠️ 2. 缓存同步问题
Cms 内部缓存可能不一致

解决方案:

  • 发布内容后,清除两台服务器的缓存
  • 或使用集中式缓存 (Redis)

⚠️ 3. 定时任务问题
两台服务器可能重复执行定时任务

解决方案:

  • 只在主服务器启用定时任务
  • 或使用分布式任务调度

⚠️ 4. IP 白名单问题
如果 Cms 有 IP 限制,需要添加两台服务器 IP

⚠️ 5. 带宽成本
双机会增加数据库同步、文件同步的带宽消耗
建议使用内网同步

⚠️ 6. 安全组配置
确保两台服务器之间网络互通:

  • 服务器 A 安全组允许 B 的 IP
  • 服务器 B 安全组允许 A 的 IP
  • 端口: 3306(MySQL), 8080(Tomcat), 22(SSH)

【八、升级建议】

阶段 1: 基础高可用 (当前)
└── 双机热备 + 手动切换
成本: ¥600/月

阶段 2: 自动切换
└── 双机热备 + Nginx 自动切换
成本: ¥750/月

阶段 3: 数据库托管
└── 双机热备 + 自动切换 + RDS
成本: ¥1,350/月

阶段 4: 全托管 (推荐)
└── 双机热备 + SLB + RDS + NAS
成本: ¥1,585/月
稳定性: ⭐⭐⭐⭐⭐

【九、快速部署检查清单】

□ 1. 服务器准备
□ 购买服务器 B
□ 使用镜像克隆服务器 A
□ 修改 B 的主机名和配置

□ 2. 数据库配置
□ 购买 RDS 或配置主从
□ 迁移数据库
□ 修改连接字符串

□ 3. 文件同步
□ 购买 NAS 或配置 rsync
□ 测试文件同步

□ 4. 负载均衡
□ 购买 SLB 或配置 Nginx
□ 配置健康检查
□ 添加后端服务器

□ 5. DNS 配置
□ 修改域名解析到 SLB
□ 测试访问

□ 6. 测试验证
□ 正常访问测试
□ 故障切换测试
□ 恢复测试
□ 后台登录测试

□ 7. 监控告警
□ 配置阿里云监控
□ 设置告警规则
□ 测试告警通知

【十、技术支持】

阿里云文档:

常见问题:
Q: 切换会影响用户吗?
A: 用户无感知,最多 1-2 个请求失败后自动重试

Q: 服务器 B 平时闲置浪费吗?
A: 可以将 B 用于测试环境,或处理低优先级任务

Q: 成本能再降低吗?
A: 可以购买包年服务器,优惠约 30%

Q: 必须同区域吗?
A: SLB 必须同区域,跨区域延迟大且成本高

【最后更新】2026-04-01
【方案版本】v1.0
【适用场景】Cms 生产环境高可用部署

相关文章
|
1月前
|
缓存 NoSQL 应用服务中间件
Redis 实现网站加速:在 Alibaba Cloud Linux 3 + Tomcat 9 架构下的缓存实战
Tomcat 9 的安装与配置流程——在 **Alibaba Cloud Linux 3**(即阿里云官方维护的企业级 Linux 发行版,基于 OpenAnolis 内核,与 CentOS 7/8 生态高度兼容)上,从下载压缩包、解压到 `/opt/tomcat9`,到配置 `systemd` 服务、编写 `setenv.sh` 优化 JVM 参数(`-Xms512m -Xmx1024m -XX:+UseG1GC -XX:MaxGCPauseMillis=200`),最终让 Tomcat 在 8080 端口稳定对外提供服务。
|
3月前
|
人工智能 API 机器人
OpenClaw 用户部署和使用指南汇总
本文档为OpenClaw(原MoltBot)官方使用指南,涵盖一键部署(阿里云轻量服务器年仅68元)、钉钉/飞书/企微等多平台AI员工搭建、典型场景实践及高频问题FAQ。同步更新产品化修复进展,助力用户高效落地7×24小时主动执行AI助手。
29224 253
|
1月前
|
存储 弹性计算 运维
阿里云服务器ECS全方位介绍:架构、性能、适用场景、收费标准与活动价格
阿里云服务器ECS是卓越、稳定可靠的IaaS服务,免去前期IT硬件采购准备,实现计算资源即开即用与弹性伸缩,满足多种业务需求。ECS支持主流处理器架构,提供上百种实例规格,满足不同用户需求。其优势包括多样化计算能力、便捷易用、成本优化、弹性灵活、稳定可靠及安全保障。无论是轻量应用服务器还是第九代高性能实例,ECS均展现核心价值。阿里云还提供多种优惠活动和计费方式,助力企业和开发者低成本上云。
阿里云服务器ECS全方位介绍:架构、性能、适用场景、收费标准与活动价格
|
1月前
|
IDE 数据可视化 开发工具
Zed IDE官宣新招:Git Graph 正式支持!
Zed编辑器新PR正式支持Git Graph!亮点:画布列宽可拖拽调整、双击复位、级联重分布,视觉反馈细腻。首次将Git Graph深度集成至Table列宽系统,体验远超VS Code等IDE。macOS已丝滑支持,期待全平台覆盖与快捷键优化。(239字)
122 2
|
1月前
|
Kubernetes 网络协议 文件存储
Docker镜像拉了一下午还没完?我受够了,花了一周找替代方案
上周拉镜像卡在47%两小时?试遍阿里云、高校源、GitHub清单全失效。直到发现「毫秒镜像」——宝塔、爱快、绿联NAS已原生集成,金融级客户背书。一行命令安装,3秒拉完nginx,全仓库加速(Docker Hub/gcr/ghcr/k8s等),含DNS自诊。免费版够用,稳定不跑路。
699 18
|
1月前
|
人工智能 机器人 API
阿里云服务器玩转OpenClaw教程|免费领6月云服务器+配置+飞书接入+让龙虾成为公众号自动化智能分身指南
很多AI爱好者因为缺少稳定服务器,无法长期运行OpenClaw智能体。本文带来一套**零成本阿里云服务器部署方案**,手把手教你搭建OpenClaw环境,并将其改造成可以24小时运行的**公众号智能分身**,实现热点聚合、内容拆解、选题生成、公众号自动发布等全流程自动化能力。
350 24
|
18天前
|
自然语言处理 安全 测试技术
大模型+超自动化:实在Agent从“句意理解”到“跨系统闭环执行”的技术链路
本文剖析实在Agent“六层闭环技术架构”,直击企业级智能体落地核心痛点——“认知-执行断层”。通过垂直大模型+全栈超自动化深度融合,实现从自然语言指令到跨系统业务闭环执行的端到端自主化,兼具国产化适配、强合规与高稳定性,为AI工程化提供可落地的技术范式。
|
20天前
|
存储 人工智能 缓存
意图共鸣科技正式提出“AI记忆链”:让AI拥有长记忆、让用户拥有数据主权的新范式
AI记忆链是2026年提出的新型AI架构,首创“存储与算力双轨分离”模式:用户租用加密专属记忆空间(盲存,密钥自持),按需调用算力(Token计费)。它不替代大模型,而是为其赋予长期、私密、可迁移的“记忆能力”,让AI真正懂你、属于你。
189 9
|
1月前
|
人工智能 数据可视化 机器人
OpenClaw一键部署攻略,手把手教你 “养龙虾”!
还在为部署OpenClaw踩坑发愁?“养龙虾”其实超简单!本文奉上阿里云一键云端部署攻略:全程可视化、零代码,仅两步——买预装服务器+填API密钥,5分钟即可拥有专属AI数字员工!支持微信/钉钉协同、文件处理、日程管理、代码辅助等,新手友好,成本低廉(新用户首月9.9元+7000万Token免费额度)。
528 25
|
1月前
|
人工智能 API 开发者
阿里云百炼Coding Plan售罄,抢不到怎么办?附抢购攻略及备选方案
阿里云百炼Coding Plan Pro版因Lite停售而一票难求,每日9:30限量抢购,几分钟即罄。本文提供实操抢购技巧,并推荐百炼平台作为高性价比备选:支持同款大模型、新用户赠100万Tokens、按量付费,开通即用。
758 9

热门文章

最新文章