腾讯云CVM高可用Web架构部署实战权威指南
一、概述
先说一个很多团队踩过的坑:单台云服务器跑业务,风险确实不小。一旦服务器宕机、网络中断,或是碰上流量高峰,业务就可能长时间挂掉,用户体验骤降,直接带来经济损失。这篇文章就来聊聊,怎么基于腾讯云 CVM,结合负载均衡 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 账号与权限
- 登录腾讯云控制台:https://console.cloud.tencent.com
- 确保账号已完成实名认证
- 创建子账号,并授予以下权限:QcloudCVMFullAccess、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 初始化服务器
# 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 运行环境:
# 安装 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 实例
- 进入 CLB 控制台:https://console.cloud.tencent.com/clb
- 点击新建负载均衡
- 选择与 CVM 相同的地域和网络类型(VPC)
- 实例类型选择应用型负载均衡(支持 HTTP/HTTPS 监听器、七层转发)
- 购买后获得一个 VIP(虚拟 IP)
4.2 配置监听器
HTTP 监听器示例配置:
- 监听器名称: web-http-80
- 前端协议/端口: HTTP / 80
- 后端协议/端口: HTTP / 8080
- 均衡方式: 加权轮询(WRR)
- 会话保持: 启用(Cookie 植入方式)
- 健康检查: 启用,检查路径 /health.html,间隔5秒,超时3秒,健康阈值3次
4.3 绑定后端 CVM
在 CLB 控制台里,选刚创建的监听器,绑定已初始化的 CVM 实例:
- 选择同一 VPC 下的 CVM
- 设置端口为各节点应用监听端口(如 8080)
- 设置权重(权重相同,流量就均匀分发)
4.4 配置健康检查
所有 CVM 节点上都得创建健康检查文件:
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 连接数据库
-- 使用内网地址连接
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 连接示例(支持主从分离):
'10.0.x.x',
'port'=> 3306,
'dbname'=> 'webapp',
'user'=> 'webapp_user',
'pass'=> 'your_strong_password',
];
// 从库配置(读操作)
$sla ves = [
[
'host'=> '10.0.x.x',
'port'=> 3306,
'dbname'=> 'webapp',
'user'=> 'webapp_user',
'pass'=> 'your_strong_password',
],
];
function getDBConnection($write = true) {
global $master, $sla ves;
if ($write || empty($sla ves)) {
$config = $master;
} else {
$config = $sla ves[array_rand($sla ves)];
}
$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 创建存储桶
- 进入 COS 控制台:https://console.cloud.tencent.com/cos5
- 点击创建存储桶
- 名称:webapp-static-xxx(全局唯一)
- 地域:与 CVM 同地域
- 访问权限:公有读私有写(静态资源需要被公网读取)
6.2 上传静态资源
用 COSCLI 工具批量上传:
# 安装 COSCLI
pip install coscmd
# 配置(AK/SK 在访问管理控制台创建)
coscmd config -a -s -b webapp-static-xxx -r ap-shanghai
# 上传静态文件
coscmd upload -r ./public/static/ /
6.3 绑定 CDN 加速
- 在 COS 存储桶的域名管理里,开启 CDN 加速
- 配置 CNAME 记录
- 在 CDN 控制台配置缓存规则:
- 图片(jpg/png/gif):缓存 30 天
- CSS/JS:缓存 7 天
- HTML:缓存 10 分钟
七、弹性伸缩配置
7.1 创建启动配置
进入弹性伸缩控制台:https://console.cloud.tencent.com/autoscaling:
- 启动配置名称:webapp-launch-config
- 镜像:使用已部署好环境的自定义镜像
- 实例规格:S5.SMALL2(2核4G)
- 登录方式:关联密钥
- 安全组:放行 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 解析
- 进入 DNSPod 控制台:https://console.dnspod.cn
- 添加域名,把 CLB 的 VIP 解析到域名
- 记录类型:A 记录
- 主机记录:@ 和 www
- 记录值:CLB 实例的公网 IP
- 开启 DNSPod 的智能解析和 D监控
8.2 配置 HTTPS
在 CLB 控制台的监听器里,添加 HTTPS 监听器:
- 监听器名称:web-https-443
- 前端协议/端口:HTTPS / 443
- SSL 解析方式:单向认证
- 证书来源:腾讯云 SSL 证书服务(可以申请免费 DV 证书)
- 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(日志服务)统一管理日志:
# 安装日志采集 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 的流量
排查命令:
# 确认端口监听
netstat -tlnp | grep 8080
# 测试健康检查页面
curl -I http://localhost:8080/health.html
# 查看安全组,确保放行了 VPC 内网
10.2 新扩缩容的实例未自动加入 CLB
可能原因:
- 启动配置中未选择正确的 CLB
- 伸缩组与 CLB 不在同一 VPC
- 启动配置中的安全组未放行来自 CLB 的流量
解决方案:检查伸缩组关联的 CLB 是否正确,确保伸缩组启动配置中的安全组规则设置正确。
10.3 数据库连接超时
排查步骤:
- 确认数据库内网地址能 ping 通
- 检查数据库安全组是否放行了 CVM 所在的 VPC 网段
- 确认数据库连接数未达到上限
- 查看慢查询日志,定位慢 SQL
十一、总结
从实际生产需求出发,这篇文章详细拆解了在腾讯云上搭建高可用 Web 架构的完整流程。通过合理运用 CVM、CLB、MySQL、COS、弹性伸缩等云产品,能实现这些效果:
- 高可用:多可用区部署 + 负载均衡 + 数据库主从,任何单点故障都不影响整体服务。
- 弹性伸缩:自动应对流量波动,既节约成本,又保障业务稳定性。
- 性能优化:CDN 加速、读写分离、静态资源分离,后端负载明显降低。
- 安全可靠:HTTPS 加密、定期备份、监控告警,全方位守护。
下一步建议
- 尝试用 TKE(容器服务)把应用容器化部署,进一步简化运维。
- 用 TDSQL(分布式数据库)应对海量数据场景。
- 接入 Web 应用防火墙 WAF,防护 SQL 注入、XSS 等攻击。
- 考虑多地域部署,实现异地容灾。
