LVS详解-三种模式和负载均衡算法
1.由来
起初是用来进行LAMP的优化,其中包括:
- web服务器调优;
- 网站调优;
- 动静态请求分离;
- 动态页面静态化;
- 数据库参数调优:还可以做读写分离;
- 加缓存(memcached);
1.1web服务器调优
缓存;进程数;添加web服务器;负载均衡
1.11负载均衡
结构:调度器DR、web服务器
-
调度器(又称负载均衡器)
负责接收用户请求
将请求通过调度算法转发给web服务器实现方式:
软件:
1.工作在OSI七层中的第4层
通过端口号(所以是工作在四层的):
定义集群'10.1.1.200:80'
定义rs(real server):
10.1.1.211
10.1.1.212
我们访问的是调度器的80端口,这是一个集群,请求会转交给后端的rs
这个调度器是不需要跑web服务器的,因为它只需要转发;
所以我们可以通过不同的端口号做诸多服务的负载均衡,例如SSH负载均衡
2.工作在OSI七层中的第7层
- nginx
- haproxy
硬件:
- F5
- netscaler
- hillstone #山石网络
1.2linux virtual server
是一个虚拟的服务器集群系统
结构如下:
- 负载均衡器
- 存储网(服务器池):如raid技术
- 共享存储:比如NFS,把各服务器的/data/www用某个共同的存储池来挂载
四层协议的特征
- 端口号
- 需要在内核的TCP/IP协议栈进行过滤筛选:因此这个操作是在内核模块中完成的,所以lvs其实是一个内核模块
两段式结构:
ipvs:内核空间
ipvsadm:用户空间
2.LVS模式
术语介绍:
VIP
Virtul IP,也就是DR的地址(也是公网地址来的)
RIP
集群节点;真正提供服务的web服务器的地址(有可能是与DR处于同一个网段的私网地址)
DIP
Director用来和RIP进行通讯的地址
CIP
client IP
2.1.NAT(IP转换)模式
nat转换的地方是:RS返回数据包给DR的时候的数据包中源地址由RIP变成VIP
图解:
特点:
1. DR要同时处理入站和出站的请求;调度器容易成为整个架构的瓶颈
2.所有的RS要和DR在同一个网段
3.通常情况下RIP是私有地址
4.RS可以是任何的操作系统,能处理用户请求就ok
2.2.DR(路由)模式
用户的请求经过DR,RS直接返回给客户端(推荐)
图解:
特点:
1.DR只处理进入的请求
RS的网关不能指向DR而是指向真正的路由器
2.集群必须在同一个物理网络中,因为是通过arp基于MAC地址进行转发的
3.需要所有的RS本地都有一个VIP地址(配了两个网卡)
大部分操作系统都支持
因为RS返回数据包的时候需要用的VIP才能够封装
虽然所有RS都有配置了VIP这个地址的网卡,但是可以通过设置内核参数让其暂时不启用
这里要配置arp_announce,目的是修改返回数据包的源ip地址
4.不支持端口映射
5.这种方式的性能更好
2.3.TUNNEL(隧道)模式
在IP请求包上进行二次封装,加上tunnel的ip段
图解:
特点
此时DR和RS不需要在同一个物理网段中
DR和RS的通信是通过包裹在外部的DIR RIP1 来实现的
RS和CLIENT通信时,RS也是用自己的配置了VIP的网卡来转发
3.LB 负载均衡集群
负载均衡集群需要分发器:Director
根据内部锁和调度规则选择急群众的一个来响应
分发是通过调度算法来决定的
LVS调度算法:
静态:
- RR Round-robin轮询算法:
绝对公平:每个人分配到的请求一样多
若服务器的处理能力不一致的话会造成浪费
我们应该让性能更好的服务器处理更多请求
- WRR Weighted round-robin加权轮询:
每个服务器有权重值
- DH目的地址哈希:
同一类的请求会到同一个RS中获得
哈希表存的是不同类型目的地址到RS的映射
用来做缓存服务器
- SH源地址哈希
同一台CIP会访问到同一个RS
哈希表存的是DIP到RS的映射
用来做会话维持
动态:
根据算法和RS的负载状态做决策
-
LC
Least connection:最少连接找处理请求最少的RS 计算每台RS的负载:active*256+inactive=overhead active是处于活动状态的连接数 inactive是处于非活动状态的连接数 仍然是不公平的 服务器性能有差异
-
WLC
加权最少连接 overhead/weight 默认的算法
-
SED
最短期望延迟 不考虑非活动状态的连接
-
NQ
Never Queue 永不排队
-
LBLC
动态DH