LVS负载均衡集群!
!!!警告!!!
- 1 你可以自由转载,但请务必注明出处,写作不宜,请珍惜我的劳动成果 …
- 2 技术应该被共享,你可以自由学习,但禁止用于任何的商业,以及各种私自盈利行为 …
集群是什么?
1,集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能,可靠性,灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技术.
2,集群组成后,可以利用多个计算机和组合进行海量请求处理(负载均衡),从而获得很高的处理效率,也可以用多个计算机做备份(高可用),使得任何一个机器坏了整个系统还是能正常运行.
负载均衡集群技术的实现.

- 负载均衡(Load Balance).
- 负载均衡技术类型:基于 4 层负载均衡技术和基于 7 层负载均衡技术.
- 负载均衡实现方式:硬件负载均衡设备或者软件负载均衡.
- 硬件负载均衡产品:F5,深信服,Radware.
- 软件负载均衡产品:LVS(Linux Virtual Server),Haproxy,Nginx,Ats(apache traffic server).
负载均衡分类.
二层负载均衡(mac).
一般是用虚拟mac地址方式,外部对虚拟MAC地址请求,负载均衡接收后分配后端实际的MAC地址响应.
三层负载均衡(ip).
一般采用虚拟IP地址方式,外部对虚拟的ip地址请求,负载均衡接收后分配后端实际的IP地址响应.
四层负载均衡(tcp).
在三层负载均衡的基础上,用ip+port接收请求,再转发到对应的机器.
七层负载均衡(http).
根据虚拟的url或IP,主机名接收请求,再转向相应的处理服务器.
在实际应用中,比较常见的就是四层负载及七层负载,这里也重点说下这两种负载.
四层负载均衡(基于IP+端口的负载均衡).
七层的负载均衡(基于虚拟的URL或主机IP的负载均衡).
在四层负载均衡的基础上(没有四层是绝对不可能有七层的),再考虑应用层的特征,比如同一个Web服务器的负载均衡,除了根据VIP加80端口辨别是否需要处理的流量,还可根据七层的URL,浏览器类别来决定是否要进行负载均衡.
实现七层负载均衡的软件有:
haproxy:天生负载均衡技能,全面支持七层代理,会话保持,标记,路径转移.nginx:只在http协议和mail协议上功能比较好,性能与haproxy差不多.apache:功能较差.Mysql proxy:功能尚可.
四层负载与七层负载的区别.
| 四层负载均衡 | 七层负载均衡 | |
|---|---|---|
| 基于 | 基于IP+Port的 | 基于虚拟的URL或主机IP等。 |
| 类似于 | 路由器 | 代理服务器 |
| 复杂度 | 低 | 高 |
| 性能 | 高,无需解析内容 | 中,需要算法识别 URL,Cookie和HTTP head 等信息 |
| 安全性 | 低 | 高 |
| 额外功能 | 无 | 会话保持,图片压缩,等 |
总结:从上面的对比看来四层负载与七层负载最大的区别就是效率与功能的区别,四层负载架构设计比较简单,无需解析具体的消息内容,在网络吞吐量及处理能力上会相对比较高,而七层负载均衡的优势则体现在功能多,控制灵活强大,在具体业务架构设计时,使用七层负载或者四层负载还得根据具体的情况综合考虑.
LVS负载均衡技术简介.
LVS的英文全名为”Linux Virtual Server“,即Linux虚拟服务器,是一个虚拟的四层交换器集群系统,根据目标地址和目标端口实现用户请求转发,本身不产生流量,只做用户请求转发,目前是负载均衡性能最好的集群系统.
LVS作者.
🇨🇳 章文嵩
LVS结构.
LVS集群分为三层结构:
服务器池(server pool):一组真正执行clinet请求的服务器,一般是web服务器,除了web,还有FTP,MAIL,DNS等 共享存储(shared stord):它为server pool提供了一个共享的存储区,很容易让服务器池拥有相同的内容,提供相同的服务.
LVS的组成.
LVS 由 2 部分程序组成,包括 ipvs 和 ipvsadm.
- ipvs(ip virtual server):一段代码工作在内核空间,叫 ipvs,是真正生效实现调度的代码.
- ipvsadm:另外一段是工作在用户空间,叫
ipvsadm,负责为 ipvs 内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server).
LVS优势.
高并发连接:LVS基于内核网络层面工作,有超强的承载能力和并发处理能力.单台LVS负载均衡器,可支持上万并发连接.稳定性强:是工作在网络4层之上仅作分发之用,这个特点也决定了它在负载均衡软件里的性能最强,稳定性最好,对内存和cpu资源消耗极低.成本低廉:硬件负载均衡器少则十几万,多则几十万上百万,LVS只需一台服务器和就能免费部署使用,性价比极高.配置简单:LVS配置非常简单,仅需几行命令即可完成配置,也可写成脚本进行管理.支持多种算法:支持多种论调算法,可根据业务场景灵活调配进行使用.支持多种工作模型:可根据业务场景,使用不同的工作模式来解决生产环境请求处理问题.
LVS负载均衡四种工作模式.
LVS/NAT:网络地址转换模式,进站/出站的数据流量经过分发器(IP负载均衡,他修改的是IP地址) –利用三层功能.LVS/DR:直接路由模式,只有进站的数据流量经过分发器(数据链路层负载均衡,因为他修改的是目的mac地址)–利用二层功能mac地址.LVS/TUN:隧道模式,只有进站的数据流量经过分发器.LVS/full-nat:双向转换:通过请求报文的源地址为DIP,目标为RIP来实现转发:对于响应报文而言,修改源地址为VIP,目标地址为CIP来实现转发.
LVS四种工作模式原理,以及优缺点比较.
1,NAT模式(VS-NAT).

原理:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址,并发至此RS来处理,RS处理完成后把数据交给经过负载均衡器,负载均衡器再把数据包的原IP地址改为自己的IP,将目的地址改为客户端IP地址即可。期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器.
优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址.
缺点:扩展性有限,当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器.当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢!
2,DR直接路由(Direct routing)模式(LVS-DR).

原理:负载均衡器和RS都使用同一个IP对外服务.但只有DR对ARP请求进行响应,所有RS对本身这个IP的ARP请求保持静默.也就是说,网关会把对这个服务IP的请求全部定向给DR,而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致)并将请求分发给这台RS.这时RS收到这个数据包,处理完成之后,由于IP一致,可以直接将数据返给客户,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端.
优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端.与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器.
缺点:(不能说缺点,只能说是不足)要求负载均衡器的网卡必须与物理网卡在一个物理段上.
3,IP隧道(Tunnel)模式(VS-TUN).

原理:互联网上的大多Internet服务的请求包很短小,而应答包通常很大.那么隧道模式就是,把客户端发来的数据包,封装一个新的IP头标记(仅目的IP)发给RS,RS收到后,先把数据包的头解开,还原数据包,处理后,直接返回给客户端,不需要再经过负载均衡器。注意,由于RS需要对负载均衡器发过来的数据包进行还原,所以说必须支持IPTUNNEL协议。所以,在RS的内核中,必须编译支持IPTUNNEL这个选项
优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户.所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量,这种方式,一台负载均衡器能够为很多RS进行分发,而且跑在公网上就能进行不同地域的分发.
缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上.
4,FULL-NAT模式.

FULL-NAT模式原理:客户端对VIP发起请求,Director接过请求发现是请求后端服务.Direcrot对请求报文做full-nat,把源ip改为Dip,把目标ip转换为任意后端RS的rip,然后发往后端,rs接到请求后,进行响应,相应源ip为Rip目标ip还是DIP,又内部路由路由到Director,Director接到响应报文,进行full-nat.将源地址为VIP,目标地址改为CIP,请求使用DNAT,响应使用SNAT.
LVS四种工作模式区别.
lvs-nat与lvs-fullnat:请求和响应报文都经由Director.lvs-nat:RIP的网关要指向DIP.lvs-fullnat:RIP和DIP未必在同一IP网络,但要能通信.lvs-dr与lvs-tun:请求报文要经由Director,但响应报文由RS直接发往Client.lvs-dr:通过封装新的MAC首部实现,通过MAC网络转发.lvs-tun:通过在原IP报文外封装新IP头实现转发,支持远距离通信.
LVS相关术语.
- LB (Load Balancer 负载均衡)
- HA (High Available 高可用)
- Failover (失败切换)
- Cluster (集群)
- DS ⇒
Director Server,指的是前端负载均衡器节点. - RS ⇒
Real Server,后端真实的工作服务器. - VIP ⇒
Director Virtual IP向外部直接面向用户请求,作为用户请求的目标的IP地址. - DIP ⇒
Director Server IP,主要用于和内部主机通讯的IP地址. - RIP ⇒
Real Server IP,后端服务器的IP地址. - CIP ⇒
Client IP,访问客户端的IP地址.
LVS负载均衡调度算法.
RR 👉 轮询算法
轮询(Round Robin) 算法简称 RR,负载均衡器通过轮询调度算法将外部请求轮流分配到集群的各个后端服务器上,对待后端服务器属于 “无差别攻击”,所以也会忽略后端服务器的实际负载等.
WRR 👉 加权轮询算法.
加权轮询(Weighted Round Robin) 根据真实服务器的不同处理能力(自动询问)来处理请求分发,轮询时处理能力强的服务器会得到更多的请求分发.
LC 👉 最少连接算法.
使用最少链接(Least Connections)时,前端负载均衡器会自动选择后端真实服务器中连接数最少的服务器进行请求分发,如果后端服务器性能相近,则能够很好地负载均衡,否则可能造成性能问题.
WLC 👉 加权最少连接算法.
加权最少连接算法算法(Weighted Least Connections)即在 LC 基础上增加服务器性能权重,通过自动询问后端服务器性能和连接情况综合分发请求.
LBLC 👉 基于局部性最少链接算法.
基于局部性最少连接算法(Locality-Based Least Connections)类似 IP 亲和技术加上最少链接算法,请求分发时,前端负载均衡器根据请求目标 IP 查找该请求目标 IP 最近使用的服务器,如果该服务器没有超载则将请求分发给该服务器,否则采用最小连接算法选择一台服务器分发请求.
LBLCR 👉 带复制的基于局部性最少连接算法.
带复制的基于局部性最少连接算法(Locality-Based Least Connections with Replications) 也是针对 IP 的负载均衡技术,与 LBLC 相比,该算法维护一个从目标 IP 到服务器组的映射关系,分发请求时,根据目标 IP 选择对应的服务器组,然后按照最小链接算法选择一台服务器进行请求分发,如果选中的服务器已经超载,则使用最小链接算法从服务器组外选择一台服务器进行请求分发,同时将该服务器加入到目标 IP 对应的服务器组中
DH 👉 目标地址散列算法.
目标地址散列算法(Destination Hashing)使用请求的目标 IP 地址作为散列键,然后从静态分配的散列表中找出对应的真实服务器进行请求分发,如果该服务器超载,则返回空.
SH 👉 源地址散列算法.
同 DH 类似,只不过散列键换成请求源 IP 地址而已.
LVS负载均衡安装.
默认Linux 内核已经集成了LVS模块,所以只需要安装管理工具即可.
Centos已死,这里以Debian为例.
安装类型最小安装

查看LVS内核模块.

#!/bin/bash
for i in /lib/modules/`uname -r`/kernel/net/netfilter/ipvs/*; do
echo "${i}"
done修改镜像源.
- 最小安装的Debian10默认不能使用https源,需要安装
apt-transport-https ca-certificates
cat << "EOF" >/etc/apt/sources.list
deb http://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free
deb-src http://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free
deb http://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free
deb-src http://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free
deb http://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free
deb-src http://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free
deb http://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free
deb-src http://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free
EOF
apt update && \
apt -y install \
apt-transport-https \
ca-certificates #建立本地软件包缓存列表,以及支持https源.
sed 's/http/https/g' /etc/apt/sources.list #修改软件源为https.
apt-get update && \
apt-get -y install \
bash-completion \
vim安装LVS管理工具(ipvsadm)
apt-get update && \
apt-get -y install ipvsadmipvsadm常用命令.
| 参数 | 说明 |
|---|---|
| -A | 在内核虚拟服务器列表中添加一条新的虚拟服务器记录 |
| -E | 编辑在内核虚拟服务器列表中的一条虚拟服务器记录 |
| -D | 删除内和虚拟服务器列表中的一条虚拟服务器记录 |
| -C | 清除内核虚拟服务器列表所有记录 |
| -R | 恢复虚拟服务器规则 |
| -S | 保存虚拟服务器规则,输出为 -R 可读的格式 |
| -a | 在内核虚拟服务器列表中添加一条真实服务器记录 |
| -e | 编辑内核虚拟服务器中一条真实服务器记录 |
| -d | 删除内核虚拟服务器列表中一条真实服务器记录 |
| -L、-l | 显示内核虚拟服务器列表 |
| -Z | 内核虚拟服务器列表计数器清零(清除链接数量等) |
| -set | -tcp tcpfin udp 设置连接超时值 |
| –start-daemon | 启动同步守护进程 |
| –stop-daemon | 停止同步守护进程 |
| -daemon | 显示同步守护进程状态 |
| -h | 帮助信息 |
| -t | 声明该虚拟服务器提供的是 TCP 服务(用于添加时) |
| -u | 声明该虚拟服务器提供的是 UDP 服务(用于添加时) |
| -f | 声明是经过 iptables 标记过的服务类型 |
| -s | 使用的负载均衡调度算法(rr、wrr、lc、wlc、lblc、lblcr、dh、sh、sed、nq) |
| -p | 声明提供持久服务 |
| -r | 声明是一台真是的服务器 |
| -g | 指定 LVS 工作模式为直接路由模式 |
| -i | 指定 LVS 工作模式为隧道模式 |
| -m | 指定 LVS 工作模式为 NAT 模式 |
| -w | 设置真实服务器的权重值 |
| -c | 显示 LVS 目前的连接数 |
| -timeout | 显示 tcp tcpfin udp 的超时时间 |
| –stats | 显示统计信息 |
| –rate | 显示速率信息 |
| –sort | 对虚拟服务器和真实服务器排序输出 |
| -n | 输出 IP 地址和端口的数字形式 |


