阿里云SLB负载均衡搭建网站集群完全实战指南:从零构建高可用架构
引言:为什么网站需要负载均衡集群
在互联网业务快速发展的今天,单一服务器承载网站所有流量的模式已经难以为继。当大量用户同时访问一个网站时,单台服务器的CPU、内存、网络带宽等资源很快就会成为瓶颈,导致页面响应变慢甚至服务完全中断。更严重的是,一旦这台服务器发生硬件故障或遭受恶意攻击,整个网站将完全不可用,造成的业务损失和用户流失难以估量。
阿里云负载均衡SLB(Server Load Balancer)正是为解决这些问题而生的核心云服务。SLB通过将访问流量自动分发到多台后端服务器上,不仅突破了单台服务器的性能上限,还通过健康检查机制自动屏蔽故障节点,实现了业务的高可用与弹性扩展。对于网站运营者而言,合理配置SLB的流量分发规则,是保障用户体验、提升系统稳定性的关键一步。
需要先登录阿里云控制台,点击:阿里云控制台
一、SLB产品体系与选型指南
阿里云SLB并非单一产品,而是一个包含三种不同形态的负载均衡家族。理解各产品之间的差异,是正确搭建网站集群的第一步。
1.1 应用型负载均衡ALB
ALB面向七层应用(HTTP/HTTPS/gRPC/QUIC),是当前阿里云主推的负载均衡产品。它支持内容路由、域名转发、URL路径转发、重定向、SSL卸载等高级功能,单实例可支撑百万级QPS。ALB基于Tengine(Nginx增强版)实现七层负载均衡,具备更强的应用层流量调度能力与安全防护能力。对于绝大多数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。单实例上限为50个监听。
- 服务器组(Server Group):后端服务器的逻辑集合,包含ECS实例、ENI弹性网卡、IP地址等类型,用于统一管理后端节点的端口、权重和健康检查规则。
- 调度算法(Scheduling Algorithm):SLB分发流量的策略,决定流量如何分配到后端服务器,常用的有加权轮询(WRR)、加权最小连接数(WLC)、一致性哈希(CH)等。
- 健康检查(Health Check):SLB定期向后端服务器发送探测请求,根据响应结果判断服务器是否正常,异常节点将被隔离,不再接收流量。
三、配置前准备工作
在对接负载均衡前,需完成以下环境准备,确保配置流程顺畅。
3.1 账号与权限准备
需拥有阿里云账号并完成实名认证,建议使用RAM子账号进行权限管理,遵循最小权限原则,避免主账号密钥泄露。RAM子账号需授予SLB管理权限(如AliyunSLBFullAccess)及ECS、VPC相关权限。
3.2 网络与资源准备
负载均衡实例与后端服务器(如ECS)需位于同一地域,建议选择靠近客户端的地域降低访问延迟。ALB/CLB实例创建后所属VPC无法修改,需提前规划VPC与子网。准备至少2台同地域ECS实例(或IDC服务器、函数计算服务),确保后端服务器已部署应用并正常运行。
3.3 后端服务器环境准备
在每台ECS实例上部署Web应用(如Nginx、Apache、Tomcat等),并确保应用监听在指定端口(如80或443)。同时建议在服务器上准备健康检查接口(如/health),返回200状态码表示服务正常。
四、创建SLB实例
完成准备工作后,即可开始创建SLB实例。以下分别介绍控制台操作和API代码两种方式。
4.1 控制台创建ALB实例
登录阿里云控制台,进入负载均衡SLB产品页面,点击“创建实例”。选择“应用型负载均衡ALB”,配置以下参数:地域与可用区(选择与ECS相同的地域,建议开启多可用区部署)、网络类型(公网或私网)、实例规格(根据预期QPS选择)、计费方式(按量付费或包年包月)。确认配置后点击“立即购买”完成创建。
4.2 通过Python SDK创建ALB实例
以下是通过阿里云Python SDK创建ALB实例的完整代码示例:
from aliyunsdkcore.client import AcsClient
from aliyunsdkalb.request.v20200616 import CreateLoadBalancerRequest
# 初始化客户端
client = AcsClient(
'your-access-key-id',
'your-access-key-secret',
'cn-hangzhou'
)
# 创建ALB实例
def create_load_balancer():
request = CreateLoadBalancerRequest.CreateLoadBalancerRequest()
request.set_AddressType('Internet') # 公网类型
request.set_AddressAllocatedMode('Dynamic') # 动态分配VIP
request.set_ZoneMappings([
{
'ZoneId': 'cn-hangzhou-g',
'VSwitchId': 'vsw-xxxxxxxxx' # 替换为实际VSwitch ID
}
])
request.set_LoadBalancerName('my-website-cluster')
response = client.do_action_with_exception(request)
return response
if __name__ == '__main__':
lb_response = create_load_balancer()
print('Load Balancer created:', lb_response)
五、创建服务器组并添加后端服务器
服务器组是后端服务器的逻辑集合,用于统一管理后端节点的端口、权重和健康检查规则。
5.1 控制台创建服务器组
在ALB实例详情页面,点击“服务器组”页签,点击“创建服务器组”。配置服务器组名称、VPC、后端协议(HTTP或HTTPS)、调度算法(加权轮询、加权最小连接数等)。创建完成后,点击“添加后端服务器”,选择ECS实例,设置端口(如80)和权重(0-100),点击“确定”完成添加。
5.2 通过Python SDK创建服务器组并添加ECS
以下代码演示了如何创建服务器组并添加后端ECS实例:
from aliyunsdkalb.request.v20200616 import CreateServerGroupRequest, AddServersToServerGroupRequest
# 创建服务器组
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')
request.set_HealthCheckEnabled(True)
response = client.do_action_with_exception(request)
return response
# 添加后端ECS实例
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
# 执行示例
sg_response = create_server_group('vpc-xxxxxxxxx')
sg_id = sg_response['ServerGroupId']
servers = [
{'ServerId': 'i-xxxxxxxxxxxx', 'Port': 80, 'Weight': 100},
{'ServerId': 'i-yyyyyyyyyyyy', 'Port': 80, 'Weight': 100}
]
add_servers(sg_id, servers)
5.3 权重配置说明
后端服务器的权重值范围为0到100。权重越高,分配的流量越多。权重为0时,该服务器不接收任何流量,可用于临时将某台服务器从服务池中摘除以进行维护或升级。通过动态调整权重,可以实现流量的平滑迁移和灰度发布。
六、监听配置与流量转发规则设置
监听是ALB接收用户请求的入口,需为每个端口创建独立监听(如80端口HTTP监听、443端口HTTPS监听),并关联服务器组实现流量转发。
6.1 创建HTTP监听(80端口)
在ALB实例详情页面,点击“监听”页签,点击“创建监听”按钮。配置监听协议为HTTP,监听端口为80。选择已创建的服务器组。高级配置中可开启会话保持(超时时间建议设为180-300秒)、后端长连接、响应缓存等。配置完成后点击“提交”。
6.2 创建HTTPS监听(443端口)
HTTPS监听需绑定SSL证书,实现请求加密传输。配置流程如下:
- 上传SSL证书:在ALB控制台左侧导航栏选择“SSL证书”,点击“上传证书”,输入证书名称、域名、证书内容(.pem文件)、私钥内容(.key文件),点击“确定”上传。
- 创建HTTPS监听:在ALB实例监听页面,点击“创建监听”,监听协议选择HTTPS,监听端口输入443。选择后端服务器组,绑定已上传的SSL证书(支持多证书绑定适配多域名)。后端协议默认选择HTTP(SSL卸载模式,ALB负责解密,后端服务器无需配置证书)。高级配置同HTTP监听,可开启会话保持、后端长连接等。
6.3 通过Python SDK创建监听
以下代码演示了如何创建HTTP监听:
from aliyunsdkalb.request.v20200616 import CreateListenerRequest
# 创建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
# 执行
listener_response = create_listener('alb-xxxxxxxxx', 'sgp-xxxxxxxxx')
6.4 域名绑定与DNS解析
监听创建完成后,需将域名绑定到ALB实例并配置DNS解析。在ALB实例详情页面点击“域名”页签,点击“绑定域名”,输入已备案的域名(如www.example.com)。然后登录域名解析控制台,添加A记录,主机记录为www,记录值为ALB实例的VIP地址,TTL默认300秒。解析生效后,用户即可通过域名访问网站。
七、健康检查配置与调优
健康检查是SLB保障业务高可用的核心机制。SLB定期向后端服务器发送探测请求,根据响应结果判断服务器是否正常运行。
7.1 健康检查参数详解
健康检查的关键参数包括:
- 健康检查协议:TCP或HTTP。HTTP协议可发送特定请求(如GET /health),根据HTTP状态码判断健康状态,探测更加精细。
- 健康检查端口:默认使用后端服务器业务端口,也可指定专用健康检查端口。
- 健康检查路径(仅HTTP协议):如/health或/,后端服务器需在该路径返回200状态码。
- 检查间隔:两次健康检查的时间间隔,默认5秒。
- 响应超时时间:等待健康检查响应的最大时间,默认5秒。
- 健康阈值:连续成功探测次数达到该值后,服务器被标记为健康,默认3次。
- 不健康阈值:连续失败探测次数达到该值后,服务器被标记为不健康,默认3次。
7.2 健康检查异常排查
若后端服务器健康检查状态为“异常”,可按以下步骤排查:检查应用服务是否正常运行(netstat -tuln | grep 80查看端口监听状态);检查ECS安全组规则是否放行了SLB健康检查探测IP段;检查网络连通性(curl http://ecs-ip/health测试健康检查接口是否可达);检查健康检查接口是否返回正确的HTTP状态码;检查服务器组配置中端口和协议是否正确。
7.3 故障转移流程
当ALB检测到后端服务器异常时,会触发以下故障转移流程:标记异常节点、停止新请求分发、处理现有连接、持续探测恢复。当服务器恢复并连续通过健康检查达到健康阈值后,SLB会重新将流量分发到该服务器。
八、会话保持配置
会话保持(Session Stickiness)确保同一用户的请求被路由到同一台后端服务器,对于购物车、用户登录等需要保持会话状态的场景至关重要。
8.1 会话保持的实现方式
阿里云SLB提供以下几种会话保持方式:
- 基于源IP的会话保持:根据客户端的源IP地址确定将请求发送到哪个后端ECS实例。这种方式实现简单,但当多个用户共享同一出口IP时可能导致负载不均。
- 植入Cookie(ALB推荐):SLB自动在响应中插入Cookie(如ALB-SLB),后续请求携带该Cookie时,SLB将请求路由到同一后端服务器。
- 重写Cookie:应用服务器设置Cookie,SLB重写该Cookie的值以实现会话保持。
8.2 超时时间设置
会话保持超时时间应根据业务特点合理设置。默认值为300秒(5分钟)。对于购物车、用户登录等场景,建议根据用户平均会话时长设置,一般设置在15-30分钟之间。设置过短会导致有效会话被中断,设置过长可能导致后端服务器资源浪费。
九、高级转发规则配置
ALB支持基于域名和URL路径的高级转发规则,实现同一SLB实例下多个业务或域名的流量精细化分发。
9.1 基于域名的转发
在七层HTTP/HTTPS监听中配置基于域名的转发规则。为每个域名添加一条转发规则,并指定对应的后端服务器组。SLB接收到请求后,根据HTTP请求头中的Host字段进行匹配,将请求转发到对应的服务器组。
9.2 基于URL路径的转发
除了域名,ALB还支持基于URL路径的转发。例如,可以将/api/*的请求转发到API服务器组,将/static/*的请求转发到静态资源服务器组。这种精细化的流量分发能力使得多业务共用同一个SLB实例成为可能,有效降低了架构成本。
十、安全策略配置与防护加固
ALB作为业务入口,需配置完善的安全策略,防范各类安全风险。
10.1 访问控制配置
通过访问控制策略(黑白名单)限制访问来源。白名单模式仅允许指定IP段访问,适用于管理后台、内部系统等非公开业务;黑名单模式禁止指定IP段访问,适用于拦截恶意攻击IP。配置路径:监听详情页面 > 访问控制 > 创建策略 > 添加IP段 > 绑定到监听。
10.2 WAF防护集成
ALB可无缝集成阿里云Web应用防火墙(WAF),对HTTP/HTTPS请求进行全面防护,防范OWASP Top 10攻击(SQL注入、XSS跨站脚本、CSRF跨站请求伪造等)。购买并开通阿里云WAF实例后,在WAF控制台将ALB实例添加为防护对象,配置防护规则即可。
10.3 SSL/TLS安全加固
配置HTTPS监听时,需加固SSL/TLS安全配置:强制HTTPS访问(配置HTTP监听重定向到HTTPS监听,禁止明文传输);选择安全的TLS版本(TLS 1.2及以上,禁用TLS 1.0/1.1),优先选择高强度加密套件(如ECDHE-RSA-AES256-GCM-SHA384);开启HSTS响应头,强制浏览器使用HTTPS访问。
10.4 安全组策略配置
在ECS安全组层面,只放行SLB健康检查的探测IP段以及SLB实例的VIP地址,避免后端服务器直接暴露在公网。安全组配置应遵循最小权限原则,仅开放必要的端口和IP范围。
十一、高可用架构最佳实践
11.1 多可用区部署
阿里云中不同可用区的可用性完全独立且互不影响。使用多可用区的业务架构,数据可靠性更高,当主可用区故障时能快速恢复业务。SLB支持跨可用区的后端服务器绑定,当单个可用区出现故障时,流量自动切换至健康节点。通过多可用区部署(主备可用区间30秒故障切换),配合健康检查机制(默认每5秒检测一次),可以实现99.995%的服务可用性。
11.2 与弹性伸缩(ESS)集成
将SLB与弹性伸缩服务集成,可以实现计算资源的动态调配。通过配置CPU利用率、请求数量等监控指标,结合定时策略,在流量高峰前自动扩容ECS实例,低谷时自动缩容。所有ECS通过镜像保持环境一致,保证业务无缝伸缩。
11.3 X-Forwarded-For配置
对于七层HTTP/HTTPS监听,建议开启X-Forwarded-For头部插入功能,用于记录客户端的原始IP地址。后端服务器通过X-Forwarded-For头部获取真实的客户端IP,便于日志分析和安全审计。
11.4 监控与告警配置
在生产环境中,需配置完善的监控告警:关注SLB的QPS、新建连接数、带宽使用率等核心指标;设置告警阈值,当指标超过阈值时及时通知运维人员;结合云监控服务,实现SLB、ECS、RDS等全链路监控。
十二、性能优化与成本控制
12.1 性能优化实践
合理的性能优化可提升ALB转发效率,降低延迟。选择合适实例规格,根据业务QPS选择实例规格,高并发场景优先选择性能保障型实例;开启后端长连接,复用ALB与后端服务器的TCP连接,减少三次握手开销;启用响应缓存,对静态资源(图片、CSS、JavaScript)开启缓存,设置合理TTL,ALB直接返回缓存响应;优化调度算法,CPU密集型业务选择加权轮询,会话粘性需求选择源IP哈希,连接数差异大的场景选择加权最小连接数;跨可用区部署,ALB实例与后端服务器均跨可用区部署,避免单可用区故障。
12.2 成本控制实践
有效的成本控制可减少资源浪费。测试环境选择按量计费,长期稳定业务选择包年包月享受折扣;合理配置实例规格,避免过度配置;优先使用内网流量,ALB与后端ECS实例同地域同VPC时内网流量免费,尽量避免跨地域转发减少外网流量费用。
十三、网站集群搭建完整流程总结
基于阿里云SLB搭建网站集群的完整流程可以归纳为以下几个关键步骤:需求分析与产品选型(根据业务场景选择ALB、NLB或CLB);账号与资源准备(完成账号实名认证、RAM权限配置、VPC规划和ECS部署);创建SLB实例(选择地域、网络类型和计费方式);创建服务器组并添加后端服务器(将ECS实例加入服务器组并设置权重);配置监听(设置HTTP/HTTPS监听,配置SSL证书);配置健康检查(调优健康检查参数,确保故障快速发现与隔离);配置会话保持(根据业务需求启用Cookie或源IP会话保持);配置转发规则(基于域名或URL路径实现精细化流量分发);配置安全策略(设置访问控制、安全组和DDoS防护);配置监控告警(接入云监控,设置核心指标告警)。通过以上步骤,即可搭建一个高可用、高性能的云上网站集群,有效应对业务流量增长和突发故障。
十四、常见问题与解决方案
问1:ALB、NLB和CLB三者之间应该如何选择?
答:Web网站、API服务和微服务架构优先选择ALB,因为它支持域名转发、URL路径转发等高级七层特性;高性能四层业务(如游戏、直播、数据库代理)选择NLB,它支持亿级并发连接和微秒级延迟;传统简单业务或成本敏感场景可选择CLB。
问2:加权轮询和加权最小连接数算法有什么区别?
答:加权轮询仅根据服务器权重按比例分配请求,不考虑服务器当前的实时负载;加权最小连接数在考虑权重的同时,还考虑服务器当前的活跃连接数,将请求分配给连接数最少且权重较高的服务器,更适合长连接场景。
问3:七层HTTP监听和四层TCP监听在健康检查上有什么区别?
答:四层TCP监听的健康检查基于TCP连接状态进行探测;七层HTTP监听的健康检查可以发送特定的HTTP请求(如GET /health),根据HTTP状态码或响应内容判断后端服务器的健康状态,探测更加精细。
问4:如何实现同一SLB实例下多个域名的流量分发?
答:在七层HTTP/HTTPS监听中配置基于域名的转发规则。为每个域名添加一条转发规则,并指定对应的后端服务器组。SLB接收到请求后,根据HTTP请求头中的Host字段进行匹配,将请求转发到对应的服务器组。
问5:会话保持的超时时间应该设置多长?
答:超时时间应根据业务特点合理设置。默认值为300秒(5分钟)。对于购物车、用户登录等场景,建议根据用户平均会话时长设置,一般设置在15-30分钟之间。设置过短会导致有效会话被中断,设置过长可能导致后端服务器资源浪费。
问6:如何通过API或CLI实现SLB配置的自动化?
答:阿里云提供了CLI工具(aliyun命令)和多语言SDK(Python、Java、Go等)。可以通过编写脚本调用API完成实例创建、监听配置、服务器组管理、权重调整等操作,实现基础设施即代码(IaC)的自动化运维。




