采用负载均衡技术总结
1:需求与分类
大规划请求下单个节点满足不了请求的压力,需要通过负载均衡将请求引导到不同的节点满足请求,
多个节点间分担任务。
按照负载均衡所处的网络层次可分为 DSN负载均衡,网络层负载均衡,链路层负载,应用层负载(反向代理负载-nginx,haproxy,mysqlproxy等)。
2:负载均衡的调度算法
请求如何分配到多个节点上通过负载均衡算法,也可叫调度算法。
常用调度算法分为两类:
静态算法:
调度时不考虑机器当前的负载情况,只根据固定算法调度。包括:轮询-加权轮询,随机-加权随机,哈希(源地址哈希,请求的一致性哈希,目标地址哈希)
动态算法:
根据机器的负载动态调整,包括最小响应时间,最小连接数,最小活跃数。
动态算法理论上更合理,但实现上会更复杂。很多情况下使用的是静态算法。
3:会话信息保持
请求调度到不同节点时如何获取到当前用户的会话信息,保证相同账户在多次请求间可以共享信息。
主要解决比如用户的http的多次请求,可以共享会话信息。
会话信息保持方法:
1:session绑定
连接建立后请求每次都调度到同一个节点上,会话信息存在这个节点上。
如果是应用层,需要根据源地址等信息绑定。
缺点:节点故障会重启会丢失。
2:cookie绑定
会话信息放在cookie中,每次请求附带cookie
缺点:每次附带cookie信息,增加请求负担。浏览器可能禁用cookie
3:共享全局session服务器存储
将会话信息放到专门的服务器上,各个节点共享。比如放到redis上。
这是目前用的比较多的一种。
4:常用具体技术
1:DNS或GeoDNS
可用于跨区域机房及跨国间的负载均衡.
2:LVS
支持链路层或网络层负载均衡。
支持工作模式
DR模式:
默认模式,也是用的最多的一种模式。通过修改目标的mac地址,在链路层转发。
特点:rs可以直接返回,不需经过vs,不能跨网段负载,不支持端口映射。
NAT模式
修改目标ip地址,转给rs,实际是4层转发。修改了ip,tcp层的数据。
特点:返回必须经过vs,可以端口映射,可以跨网段(路由需要特殊绑定),vs容易成为瓶颈。
rs可以使任何系统。
TUN模式
ip隧道模式,请求请求后将ip层包再封装一层,原包作为新包的包体。转发给rs.
特点:可跨地域,要求rs也支持隧道。不支持端口映射。rs可直接返回。
FULLNAT模式
用的比较少。
LVS本身的高可用,配合keepalive.heartbeat.
3:Nginx
用的最多的一种反向代理负载。
可用根据url,ip,等灵活配置负载地址。
代理层还可以做缓存,日志,安全防护等。
评论