一、概述
在实际生产环境中,单台云服务器往往面临单点故障风险。当服务器宕机、网络中断或遭遇流量高峰时,业务可能长时间不可用,造成用户体验下降甚至经济损失。本文基于腾讯云 CVM(Cloud Virtual Machine),结合负载均衡 CLB、云数据库 MySQL、对象存储 COS、弹性伸缩 AS 等服务,从零搭建一套高可用、可弹性伸缩的 Web 架构,适用于中小型企业网站、API 服务以及高并发业务场景。
适用对象
架构总览
用户请求 -> 域名解析 DNSPod -> 负载均衡 CLB -> CVM 集群(多可用区)
CVM 集群内部:
Web 节点 1 / Web 节点 2 / Web 节点 3
-> 云数据库 MySQL(主从)
-> 对象存储 COS(静态资源)
架构核心思路:
二、前置准备
在开始部署之前,需要完成以下准备工作:
2.1 账号与权限
建议使用子账号进行操作,避免主账号 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,点击新建。
关键配置项:
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 nginx3.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 实例
4.2 配置监听器
HTTP 监听器示例配置:
4.3 绑定后端 CVM
在 CLB 控制台中选择刚创建的监听器,绑定已初始化的 CVM 实例:
4.4 配置健康检查
在所有 CVM 节点上创建健康检查文件:
echo 'OK' > /usr/share/nginx/html/health.htmlCLB 的健康检查机制会定期访问此路径,当连续 3 次检查失败时,自动将异常节点移除,恢复后自动加入。
五、搭建数据库高可用
5.1 创建云数据库 MySQL
进入 MySQL 控制台 https://console.cloud.tencent.com/cdb,点击新建。
配置建议:
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 连接示例(支持主从分离):
<?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 创建存储桶
6.2 上传静态资源
使用 COSCLI 工具批量上传:
# 安装 COSCLI
pip install coscmd
# 配置(AK/SK 可在访问管理控制台创建)
coscmd config -a <SecretId> -s <SecretKey> -b webapp-static-xxx -r ap-shanghai
# 上传静态文件
coscmd upload -r ./public/static/ /七、弹性伸缩配置
7.1 创建启动配置
进入弹性伸缩控制台 https://console.cloud.tencent.com/autoscaling:
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 解析
8.2 配置 HTTPS
在 CLB 控制台的监听器中添加 HTTPS 监听器:
九、监控与告警
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 后端实例显示异常
可能原因:
排查命令:
# 确认端口监听
netstat -tlnp | grep 8080
# 测试健康检查页面
curl -I http://localhost:8080/health.html
# 查看安全组,确保放行了 VPC 内网10.2 新扩缩容的实例未自动加入 CLB
可能原因:
解决方案:检查伸缩组关联的 CLB 是否正确,确保伸缩组启动配置中的安全组规则正确。
10.3 数据库连接超时
排查步骤:
十一、总结
本文从实际生产需求出发,详细介绍了在腾讯云上搭建高可用 Web 架构的完整流程。通过合理使用 CVM、CLB、MySQL、COS、弹性伸缩等云产品,可以实现:
下一步建议
欢迎大家收藏、点赞,有问题欢迎在评论区交流探讨!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。