云上高可用架构入门:一次搞懂负载均衡、自动扩容

1 阅读6分钟

本文详细介绍云服务器高可用架构的核心概念,包括负载均衡、弹性伸缩、自动故障转移,带你从零理解云原生时代的高可用设计。

前言

做技术的朋友们可能都遇到过这种情况:业务刚上线时只有一台服务器,跑得挺欢。突然有一天,访问量蹭蹭往上涨,服务器开始卡顿、响应超时、甚至直接宕机。

老板一拍桌子:"给我加服务器!"

然后你开始手动部署第二台、第三台服务器,改配置、改Nginx、做负载均衡……手忙脚乱不说,还容易出错。

其实,这些问题云厂商早就帮你想到了。本文带你从零理解云上高可用架构的核心概念,让你面对流量洪峰时从容不迫。

一、什么是高可用架构?

1.1 高可用(High Availability)

高可用(HA)是分布式系统设计的核心目标之一。简单说就是:让服务尽可能不间断运行,即使某个组件挂了,系统依然能正常提供服务。

衡量高可用的核心指标是可用性百分比

可用性年故障时间常见场景
99%(两个9)3.65天个人项目
99.9%(三个9)8.76小时企业级应用
99.99%(四个9)52.6分钟金融级系统
99.999%(五个9)5.26分钟电信级核心

云服务器的单机可用性通常在99.5%-99.9%之间,而通过高可用架构设计,可以轻松达到99.99%以上。

1.2 单点故障:一切的敌人

上面这张图展示了一个典型的单点故障场景:只有一台服务器,一旦它挂了,整个服务就不可用了。

高可用架构的核心思路就是:消除单点故障,让每个组件都有备份。

二、负载均衡:流量分发神器

2.1 负载均衡是什么?

负载均衡(Load Balancer) 是将传入的网络流量分配到多台服务器上的组件。你可以把它想象成一个"交通警察",把请求合理地分配给不同的"道路"(服务器)。

2.2 负载均衡算法

主流的负载均衡算法有以下几种:

算法原理适用场景
轮询(Round Robin)依次分配给每台服务器服务器配置相同
加权轮询(Weighted Round Robin)按权重比例分配服务器性能不同
最少连接(Least Connections)分配给当前连接数最少的长连接业务
IP Hash同一IP的请求固定到某台服务器需要会话保持的场景
自适应根据实时负载动态调整复杂业务场景

2.3 云负载均衡实战

以腾讯云为例,创建负载均衡的基本步骤:

# 1. 创建负载均衡实例
tccli clb createLoadBalancers --Region ap-guangzhou --LoadBalancerType OPEN

# 2. 创建监听器(HTTP:80)
tccli clb createListener --LoadBalancerId lb-xxxxxxxx \
  --Protocol HTTP --Port 80 --ListenerName http80

# 3. 绑定后端云服务器
tccli clb registerTargets --LoadBalancerId lb-xxxxxxxx \
  --ListenerId listener-xxxxxxxx \
  --Targets '[{"InstanceId":"ins-xxxxxxxx","Port":80}]'

腾讯云负载均衡CLB支持公网负载均衡内网负载均衡

  • 公网CLB:用于接收外部流量,分配到后端服务器
  • 内网CLB:用于内部服务间的流量分发,如微服务架构

2.4 健康检查:自动剔除故障节点

健康检查是负载均衡的"眼睛",它会定期检查后端服务器的健康状态,自动将故障节点踢出流量池。

# Nginx 健康检查配置示例
upstream backend {
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
    server 192.168.1.12:8080 backup;  # 备份服务器
}

server {
    location / {
        proxy_pass http://backend;
        proxy_connect_timeout 5s;
        proxy_read_timeout 30s;
        health_check interval=5 fails=3 passes=2;
    }
}

健康检查的三个关键参数:

  • 检测间隔:多久检查一次(建议5-30秒)
  • 失败阈值:连续失败多少次判定为故障
  • 成功阈值:连续成功多少次判定为恢复

三、自动扩容:弹性应对流量高峰

3.1 什么是弹性伸缩?

弹性伸缩(Auto Scaling) 是云服务器最强大的特性之一。它能根据预设的规则,自动增加或减少服务器数量,让你的服务永远"刚刚好"。

3.2 伸缩策略类型

策略类型触发条件适用场景
定时伸缩固定时间已知业务高峰期(如电商大促)
动态伸缩CPU/内存使用率突发流量
自定义指标队列深度、请求数等特殊业务逻辑
预测伸缩AI预测未来负载大促、活动场景

3.3 腾讯云弹性伸缩实战

# 1. 创建伸缩组
tccli as CreateScalingGroup \
  --ScalingGroupName my-scaling-group \
  --MinSize 1 \
  --MaxSize 10 \
  --VpcId vpc-xxxxxxxx \
  --SubnetIds ["subnet-xxxxxxxx"]

# 2. 创建启动配置
tccli as CreateLaunchConfiguration \
  --LaunchConfigurationName my-config \
  --ImageId img-xxxxxxxx \
  --InstanceType S2.SMALL2 \
  --SecurityGroupIds ["sg-xxxxxxxx"]

# 3. 添加告警伸缩策略(CPU > 70% 时扩容)
tccli as CreateScalingPolicy \
  --ScalingGroupId asg-xxxxxxxx \
  --ScalingPolicyName cpu-scale-out \
  --AdjustmentType PERCENT_CHANGE_IN_CAPACITY \
  --AdjustmentValue 50 \
  --Metric.StatisticsType MEAN \
  --Metric.MetricName CPUUTIL \
  --Metric.ComparisonOperator GT \
  --Metric.Threshold 70

3.4 冷却时间:避免"抖动"

自动扩容有个重要的概念叫冷却时间(Cooldown)。扩容完成后,需要等待一段时间才能再次扩容,防止频繁的扩容/缩容导致系统不稳定。

建议配置:

  • 定时扩容:冷却时间0-300秒
  • 动态扩容:冷却时间300-600秒

四、高可用架构实战案例

4.1 经典三层架构

                    ┌─────────────────┐
                    │   负载均衡器    │
                    │  (SLB / CLB)    │
                    └────────┬────────┘
                             │
           ┌─────────────────┼─────────────────┐
           │                 │                 │
    ┌──────▼──────┐   ┌──────▼──────┐   ┌──────▼──────┐
    │  Web服务器1 │   │  Web服务器2 │   │  Web服务器3 │
    └──────┬──────┘   └──────┬──────┘   └──────┬──────┘
           │                 │                 │
           └─────────────────┼─────────────────┘
                             │
                    ┌────────▼────────┐
                    │   数据库集群    │
                    │ (主从复制/读写分离) │
                    └─────────────────┘

4.2 最小高可用配置

对于中小企业或个人项目,推荐的最小高可用配置:

组件最低配置推荐配置
负载均衡1个公网CLB1个CLB + 跨可用区
Web服务器2台2-4台 + 弹性伸缩
数据库主从复制主从 + 自动备份
缓存1台RedisRedis集群
文件存储本地存储CFS/COS对象存储

4.3 成本控制技巧

高可用架构听起来很"贵",但其实有技巧可以控制成本:

  1. 使用抢占式实例:价格低50-80%,适合非核心业务
  2. 定时扩缩容:白天扩容,夜间缩容
  3. 混合部署:核心业务用包年包月,突发流量用按量付费
  4. 选择合适规格:从最小规格开始,根据监控逐步升级

五、总结

高可用架构的核心要点:

  1. 消除单点故障:每个组件都要有备份
  2. 负载均衡:合理分配流量,提升整体吞吐量
  3. 健康检查:自动剔除故障节点,保证服务质量
  4. 弹性伸缩:按需扩缩容,兼顾性能与成本
  5. 监控告警:及时发现问题,快速响应处理

对于个人开发者和中小企业,没必要一开始就追求"五个九"的可用性。从负载均衡 + 2台服务器 + 自动备份开始,逐步演进即可。

下一期我们会讲到服务器被攻击怎么办,敬请期待!


关于作者

长期关注大模型应用落地与云服务器实战,专注技术在企业场景中的落地实践。

个人博客:yunduancloud.icu —— 持续更新云计算、AI大模型实战教程,欢迎访问交流。