负载均衡高可用的核心思路
你有没有遇到过网站突然打不开,刷新好几次才加载出来?有时候不是网络问题,而是服务器扛不住流量了。像电商大促、抢票这种场景,瞬间几百万请求涌进来,单台服务器根本处理不过来。这时候就得靠负载均衡加高可用来撑场面。
用多台服务器分摊压力
负载均衡的本质,就是把用户请求合理地分发到多个后端服务器上。比如你有三台Web服务器,前端放一个Nginx做反向代理,它负责决定每个请求该交给谁处理。这样哪怕其中一台挂了,其他两台还能继续工作,不会整个网站瘫痪。
Nginx + Keepalived 实现主备切换
光有负载均衡还不够,万一这个反向代理本身出问题呢?所以得给它加上高可用。常见的做法是用Keepalived配合Nginx,实现主备模式。两台机器都装Nginx和Keepalived,正常情况下主节点对外提供服务,心跳检测发现主节点宕机后,备用节点立刻接管IP地址,继续转发请求。
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100
}
}
健康检查不能少
负载均衡器得时刻知道后端哪些服务器是活着的。Nginx可以通过配置健康检查,自动剔除响应超时或返回错误的节点。比如某个应用服务器数据库连接断了,返回500错误,下一次请求就不会再被分过去,等它恢复后再重新加入集群。
upstream backend {
server 192.168.1.10:8080 max_fails=2 fail_timeout=30s;
server 192.168.1.11:8080 max_fails=2 fail_timeout=30s;
server 192.168.1.12:8080 backup;
}
DNS轮询只是起点
有人觉得DNS轮询就能实现负载均衡,其实这只能算最原始的方式。DNS缓存问题多,一旦某台服务器挂了,客户端可能还在往旧IP发请求。真正的高可用架构需要结合全局负载均衡(GSLB)和本地负载均衡(SLB),在不同层级做故障隔离和流量调度。
云环境下的更简单方案
现在大多数企业直接用云服务商提供的负载均衡器,比如阿里云的SLB、AWS的ELB。它们天生支持多可用区部署,自动检测后端健康状态,还能结合弹性伸缩组,在流量高峰时自动扩容服务器数量。你只需要配置好监听规则和安全策略,剩下的交给平台处理。
别忘了会话保持的问题
有些业务需要保持用户登录状态,比如购物车。如果每次请求都被分到不同服务器,用户的会话信息可能丢失。解决方案有几种:可以用Redis集中存储session,也可以开启负载均衡的“IP哈希”模式,让同一个IP的请求总落到同一台机器上。