首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >腾讯云服务器 CVM 高可用 Web 架构部署最佳实践

腾讯云服务器 CVM 高可用 Web 架构部署最佳实践

原创
作者头像
用户12571138
发布2026-06-19 13:25:07
发布2026-06-19 13:25:07
3160
举报

一、概述

在实际生产环境中,单台云服务器往往面临单点故障风险。当服务器宕机、网络中断或遭遇流量高峰时,业务可能长时间不可用,造成用户体验下降甚至经济损失。本文基于腾讯云 CVM(Cloud Virtual Machine),结合负载均衡 CLB、云数据库 MySQL、对象存储 COS、弹性伸缩 AS 等服务,从零搭建一套高可用、可弹性伸缩的 Web 架构,适用于中小型企业网站、API 服务以及高并发业务场景。

适用对象

  • 需要使用腾讯云搭建生产环境的开发运维人员
  • 希望了解高可用架构设计的中级以上技术人员
  • 正在备考腾讯云技术认证的工程师

架构总览

用户请求 -> 域名解析 DNSPod -> 负载均衡 CLB -> CVM 集群(多可用区)

CVM 集群内部:

Web 节点 1 / Web 节点 2 / Web 节点 3

-> 云数据库 MySQL(主从)

-> 对象存储 COS(静态资源)

架构核心思路:

  • 多可用区部署:CVM 实例分布在不同可用区,避免单机房故障
  • 负载均衡:CLB 自动分发流量,后端实例故障时自动摘除
  • 数据库高可用:MySQL 一主一从或一主多从架构,自动故障切换
  • 弹性伸缩:根据 CPU/内存/连接数指标自动扩缩容
  • 静态资源分离:图片、CSS、JS 等静态文件存放 COS,配合 CDN 加速

二、前置准备

在开始部署之前,需要完成以下准备工作:

2.1 账号与权限

  1. 登录腾讯云控制台 https://console.cloud.tencent.com
  2. 确保账号已完成实名认证
  3. 创建子账号并授予以下权限:
  • QcloudCVMFullAccess(CVM 全读写)
  • QcloudCLBFullAccess(负载均衡全读写)
  • QcloudCDBFullAccess(云数据库全读写)
  • QcloudCOSFullAccess(对象存储全读写)
  • QcloudAutoScalingFullAccess(弹性伸缩全读写)

建议使用子账号进行操作,避免主账号 AK/SK 泄露风险。

2.2 资源预估

| 资源类型 | 规格建议 | 数量 | 用途 |

|----------|----------|------|------|

| CVM | 2核4G,系统盘50G | 2~3台 | Web 应用节点 |

| CLB | 标准型 | 1个 | 流量分发 |

| MySQL | 2核4G,磁盘100G | 1主1从 | 业务数据 |

| COS | 标准存储 | 1个存储桶 | 静态资源 |

| 弹性伸缩组 | - | 1组 | 自动扩缩容 |

以上为入门推荐配置,实际可根据业务预估流量调整。

三、创建云服务器 CVM

3.1 购买 CVM 实例

进入 CVM 控制台 https://console.cloud.tencent.com/cvm,点击新建。

关键配置项:

  • 计费模式:包年包月(长期稳定业务)/ 按量计费(弹性测试业务)
  • 地域:选择靠近用户的区域,如华东(上海)、华南(广州)
  • 可用区:将实例分布在不同可用区。例如上海二区 2 台、上海三区 1 台
  • 镜像:CentOS 7.9 64位(稳定兼容,社区生态好)
  • 系统盘:高性能云硬盘 50GB
  • 数据盘:根据需求挂载,建议使用 CBS 并定期快照
  • 公网带宽:按流量计费,峰值带宽根据业务设置

3.2 初始化服务器

代码语言:bash
复制
# SSH 登录

ssh -i /path/to/private\_key root@<公网IP>

 更新系统

yum update -y

 关闭 SELinux(生产环境建议按需配置)

setenforce 0

sed -i 's/^SELINUX=.\*/SELINUX=disabled/' /etc/selinux/config

调整系统参数

cat >> /etc/sysctl.conf << EOF

net.ipv4.tcp\_tw\_reuse = 1

net.ipv4.tcp\_fin\_timeout = 30

net.core.somaxconn = 65535

EOF

sysctl -p

安装常用工具

yum install -y wget curl vim git net-tools htop nginx

3.3 安装 Web 环境

以 Nginx + PHP 为例,安装 Web 运行环境:

代码语言:bash
复制
# 安装 Nginx

yum install -y nginx

systemctl enable nginx

systemctl start nginx

 安装 PHP 7.4

yum install -y epel-release

rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

yum install -y php74w php74w-fpm php74w-mysql php74w-mbstring php74w-xml php74w-gd

systemctl enable php-fpm

systemctl start php-fpm

安装 Redis(可选,用于缓存)

yum install -y redis

systemctl enable redis

systemctl start redis

四、配置负载均衡 CLB

4.1 创建 CLB 实例

  1. 进入 CLB 控制台 https://console.cloud.tencent.com/clb
  2. 点击新建负载均衡
  3. 选择与 CVM 相同的地域和网络类型(VPC)
  4. 实例类型选择应用型负载均衡(支持 HTTP/HTTPS 监听器、七层转发)
  5. 购买后获得一个 VIP(虚拟 IP)

4.2 配置监听器

HTTP 监听器示例配置:

  • 监听器名称: web-http-80
  • 前端协议/端口: HTTP / 80
  • 后端协议/端口: HTTP / 8080
  • 均衡方式: 加权轮询(WRR)
  • 会话保持: 启用(Cookie 植入方式)
  • 健康检查: 启用,检查路径 /health.html,间隔5秒,超时3秒,健康阈值3次

4.3 绑定后端 CVM

在 CLB 控制台中选择刚创建的监听器,绑定已初始化的 CVM 实例:

  1. 选择同一 VPC 下的 CVM
  2. 设置端口为各节点应用监听端口(如 8080)
  3. 设置权重(权重相同则均匀分发)

4.4 配置健康检查

在所有 CVM 节点上创建健康检查文件:

代码语言:bash
复制
echo 'OK' > /usr/share/nginx/html/health.html

CLB 的健康检查机制会定期访问此路径,当连续 3 次检查失败时,自动将异常节点移除,恢复后自动加入。

五、搭建数据库高可用

5.1 创建云数据库 MySQL

进入 MySQL 控制台 https://console.cloud.tencent.com/cdb,点击新建。

配置建议:

  • 计费模式:包年包月
  • 地域:与 CVM 同地域
  • 架构:双节点(一主一从,自动故障切换)
  • 规格:2核4GB 通用型
  • 硬盘:SSD 云硬盘 100GB
  • 版本:MySQL 8.0(推荐,性能与安全都优于 5.7)
  • 网络:与 CVM 同 VPC(内网访问免流量)

5.2 连接数据库

代码语言:sql
复制
-- 使用内网地址连接

mysql -h 10.0.x.x -u root -p

-- 创建业务数据库

CREATE DATABASE \`webapp\` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4\_unicode\_ci;

-- 创建业务用户并授权

CREATE USER 'webapp\_user'@'10.%' IDENTIFIED BY 'your\_strong\_password';

GRANT ALL PRIVILEGES ON webapp.\* TO 'webapp\_user'@'10.%';

FLUSH PRIVILEGES;

5.3 数据库连接最佳实践

在应用代码中配置数据库连接时,推荐使用连接池和重试机制。

PHP PDO 连接示例(支持主从分离):

代码语言:php
复制
<?php

// 主库配置(写操作)

$master = [

    'host'    => '10.0.x.x',

    'port'    => 3306,

    'dbname'  => 'webapp',

    'user'    => 'webapp\_user',

    'pass'    => 'your\_strong\_password',

];

// 从库配置(读操作)

$slaves = [

    [

        'host'    => '10.0.x.x',

        'port'    => 3306,

        'dbname'  => 'webapp',

        'user'    => 'webapp\_user',

        'pass'    => 'your\_strong\_password',

    ],

];

function getDBConnection($write = true) {

    global $master, $slaves

    if ($write || empty($slaves)) {

        $config = $master;

    } else {

        $config = $slaves[array\_rand($slaves)];

    }

    $dsn = sprintf('mysql:host=%s;port=%d;dbname=%s;charset=utf8mb4',

        $config['host'], $config['port'], $config['dbname']);  

    try {

        return new PDO($dsn, $config['user'], $config['pass'], [

            PDO::ATTR\_ERRMODE            => PDO::ERRMODE\_EXCEPTION,

            PDO::ATTR\_DEFAULT\_FETCH\_MODE => PDO::FETCH\_ASSOC,

            PDO::ATTR\_EMULATE\_PREPARES   => false,

        ]);

    } catch (PDOException $e) {

        error\_log('DB connection failed: ' . $e->getMessage());

        throw $e;

    }

}

?>

5.4 数据库备份策略

| 策略 | 频率 | 保留时间 |

|------|------|----------|

| 自动快照备份 | 每天一次 | 7天 |

| 日志备份(binlog) | 每5分钟 | 3天 |

| 手动全量备份 | 每周一次 | 30天 |

可在 MySQL 控制台备份恢复中一键配置。万一误删数据,可使用回档功能恢复到过去任意时间点。

六、静态资源托管 COS + CDN

6.1 创建存储桶

  1. 进入 COS 控制台 https://console.cloud.tencent.com/cos5
  2. 点击创建存储桶
  3. 名称:webapp-static-xxx(全局唯一)
  4. 地域:与 CVM 同地域
  5. 访问权限:公有读私有写(静态资源需被公网读取)

6.2 上传静态资源

使用 COSCLI 工具批量上传:

代码语言:bash
复制
# 安装 COSCLI

pip install coscmd

# 配置(AK/SK 可在访问管理控制台创建)

coscmd config -a <SecretId> -s <SecretKey> -b webapp-static-xxx -r ap-shanghai

# 上传静态文件

coscmd upload -r ./public/static/ /

6.3 绑定 CDN 加速

  1. 在 COS 存储桶的域名管理中开启 CDN 加速
  2. 配置 CNAME 记录
  3. 在 CDN 控制台中配置缓存规则:
  • 图片(jpg/png/gif):缓存 30 天
  • CSS/JS:缓存 7 天
  • HTML:缓存 10 分钟

七、弹性伸缩配置

7.1 创建启动配置

进入弹性伸缩控制台 https://console.cloud.tencent.com/autoscaling

  1. 启动配置名称:webapp-launch-config
  2. 镜像:使用已部署好环境的自定义镜像
  3. 实例规格:S5.SMALL2(2核4G)
  4. 登录方式:关联密钥
  5. 安全组:放行 22/80/443/8080 端口

7.2 制作自定义镜像

在已完成环境配置的 CVM 上执行:

在 CVM 控制台中选择实例,更多 -> 制作自定义镜像,命名如 webapp-base-v1.0.1

7.3 创建伸缩组

| 配置项 | 值 |

|--------|-----|

| 伸缩组名称 | webapp-asg |

| 最小实例数 | 2 |

| 最大实例数 | 10 |

| 起始实例数 | 2 |

| 关联 CLB | 选择已创建的 CLB |

| 移出策略 | 移出最旧的实例 |

伸缩策略推荐配置:

扩容策略:CPU 使用率 > 70%,持续 5 分钟,增加 1 台(冷却 300 秒)

缩容策略:CPU 使用率 < 30%,持续 10 分钟,减少 1 台(冷却 600 秒)

7.4 通知策略

配置邮件/短信/微信通知:当伸缩组执行扩容或缩容操作时,及时通知运维人员。

八、域名解析与 HTTPS

8.1 DNSPod 解析

  1. 进入 DNSPod 控制台 https://console.dnspod.cn
  2. 添加域名,将 CLB 的 VIP 解析到域名
  3. 记录类型:A 记录
  4. 主机记录:@ 和 www
  5. 记录值:CLB 实例的公网 IP
  6. 开启 DNSPod 的智能解析和 D监控

8.2 配置 HTTPS

在 CLB 控制台的监听器中添加 HTTPS 监听器:

  1. 监听器名称:web-https-443
  2. 前端协议/端口:HTTPS / 443
  3. SSL 解析方式:单向认证
  4. 证书来源:腾讯云 SSL 证书服务(可申请免费 DV 证书)
  5. HTTP 强制跳转 HTTPS:在 CLB 的重定向配置中设置

九、监控与告警

9.1 配置云监控

进入云监控控制台 https://console.cloud.tencent.com/monitor

关键监控指标与建议告警阈值:

| 资源 | 监控指标 | 建议告警阈值 |

|------|----------|-------------|

| CVM | CPU 使用率 | > 80%,持续 5 分钟 |

| CVM | 内存使用率 | > 85%,持续 5 分钟 |

| CVM | 磁盘使用率 | > 90% |

| CLB | 并发连接数 | > 最大规格 70% |

| CLB | 入带宽 | > 可用带宽 80% |

| MySQL | 连接数 | > 最大连接数 80% |

| MySQL | 慢查询数 | > 10/分钟 |

9.2 日志管理

推荐使用腾讯云 CLS(日志服务)统一管理日志:

代码语言:bash
复制
# 安装日志采集 Agent

wget https://loglistener-1254139253.cos.ap-shanghai.myqcloud.com/loglistener-linux-x64.tar.gz

tar xzf loglistener-linux-x64.tar.gz

cd loglistener

./start.sh

采集 Nginx 访问日志,在 CLS 控制台配置采集路径 /var/log/nginx/access.log

十、常见问题与排查

10.1 CLB 后端实例显示异常

可能原因:

  • 健康检查路径不存在或返回非 200 状态码
  • 后端端口未监听
  • 安全组未放行 CLB 的流量

排查命令:

代码语言:bash
复制
# 确认端口监听

netstat -tlnp | grep 8080

# 测试健康检查页面

curl -I http://localhost:8080/health.html

# 查看安全组,确保放行了 VPC 内网

10.2 新扩缩容的实例未自动加入 CLB

可能原因:

  • 启动配置中未选择正确的 CLB
  • 伸缩组与 CLB 不在同一 VPC
  • 启动配置中的安全组未放行来自 CLB 的流量

解决方案:检查伸缩组关联的 CLB 是否正确,确保伸缩组启动配置中的安全组规则正确。

10.3 数据库连接超时

排查步骤:

  1. 确认数据库内网地址能 ping 通
  2. 检查数据库安全组是否放行了 CVM 所在的 VPC 网段
  3. 确认数据库连接数未达到上限
  4. 查看慢查询日志,定位慢 SQL

十一、总结

本文从实际生产需求出发,详细介绍了在腾讯云上搭建高可用 Web 架构的完整流程。通过合理使用 CVM、CLB、MySQL、COS、弹性伸缩等云产品,可以实现:

  1. 高可用:多可用区部署 + 负载均衡 + 数据库主从,任何单点故障不影响整体服务
  2. 弹性伸缩:自动应对流量波动,节约成本的同时保障业务稳定性
  3. 性能优化:CDN 加速、读写分离、静态资源分离,有效降低后端负载
  4. 安全可靠:HTTPS 加密、定期备份、监控告警,全方位的守护

下一步建议

  • 尝试使用 TKE(容器服务)将应用容器化部署,进一步简化运维
  • 使用 TDSQL(分布式数据库)应对海量数据场景
  • 接入 Web 应用防火墙 WAF,防护 SQL 注入、XSS 等攻击
  • 考虑多地域部署实现异地容灾

欢迎大家收藏、点赞,有问题欢迎在评论区交流探讨!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 6.3 绑定 CDN 加速
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档