LVS负载均衡群集
1.集群
- Cluster,集群、群集
- 由多台主机构成,但对外只表现为一一个整体,只提供一-个访问入口(域名或IP地址), 相当于一台大型计算机。
1.1集群的优势
- 提高性能:计算密集应用。如天气预报,核试验模拟。
- 降低成本:相对百万美元的超级计算机,价格便宜。
- 提高可扩展性:只要增加集群节点即可。
- 增强可靠性:多个节点完成相同功能,避免单点失败。
2.企业群集分类
根据群集所针对的目标差异,可分为三种类型:
- 负载均衡群集
- 高可用群集
- 高性能运算群集
2.1负载均衡群集(Load Balance Cluster)
-
LB: Load Balancing,负载均衡,多个主机组成,每个主机只承担一部分访问请求
-
提高应用系统的响应能力、尽可能处理更多的访问请求、减少延迟为目标,获得高并发、负载(LB)的整体性能;
-
LB的负载分配依赖于主节点的分流算法,将来自客户机的访问请求分担给多个服务器节点,从而缓解整个系统的负载压力。例如,“DNS轮询”、“反向代理” 等。
2.2 高可用群集(High Availability Cluster)
-
HA: High Availiablity,高可用,避免 SPOF(single Point Of failure) 单点故障
-
提高应用系统的可靠性、尽可能地减少中断时间为目标,确保服务的连续性,达到高可用(HA) 的容错效果。
-
HA的工作方式包括双工和主从两种模式,双工即所有节点同时在线;主从则只有主节点在线,但当出现故障时从节点能自动切换为主节点。例如,“故障切换” 、“双机热备” 等。
2.3 高性能运算群集(High Performance Computer Cluster)
-
HPC: High-performance computing,高性能
-
以提高应用系统的CPU运算速度、扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算(HPC)能力。
-
高性能依赖于"分布式运算”、 “并行计算”,通过专用硬件和软件将多个服务器的CPU、内存等资源整合在一起,实现只有大型、超级计算机才具备的计算能力。例如,'云计算”、 “网格计算”等。
3.负载均衡群集的工作模式
群集的负载调度技术有三种工作模式:
- 1、地址转换(NAT模式)
- 2、IP隧道(IP-TUN)
- 3、直接路由(DR模式)
通常使用 NAT和DR,使用最多的是DR模式。
3.1NAT模式(地址转换)
地址转换
- Network Address Translation,简称NAT模式
- 类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,即作为客户机 的访问入口,也是各节点回应客户机的访问出口。
- 服务器节点使用私有IP地址,与负载调度器位于同一个物理网络,安全性要优于其他两 种方式。
- 缺点:由于NAT的负载均衡器既作为用户的访问请求入口,也作为节点服务器响应请求的出口,承载两个方向的压力,调度器的性能会成为整个集群的瓶颈。
3.1.1NAT模式流程
1 当客户端 发起请求报文是:
源ip:客户端的ip地址(cip)
目的地址: vip(代理服务器的外网地址)
2.当数据包到达我们的 代理服务器 源ip不变, 需要修改目的ip及端口号
源ip:客户端的ip地址(cip)
目的地址: rip (后端真实服务器ip)
3 .真实服务器 收到报文后 构建响应报文
源ip:改成真实服务器自己的ip(vip 是内网地址)
目的地址: cip 外网客户端地址
4.再发给代理服务器, 代理服务会修改 源ip 将内网地址 改成外网地址
源ip:代理服务器的 外网ip (vip)
目的地址: cip (外网客户端的地址)
lvs-nat:本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某处的RS的RIP和PORT实现转发
(1)RIP(真实服务器)和DIP(代理服务器的内网地址)应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
(2)请求报文和响应报文都必须经由lvs服务器转发,lvs服务器易于成为系统瓶颈
(3)支持端口映射,可修改请求报文的目标PORT
(4)VS必须是Linux系统,RS可以是任意OS系统
3.2 TUN模式(IP隧道)
IP Tunnel ,简称TUN模式。
采用开放式的网络结构,负载调度器仅作为客户机的访问入口,各节点通过各自的Internet连接直接回应客户机,而不再经过负载调度器。承载的压力比NAT小。
服务器节点分散在互联网中的不同位置,具有独立的公网IP地址,通过专用IP隧道与负载调度器相互通信。
缺点:成本很高。
这种模式一般应用于特殊场景,比如将节点服务器分布在全国各地,防止被物理攻击(如地震、战争等),做灾备。
3.2.1TUN模式流程
3.3DR模式(直接路由)
直接路由:
- Direct Routing,简称DR模式。
- 采用半开放式的网络结构,与TUN模式的结构类似,负载调度器仅作为客户机的访问入口,各节点通过各自的Internet连接直接回应客户机,而不再经过负载调度器。承载的压力比NAT小。
- 但各节点并不是分散在各地,而是与调度器位于同一个物理网络。
- 负载调度器与各节点服务器通过本地网络连接,不需要建立专用的IP隧道。
3.3.1DR模式流程
直接路由(Direct Routing):简称 DR 模式,采用半开放式的网络结构,与 TUN
模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络。
负载调度器与各节点服务器通过本地网络连接,不需要建立专用的 IP 隧道
直接路由,LVS默认模式,应用最广泛,通过请求报文重新封装一个MAC首部
进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源
IP/PORT,以及目标IP/PORT均保持不变
3.4 LVS工作模式总结和比较
| NAT | TUN | DR | |
|---|---|---|---|
| 优点 | 端口转换 | WAN | 性能最好 |
| 缺点 | 性能瓶颈 | 服务器支持隧道模式 | 不支持跨网段 |
| 真实服务器要求 | any | Tunneling | Non-arp device |
| 支持网络 | private(私网) | LAN/WAN(私网/公网) | LAN(私网) |
| 真实服务器数量 | low (10~20) | High (100) | High (100) |
| 真实服务器网关 | lvs内网地址 | Own router(网工定义) | Own router(网工定义) |
3.5LVS调度算法
ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态
分为两种:
静态方法: 不管后端真实服务器的 状态,根据自身 算法进行调度
动态方法: 会根据后端服务器的状态来进行调度
仅根据算法本身进行调度
静态:
1、RR:roundrobin,轮询,较常用
2、WRR:Weighted RR,加权轮询,较常用 先算总权重 再用自己的 权重去除以 总权重
3、SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定
4、DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如: Web缓存 缓存
动态: 一个参考值 来确定服务器是否忙 这个值越小 代表服务器 闲 就会优先调度给闲的服务器
主要根据每RS当前的负载状态及调度算法进行调度Overhead=value 较小的RS将被调度
1、LC:least connections 适用于长连接应用 最小连接数 不考虑权重
2、WLC:Weighted LC,默认调度方法,较常用 默认调度 加权最小连接数 第一轮不合理 都是 一样的 优先级
3、SED:Shortest Expection Delay,初始连接高权重优先,只检查活动连接,而不考虑非活动连接 权重小的 空闲的
4、NQ:Never Queue,第一轮均匀分配,后续SED
5、LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理,实现Web Cache等 检查 后端服务器忙不忙
6、LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS,,实现Web Cache等
LVS调度算法文件存储位置 :/usr/lib/modules/3.10.0-693.el7.x86_64/kernel/net/netfilter/ipvs/
modprobe ip_vs //手动加载 ip_vs 模块
cat /proc/net/ip_vs //查看当前系统中ip_vs模块的版本信息
4.LVS调度工具 ipvsadm
4.1ipvsadm工具的作用
- 创建虚拟服务器
- 添加、删除服务器节点
- 查看群集及节点情况
- 保存负载分配策略
4.2ipvsadm 命令选项说明
| 选项 | 功能 |
|---|---|
| -A | 添加虚拟服务器 |
| -D | 删除整个虚拟服务器 |
| -s | 指定负载调度算法(轮询: rr、加权轮询: wrr、 最少连接: lc、 加权最少连接: wlc) |
| -a | 表示添加真实服务器(节点服务器) |
| -t | 指定VIP地址及TCP端口 (调度器使用) |
| -r | 指定RIP地址及TCP端口 (节点服务器使用) |
| -m | 表示使用NAT群集模式 |
| -g | 表示使用DR模式 |
| -i | 表示使用TUN模式 |
| -w | 设置权重(权重为0时表示暂停节点) ,默认值为1 |
| -p 60 | 表示保持长连接60秒。默认值就是60秒。 |
| -l | 列表查看LVS虚拟服务器(默认为查看所有) |
| -n | 以数字形式显示地址、端口等信息,常与“-l”选项组合使用。-l需要在-n之前。ipvsadm -ln |