负载均衡产品

硬件:F5 、深信服 、Radware
软件: LVS、 Haproxy、Nginx、Ats

分类

二层负载均衡(mac):数据链路层 mac地址

一般是用虚拟mac地址方式,外部对虚拟MAC地址请求,负载均衡接收后分配后端实际的MAC地址响应。

三层负载均衡(ip): 网络层 ip地址

一般采用虚拟IP地址方式,外部对虚拟的ip地址请求,负载均衡接收后分配后端实际的IP地址响应。

四层负载均衡:(基于IP+端口的负载均衡)

基于IP+PORT;类似于路由器;复杂度和安全性较低;性能高(无需解析内容);没有额外功能

七层负载均衡:(基于URL或主机IP)

基于URL或主机IP;类似于代理服务器;复杂度和安全性较高;性能中等(需要算法识别 URL和 HTTP head 等信息 );有会话保持,图片压缩等功能

七层网络模型和四次网络模型

OSI七层模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
TCP/IP四层模型:应用层、传输层、网络层、网络接口层

lvs(四层)

优:高并发连接、稳定性强、成本低廉、配置简单、支持多种算法、支持多种工作模型
缺:工作在4层,不支持7层规则修改,机制过于庞大,不适合小规模应用。

LVS调度算法

静态算法 rr 轮询 wrr 加权轮询
动态算法 lc 最少连接数 wlc 加权最少连接数

四种工作模式

IP隧道(Tunnel)模式、、FULL-NAT模式(双向转换模式)
NAT:无论是进来的流量,还是出去的流量,都必须经过负载均衡器,对lvs的压力较大。
DR:数据进来时需经过lvs后发送给服务端,处理完成之后,直接将数据返给客户

nginx(七层)

负载均衡算法

upstream 支持4种负载均衡调度算法:
A、轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器;
B、ip_hash:每个请求按访问IP的hash结果分配,同一个IP客户端固定访问一个后端服务器。可以保证来自同一ip的请求被打到固定的机器上,可以解决session问题;
C、url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器。后台服务器为缓存的时候效率;
D、fair:这是比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持 fair的,如果需要使用这种调度算法,必须下载Nginx的 upstream_fair模块

配置:

  1. upstream youngfitapp {
  2. server 192.168.62.157:8080;
  3. server 192.168.62.158:8080;
  4. }
  5. server {
  6. listen 80;
  7. server_name localhost;
  8. location / {
  9. proxy_pass http://youngfitapp;
  10. }
  11. }

haproxy(四层七层)

主做负载均衡的7层(http协议),也可以做4层(tcp协议+端口号)负载均衡

haproxy算法:

1.roundrobin
轮询,在服务器的处理时间保持均匀分布时,这是最平衡,最公平的算法.此算法是动态的,这表示其权重可以在运行时进行调整.
2.static-rr
基于权重进行轮询,与roundrobin类似,但是为静态方法,在运行时调整其服务器权重不会生效.不过,其在后端服务器连接数上没有限制
3.leastconn
新的连接请求被派发至具有最少连接数目的后端服务器.

keepalived

原理

keepalived以VRRP(虚拟路由冗余协议)协议为基础实现,VRRP可以认为是高可用的协议,即N台提供相同功能的路由器组成一个路由器组,这个组中有一个master和多个backup,master上面有一个对外提供服务的VIP,master会发送组播,当backup接收不到vrrp包时,就会认为master宕掉了,这时就会根据vrrp的优先级选取一个backup充当master,这样就保证高可用

keepalived模块

keepalived主要有三个模块,分别是core、check和vrrp。core模块
check健康检查 core 核心 vrrp协议

常见问题脑裂(裂脑):

Keepalived的BACKUP主机在收到不MASTER主机报文后就会切换成为master,如果是它们之间的通信线路出现问题,无法接收到彼此的组播通知,但是两个节点实际都处于正常工作状态,这时两个节点均为master强行绑定虚拟IP,这就是脑裂。
解决方式:
1、添加更多的检测手段,比如冗余的心跳线(两块网卡做健康监测),ping对方等等。尽量减少”裂脑”发生机会。(治标不治本,只是提高了检测到的概率);
2、做好对裂脑的监控报警(如邮件及手机短信等或值班).在问题发生时人为第一时间介入仲裁,降低损失。例如,百度的监控报警短倍就有上行和下行的区别。报警消息发送到管理员手机上,管理员可以通过手机回复对应数字或简单的字符串操作返回给服务器.让服务器根据指令自动处理相应故障,这样解决故障的时间更短;
3、爆头,将master停掉。然后检查机器之间的防火墙。网络之间的通信;