阿里云SLB负载均衡搭建网站集群完全指南:从入门到高可用架构实战

apphuang2026年06月25日 20:38:242

引言:为什么网站需要负载均衡集群

在互联网业务快速发展的今天,单一服务器承载网站所有流量的模式已经难以为继。当大量用户同时访问一个网站时,单台服务器的CPU、内存、网络带宽等资源很快就会成为瓶颈,导致页面响应变慢甚至服务完全中断。更严重的是,一旦这台服务器发生硬件故障或遭受攻击,整个网站将完全不可用,造成的业务损失和用户流失难以估量。

阿里云负载均衡SLB(Server Load Balancer)正是为解决这些问题而生的核心云服务。SLB通过将访问流量自动分发到多台后端服务器上,不仅突破了单台服务器的性能上限,还通过健康检查机制自动屏蔽故障节点,实现了业务的高可用与弹性扩展。对于网站运营者而言,合理配置SLB的流量分发规则,是保障用户体验、提升系统稳定性的关键一步。

需要先登录阿里云控制台,点击:阿里云控制台

一、SLB产品体系与选型指南

阿里云SLB并非单一产品,而是一个包含三种不同形态的负载均衡家族。理解各产品之间的差异,是正确搭建网站集群的第一步。

1.1 应用型负载均衡ALB

ALB面向七层应用(HTTP/HTTPS/gRPC/QUIC),是当前阿里云主推的负载均衡产品。它支持内容路由、域名转发、URL路径转发、重定向、SSL卸载等高级功能,单实例可支撑百万级QPS。对于绝大多数Web网站、API服务、微服务架构等场景,ALB是最佳选择。

1.2 网络型负载均衡NLB

NLB专注于四层网络协议(TCP/UDP),基于高性能网络转发架构设计,单实例支持亿级并发连接,转发延迟低至微秒级。适用于实时音视频、游戏服务器、高性能数据库代理等对性能要求极高的场景。

1.3 传统型负载均衡CLB

CLB是阿里云早期的经典负载均衡产品,兼容四层(TCP/UDP)和七层(HTTP/HTTPS)负载均衡,配置相对简单。但CLB不支持域名与URL路径转发等高级七层特性,目前正逐步被ALB替代。对于简单的负载均衡场景或传统业务迁移,CLB仍可满足需求。

1.4 选型建议

综合来看,Web网站和API服务优先选择ALB;高性能四层业务(如游戏、直播)选择NLB;传统简单业务或成本敏感场景可选择CLB。本文后续配置将主要基于ALB展开,部分通用配置同样适用于CLB的七层监听场景。

二、核心配置术语解析

在开始配置之前,需要先理解以下几个SLB的核心概念:

  • 实例(Instance):SLB的核心资源实体,包含虚拟服务地址(VIP)、监听规则、服务器组关联关系等,是流量转发的核心载体。
  • 监听(Listener):SLB接收用户请求的入口,包含协议(HTTP/HTTPS/TCP/UDP)、端口、转发规则等配置。一个实例可创建多个监听,例如同时监听80端口的HTTP和443端口的HTTPS。
  • 服务器组(Server Group):后端服务器的逻辑集合,包含ECS实例、ENI弹性网卡、IP地址等类型,用于统一管理后端节点的端口、权重和健康检查规则。
  • 调度算法(Scheduling Algorithm):SLB分发流量的策略,决定流量如何分配到后端服务器,常用的有加权轮询、加权最小连接数、一致性哈希等。
  • 健康检查(Health Check):SLB定期向后端服务器发送探测请求,根据响应结果判断服务器是否正常,异常节点将被隔离,不再接收流量。

三、配置前的准备工作

在正式搭建网站集群之前,需要完成以下准备工作,确保配置流程顺畅。

3.1 账号与权限准备

需拥有阿里云账号并完成实名认证,建议使用RAM子账号进行权限管理,遵循最小权限原则,避免主账号密钥泄露。RAM子账号需授予SLB管理权限(如AliyunSLBFullAccess)及ECS、VPC相关权限。

3.2 网络与资源准备

地域与VPC规划:负载均衡实例与后端服务器(如ECS)需位于同一地域,建议选择靠近客户端的地域降低访问延迟;ALB/CLB实例创建后所属VPC无法修改,需提前规划VPC与子网。后端服务器准备:准备至少2台同地域ECS实例(或IDC服务器、函数计算服务),确保后端服务器已部署应用并正常运行。安全组配置:需在ECS安全组中放行SLB健康检查的探测IP段以及客户端访问的端口。

四、创建负载均衡实例

完成准备工作后,即可开始创建SLB实例。以下以ALB为例进行详细说明。

4.1 控制台创建步骤

登录阿里云控制台,进入负载均衡产品页面,点击创建实例。在创建过程中需要配置以下关键参数:

  • 地域(Region):根据主要用户访问来源选择,建议与后端ECS在同一地域。
  • 网络类型:公网或私网。网站集群通常选择公网类型,以对外提供服务。
  • 实例规格:ALB为弹性规格,按量付费,无需手动选择规格。
  • 计费方式:按量付费或包年包月,根据业务需求选择。

4.2 阿里云CLI创建实例

除了控制台操作,还可以通过阿里云CLI工具快速创建ALB实例。以下是一个完整的创建示例:

# 安装并配置阿里云CLI后执行
# 创建ALB实例
aliyun alb create-load-balancer \
  --region cn-hangzhou \
  --address-type Internet \
  --address-allocated-mode Dynamic \
  --zone-mappings '[{"ZoneId":"cn-hangzhou-g","VSwitchId":"vsw-xxx"}]' \
  --load-balancer-name my-website-cluster

创建成功后,CLI会返回实例ID和VIP地址,后续配置监听和服务器组时需要用到实例ID。

五、配置监听(Listener)

监听是SLB接收用户请求的入口,定义了协议、端口和转发规则。

5.1 HTTP监听配置

对于常规的Web网站,首先需要配置80端口的HTTP监听:

# 创建HTTP监听
aliyun alb create-listener \
  --load-balancer-id lb-xxx \
  --listener-protocol HTTP \
  --listener-port 80 \
  --default-actions '[{"Type":"ForwardGroup","ForwardGroupConfig":{"ServerGroupTuples":[{"ServerGroupId":"sgp-xxx"}]}}]'

创建监听时需指定默认转发动作,将流量转发到对应的服务器组。

5.2 HTTPS监听配置

对于需要加密传输的网站,需配置443端口的HTTPS监听。在配置HTTPS监听之前,需要先将SSL证书上传至阿里云证书管理服务。

# 上传SSL证书
aliyun cas upload-user-certificate \
  --cert-name my-domain-cert \
  --cert /path/to/cert.pem \
  --key /path/to/key.pem
# 创建HTTPS监听
aliyun alb create-listener \
  --load-balancer-id lb-xxx \
  --listener-protocol HTTPS \
  --listener-port 443 \
  --certificates '[{"CertificateId":"cert-xxx"}]' \
  --default-actions '[{"Type":"ForwardGroup","ForwardGroupConfig":{"ServerGroupTuples":[{"ServerGroupId":"sgp-xxx"}]}}]'

将HTTPS证书配置在SLB层面,实现SSL/TLS卸载,意味着加密解密的高计算开销由SLB承担,后端ECS服务器只需处理HTTP明文流量,从而显著降低后端服务器的CPU负载,提升整体吞吐能力。

5.3 HTTP到HTTPS的强制跳转

为了提升网站安全性,通常需要将所有HTTP请求强制重定向到HTTPS。可以通过配置转发规则实现:

# 创建HTTP监听并配置重定向
aliyun alb create-listener \
  --load-balancer-id lb-xxx \
  --listener-protocol HTTP \
  --listener-port 80 \
  --default-actions '[{"Type":"Redirect","RedirectConfig":{"Protocol":"HTTPS","Port":"443","StatusCode":"301"}}]'

六、配置服务器组与后端服务器

服务器组是后端服务器的逻辑集合,用于统一管理后端节点的端口、权重和健康检查规则。

6.1 创建服务器组

# 创建服务器组
aliyun alb create-server-group \
  --server-group-name web-servers \
  --resource-group-id rg-xxx \
  --server-group-type Instance \
  --vpc-id vpc-xxx \
  --scheduler Wrr \
  --protocol HTTP

在上述命令中,--scheduler Wrr指定了加权轮询调度算法,--protocol HTTP指定了后端服务器使用的协议。

6.2 添加后端服务器

将ECS实例添加到服务器组中,并设置权重值。权重越高,分配的流量越多:

# 添加后端服务器
aliyun alb add-servers-to-server-group \
  --server-group-id sgp-xxx \
  --servers '[{"ServerId":"i-xxx1","Weight":100,"ServerType":"Ecs","Port":80},{"ServerId":"i-xxx2","Weight":100,"ServerType":"Ecs","Port":80}]'

建议至少添加2台ECS实例,并分布在不同的可用区以实现跨可用区容灾。

七、健康检查配置

健康检查是SLB主动探测后端服务器健康状态的机制,确保流量只分发到正常工作的服务器。

7.1 健康检查原理

SLB定期向每个后端服务器发送探测请求。对于HTTP/HTTPS健康检查,SLB发送请求到指定路径(如/health),检查响应状态码。如果状态码在200-399范围内,视为健康;否则不健康。对于TCP健康检查,SLB尝试建立连接:如果连接成功,视为健康;如果超时或失败,视为不健康。

7.2 健康检查参数配置

健康检查的配置参数直接影响到故障检测的准确性和速度:

  • 检查协议:HTTP、HTTPS或TCP。
  • 检查路径:如/health或/status。
  • 检查端口:后端服务器提供健康检查的端口。
  • 响应超时时间:等待健康检查响应的时间,建议2-5秒。
  • 检查间隔:两次健康检查的时间间隔,默认5秒。
  • 健康阈值:连续成功多少次后将服务器标记为健康。
  • 不健康阈值:连续失败多少次后将服务器标记为不健康。

通过健康检查参数调优,可以平衡故障检测速度和误报风险。建议将检查间隔设置为5秒,不健康阈值设置为3次,确保在秒级内感知到后端服务器故障并自动摘除异常节点。

八、会话保持配置

会话保持(Session Persistence)确保来自同一用户的请求被持续路由到同一台后端服务器,这对于需要维持状态的应用程序(如用户登录会话、购物车等)至关重要。

8.1 基于Cookie的会话保持

SLB在用户首次请求时,注入一个Cookie到响应头中。当用户后续请求携带此Cookie时,SLB根据Cookie值进行哈希计算,映射到特定后端服务器。配置方式如下:

# 更新服务器组配置,启用会话保持
aliyun alb update-server-group-attribute \
  --server-group-id sgp-xxx \
  --sticky-session-enabled true \
  --sticky-session-type Insert \
  --cookie-timeout 1000

--cookie-timeout 1000表示会话保持超时时间为1000秒,超过该时间未收到请求,会话将失效。

8.2 基于源IP的会话保持

对于不支持Cookie的应用(如TCP协议),SLB支持基于源IP地址的会话保持。SLB直接使用用户源IP地址进行哈希计算,映射到后端服务器。优点在于简单高效,但在NAT环境下,多个用户可能共享同一公网IP,导致会话分布不均。

九、高级转发规则配置

ALB支持基于域名和URL路径的精细化转发规则,可以实现多站点共用同一个负载均衡实例的高效架构。

9.1 基于域名的转发

当需要在同一个ALB实例中为不同域名提供不同的后端服务时,可以配置基于域名的转发规则。

# 创建转发规则 - 基于域名
aliyun alb create-rule \
  --listener-id lsr-xxx \
  --priority 10 \
  --conditions '[{"Type":"Host","HostConfig":{"Values":["www.example.com"]}}]' \
  --actions '[{"Type":"ForwardGroup","ForwardGroupConfig":{"ServerGroupTuples":[{"ServerGroupId":"sgp-xxx1"}]}}]'

9.2 基于URL路径的转发

对于同一个域名下的不同业务路径,可以配置基于URL路径的转发规则,将不同路径的请求分发到不同的后端服务器组。

# 创建转发规则 - 基于URL路径
aliyun alb create-rule \
  --listener-id lsr-xxx \
  --priority 20 \
  --conditions '[{"Type":"Path","PathConfig":{"Values":["/api/*"]}}]' \
  --actions '[{"Type":"ForwardGroup","ForwardGroupConfig":{"ServerGroupTuples":[{"ServerGroupId":"sgp-xxx2"}]}}]'

十、Python SDK代码示例

除了CLI工具,还可以通过阿里云Python SDK进行编程化管理。以下是一个完整的Python示例,展示如何创建ALB实例、配置监听和添加后端服务器。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from aliyunsdkcore.client import AcsClient
from aliyunsdkalb.request.v20200616 import CreateLoadBalancerRequest
from aliyunsdkalb.request.v20200616 import CreateListenerRequest
from aliyunsdkalb.request.v20200616 import CreateServerGroupRequest
from aliyunsdkalb.request.v20200616 import AddServersToServerGroupRequest

# 初始化客户端
client = AcsClient(
    access_key_id='your-access-key-id',
    access_secret='your-access-secret',
    region_id='cn-hangzhou'
)

# 1. 创建ALB实例
def create_load_balancer():
    request = CreateLoadBalancerRequest.CreateLoadBalancerRequest()
    request.set_AddressType('Internet')
    request.set_AddressAllocatedMode('Dynamic')
    request.set_ZoneMappings([
        {'ZoneId': 'cn-hangzhou-g', 'VSwitchId': 'vsw-xxx'}
    ])
    request.set_LoadBalancerName('my-website-cluster')
    response = client.do_action_with_exception(request)
    return response

# 2. 创建服务器组
def create_server_group(vpc_id):
    request = CreateServerGroupRequest.CreateServerGroupRequest()
    request.set_ServerGroupName('web-servers')
    request.set_VpcId(vpc_id)
    request.set_Scheduler('Wrr')
    request.set_Protocol('HTTP')
    response = client.do_action_with_exception(request)
    return response

# 3. 添加后端服务器
def add_servers(server_group_id, servers):
    request = AddServersToServerGroupRequest.AddServersToServerGroupRequest()
    request.set_ServerGroupId(server_group_id)
    request.set_Servers(servers)
    response = client.do_action_with_exception(request)
    return response

# 4. 创建HTTP监听
def create_listener(load_balancer_id, server_group_id):
    request = CreateListenerRequest.CreateListenerRequest()
    request.set_LoadBalancerId(load_balancer_id)
    request.set_ListenerProtocol('HTTP')
    request.set_ListenerPort(80)
    request.set_DefaultActions([
        {
            'Type': 'ForwardGroup',
            'ForwardGroupConfig': {
                'ServerGroupTuples': [
                    {'ServerGroupId': server_group_id}
                ]
            }
        }
    ])
    response = client.do_action_with_exception(request)
    return response

if __name__ == '__main__':
    # 执行创建流程
    lb_response = create_load_balancer()
    print('Load Balancer created:', lb_response)
    
    sg_response = create_server_group('vpc-xxx')
    print('Server Group created:', sg_response)

十一、高可用架构最佳实践

11.1 多可用区部署

阿里云中不同可用区的可用性完全独立并且不相互影响。使用多可用区的业务架构,数据可靠性更高,当主可用区故障时能快速恢复业务。SLB支持跨可用区(AZ)的后端服务器绑定,当单个可用区出现故障时,流量自动切换至健康节点。通过多可用区部署(主备可用区间30秒故障切换),配合健康检查机制(默认每5秒检测一次后端状态),可以实现99.995%的服务可用性。

11.2 与弹性伸缩(ESS)集成

将SLB与弹性伸缩服务集成,可以实现计算资源的动态调配。通过配置CPU利用率、请求数量等监控指标,结合定时策略,在流量高峰前自动扩容ECS实例,低谷时自动缩容。所有ECS通过镜像保持环境一致,保证业务无缝伸缩。

11.3 安全组策略配置

为了保障网站集群的安全,需要在SLB和ECS两个层面配置安全策略:

  • SLB安全策略:配置访问控制白名单,只允许特定IP段访问管理端口。
  • ECS安全组:只放行SLB健康检查的探测IP段以及SLB实例的VIP地址,避免后端服务器直接暴露在公网。
  • 开启DDoS防护:结合云盾,SLB可提供防DDoS攻击能力。

11.4 监控与告警配置

在生产环境中,需配置完善的监控告警:

  • 关注SLB的QPS、新建连接数、带宽使用率等核心指标。
  • 设置告警阈值,当指标超过阈值时及时通知运维人员。
  • 结合云监控服务,实现SLB、ECS、RDS等全链路监控。

十二、网站集群搭建完整流程总结

基于阿里云SLB搭建网站集群的完整流程可以归纳为以下几个关键步骤:

  1. 需求分析与产品选型:根据业务场景选择ALB、NLB或CLB。
  2. 账号与资源准备:完成账号实名认证、RAM权限配置、VPC规划和ECS部署。
  3. 创建SLB实例:选择地域、网络类型和计费方式。
  4. 创建服务器组并添加后端服务器:将ECS实例加入服务器组并设置权重。
  5. 配置监听:设置HTTP/HTTPS监听,配置SSL证书(如需)。
  6. 配置健康检查:调优健康检查参数,确保故障快速发现与隔离。
  7. 配置会话保持:根据业务需求启用Cookie或源IP会话保持。
  8. 配置转发规则(可选):基于域名或URL路径实现精细化流量分发。
  9. 配置安全策略:设置访问控制、安全组和DDoS防护。
  10. 配置监控告警:接入云监控,设置核心指标告警。

通过以上步骤,即可搭建一个高可用、高性能的云上网站集群,有效应对业务流量增长和突发故障。

十三、常见问题与解决方案

Q1:SLB实例创建后可以修改VPC吗?

ALB/CLB实例创建后所属VPC无法修改,需提前规划VPC与子网。如果确实需要变更VPC,只能重新创建实例并迁移配置。

Q2:后端服务器的权重设置为0会怎样?

如果SLB实例的后端服务器权重为0,该服务器将不再接收任何流量。这通常用于临时将某台服务器从服务池中摘除,进行维护或升级。

Q3:健康检查失败后流量如何处理?

当健康检查连续失败达到设定的不健康阈值后,SLB会自动将该后端服务器标记为不健康,不再向其转发流量。当服务器恢复并连续通过健康检查达到健康阈值后,SLB会重新将流量分发到该服务器。

Q4:会话保持和健康检查如何协同工作?

会话保持确保同一用户的请求被路由到同一台后端服务器,而健康检查则确保只有正常运行的服务器接收流量。两者协同工作:健康检查先过滤掉不健康的服务器,会话保持在健康的服务器池中维持用户状态一致性。

Q5:如何获取客户端的真实IP地址?

对于四层监听(TCP/UDP),可以通过开启客户端地址保持功能获取真实IP。对于七层监听(HTTP/HTTPS),SLB会在HTTP头中插入X-Forwarded-For字段,后端服务器从该字段读取客户端真实IP。

Q6:网站集群如何应对突发流量高峰?

建议采取以下策略应对突发流量:一是将SLB与弹性伸缩(ESS)集成,实现自动扩容;二是配置合理的健康检查参数,确保故障节点快速摘除;三是开启SLB的弹性规格,按需扩展性能;四是结合CDN加速静态资源,减轻源站压力。

相关文章

买阿里云服务器能便宜吗?十年代理揭秘 3 大省钱攻略!

买阿里云服务器能便宜吗?十年代理揭秘 3 大省钱攻略!

作为深耕阿里云代理领域 10 年的 “老司机”,经常被问到:“买阿里云服务器能便宜吗?有没有优惠价格?” 今天就用实打实的行业经验告诉你:不仅能便宜,选对渠道还能省一大笔! 这篇文章带你解锁阿里云服务…

做了 10 年腾讯云代理,我想跟你聊聊返佣那些事儿​

做了 10 年腾讯云代理,我想跟你聊聊返佣那些事儿​

最近总有朋友问我:“腾讯云有返点吗?腾讯云服务器能拿佣金不?返佣比例到底有多少?” 作为一个在腾讯云代理行业摸爬滚打了 10 年的 “老人”,今天就来跟大家好好…

阿里云代理商返佣机制深度解析:头部代理优势与企业合作策略

阿里云代理商返佣机制深度解析:头部代理优势与企业合作策略

阿里云代理商的核心价值定位1. 代理商的角色与职责阿里云代理商作为阿里云生态的核心合作伙伴,承担着双重核心职能:• 产品销售:负责推广销售阿里云全系列云产品,包括云服务器ECS、云数据库RDS、对象存…

阿里云代理商返佣机制深度解析:头部代理优势与企业合作策略

阿里云代理商返佣机制深度解析:头部代理优势与企业合作策略

01一、阿里云代理商的核心价值定位1. 代理商的角色与职责阿里云代理商作为阿里云生态的核心合作伙伴,承担着双重核心职能:• 产品销售:负责推广销售阿里云全系列云产品,包括云服务器ECS、云数据库RDS…

阿里云代理商有哪些?阿里云代理返点是真的么?

阿里云代理商有哪些?阿里云代理返点是真的么?

一,阿里云代理商基本介绍阿里云代理商通俗一点,就是指从事阿里云云服务器,云数据库等阿里云公有云产品销售的代理商,每销售一件阿里云公有云产品出去,阿里云给予该代理商一定比例的提成。在阿里云官方定义中,这…

2026阿里云代理商生态全解析:五级代理体系、返佣政策与企业上云指南

2026阿里云代理商生态全解析:五级代理体系、返佣政策与企业上云指南

一、阿里云五级代理体系:权益阶梯与合作价值1. 五级代理的核心权益差异阿里云构建了多层次的代理生态体系,涵盖全国总代理、区域核心代理、行业ISV(独立软件开发商)、金牌/银牌认证代理及标准代理五大核心…