阿里云SLB负载均衡搭建网站集群完全指南:从入门到高可用架构实战
引言:为什么网站需要负载均衡集群
在互联网业务快速发展的今天,单一服务器承载网站所有流量的模式已经难以为继。当大量用户同时访问一个网站时,单台服务器的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搭建网站集群的完整流程可以归纳为以下几个关键步骤:
- 需求分析与产品选型:根据业务场景选择ALB、NLB或CLB。
- 账号与资源准备:完成账号实名认证、RAM权限配置、VPC规划和ECS部署。
- 创建SLB实例:选择地域、网络类型和计费方式。
- 创建服务器组并添加后端服务器:将ECS实例加入服务器组并设置权重。
- 配置监听:设置HTTP/HTTPS监听,配置SSL证书(如需)。
- 配置健康检查:调优健康检查参数,确保故障快速发现与隔离。
- 配置会话保持:根据业务需求启用Cookie或源IP会话保持。
- 配置转发规则(可选):基于域名或URL路径实现精细化流量分发。
- 配置安全策略:设置访问控制、安全组和DDoS防护。
- 配置监控告警:接入云监控,设置核心指标告警。
通过以上步骤,即可搭建一个高可用、高性能的云上网站集群,有效应对业务流量增长和突发故障。
十三、常见问题与解决方案
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加速静态资源,减轻源站压力。



