负载均衡
负载均衡(Load Balance):可以利用多个计算机和组合进行海量请求处理,从而获得很高的处理效率,也可以用多个计算机做备份(高可用),使得任何一个机器坏了整个系统还是能正常运行。通过负载均衡使请求可以在计算机集群中尽可能平均地分摊处理。每个节点都可以承担一定的处理负载,并且可以实现处理负载在节点之间的动态分配,以实现负载均衡。
分类
负载均衡根据所采用的设备对象(软/硬件负载均衡)、应用的OSI网络层次(网络层次上的负载均衡)等来分类。
在实际应用中,比较常见的就是四层负载及七层负载。
四层负载均衡(基于IP+端口的负载均衡)
四层负载均衡,主要通过报文中的目标地址和端口,以及负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
以常见的TCP为例,负载均衡设备在接收到第一个来自客户端的SYN 请求时,选择一个最佳的
服务器,并对报文中目标IP地址进行修改(改为后端服务器IP),直接转发给该服务器。TCP的连
接建立,即三次握手的建立是客户端和服务器直接建立的,负载均衡设备只是起到一个类似路由器的转发动作。
实现四层负载均衡的软件有:
- F5:硬件负载均衡器,功能很好,但是成本很高。
- lvs:重量级的四层负载软件
- nginx:轻量级的四层负载软件,带缓存功能,正则表达式较灵活
- haproxy:模拟四层转发,较灵活
七层的负载均衡(基于虚拟的URL或主机IP的负载均衡)
在四层负载均衡的基础上,再考虑应用层的特征,比如同一个Web服务器的负载均衡,除了根据VIP加80端口辨别是否需要处理的流量,还可根据七层的URL、浏览器类别来决定是否要进行负载均衡。
以常见的TCP为例,负载均衡设备如果要根据真正的应用层内容再选择服务器,只能先代理的服务器和客
户端建立连接(三次握手)后,才可能接受到客户端发送的真正应用层内容的报文,然后再根据该报文中的
特定字段,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。负载均衡设备在这
种情况下,更类似于一个代理服务器。负载均衡和前端的客户端以及后端的服务器会分别建立TCP连接。
实现七层负载均衡的软件
- haproxy:天生负载均衡技能,全面支持七层代理,会话保持,访问控制;
- nginx:只在http协议和mail协议上功能比较好,性能与haproxy差不多;
- apache:功能较差
- Mysql proxy:功能尚可。
四层负载与七层负载的区别(lvs和nginx的区别)
| 四层负载均衡(layer 4) | 七层负载均衡(layer 7) | |
|---|---|---|
| 基于 | 基于IP和Port(TCP协议) | 基于虚拟的URL或主机IP(HTTP协议) |
| 类似于 | 路由器 | 代理服务器 |
| 握手次数 | 1次 | 2次 |
| 复杂度 | 低 | 高 |
| 性能 | 高;无需解析内容 | 中;需要算法识别 URL,Cookie 和 HTTP head 等信息 |
| 安全性 | 低,无法识别 DDoS等攻击 | 高,可以抵御SYN洪水攻击 |
| 额外功能 | 无 | 会话保持,图片压缩,防盗链等 |
四层负载与七层负载最大的区别是效率与功能的区别。
四层架构简单,无需解析消息内容,在网络吞吐量及处理性能上高于七层。
七层负载均衡优势在于功能多,控制灵活强大
LVS 实现四层负载均衡项目实战
1、LVS 介绍
LVS 是Linux Virtual Server的简称,也就是 Linux 虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org。现在LVS已经是 Linux标准内核的一部分,因此性能较高。
LVS 优势与不足
(1)优势
1.高并发稳定性强:LVS基于内核工作,有超强的承载能力和并发处理能力,而且工作在网络4层之上仅
作分发之用,这个特点也决定了它的性能最强,稳定性最好,对内存和cpu资源消耗极低。单台LVS负载
均衡器,可支持上万并发连接。
2.成本低廉:硬件负载均衡器少则十几万,多则几十万上百万,LVS只需一台服务器和就能免费部署使用,
性价比极高。
3.配置简单:LVS配置非常简单,仅需几行命令即可完成配置,也可写成脚本进行管理。
4.支持多种算法:支持多种轮调算法,可根据业务场景灵活调配进行使用
5.支持多种工作模型:可根据业务场景,使用不同的工作模式来解决生产环境请求处理问题。
应用范围广:因为LVS工作在4层,所以它几乎可以对所有应用做负载均衡,包括http、数据库、DNS、ftp服务等等
(2)不足
工作在4层,不支持7层规则修改,不适合小规模应用。
2、LVS 核心组件和专业术语
(1)核心组件
LVS的管理工具和内核模块 ipvsadm/ipvs
ipvsadm:用户空间的命令行工具,用于管理集群服务及集群服务上的RS等;
ipvs:工作于内核上的程序,可根据用户定义的集群实现请求转发;
(2)专业术语
VS:Virtual Server #虚拟服务器
Director, Balancer #负载均衡器、分发器
RS:Real Server #后端请求处理服务器
CIP: Client IP #客户端IP
VIP:Director Virtual IP #负载均衡器虚拟IP(接收请求的公网IP)
DIP:Director IP #负载均衡器IP
RIP:Real Server IP #后端请求处理服务器IP
(3)具体图解

3、LVS负载均衡工作模式
LVS/NAT:网络地址转换模式,进站/出站的数据流量经过分发器
(IP负载均衡,修改目标主机的IP地址) --利用三层功能
LVS/DR :直接路由模式,只有进站的数据流量经过分发器
(数据链路层负载均衡,修改目标主机的mac地址)--利用二层功能mac地址
LVS/TUN: 隧道模式,只有进站的数据流量经过分发器
FULL-NAT模式(了解)
LVS 四种工作模式原理、以及优缺点比较
1、NAT模式(VS-NAT)
原理: (1)客户端访问集群的VIP,请求WEB资源(请求报文:源地址为CIP,目标地址为VIP); (2)Director(负载均衡器)收到请求后,修改请求报文的目标地址为web服务器IP(RIP),并且将请求根据相应的调度算法送往后端WEB服务器(请求报文:源地址CIP,目标地址为RIP); (3)WEB服务器收到请求,检查报文是访问自己的而自己也提供WEB服务,就会响应这个请求报文,并发送给Director(响应报文:源地址RIP,目标地址CIP); (4)Director收到WEB服务器的响应报文,根据内部追踪机制确定该响应是针对哪个客户端的VIP请求,此时会修改源地址为VIP并响应客户端请求(响应报文:源地址VIP,目标地址CIP)。期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器。 优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址(公网IP),减少了IP地址的需求。 缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器,速度就会变慢!一般要求10-20台节点

2、直接路由(Direct routing)模式(VS-DR)
VS-DR 是一种高效的负载均衡实现方式,尤其适用于需要高性能且服务器位于同一物理网段的场景。然而,它对于网络拓扑有一定的要求,这可能限制了其适用范围。
1. 原理
(1)数据包转发
负载均衡器 (Director) 和实际服务器 (Real Server, RS) 共享同一个虚拟IP地址 (VIP)。
客户端向VIP发送请求时,负载均衡器对VIP的ARP请求作出响应,而所有RS对VIP的 ARP 请求保持静默。
负载均衡器接收到请求后,根据调度算法确定转发给哪个RS,并修改数据包的目标MAC地址为选定RS的MAC地址。
(2)应答包返回
RS处理完请求后,直接使用VIP作为源IP地址将应答包发送回客户端,因为VIP与RS的真实IP地址相同。
2. 优点
(1)高效的数据包转发:无需额外的封装和解封装过程,提高了数据包转发效率。
(2)灵活的操作系统支持:大多数现代操作系统均能支持 VS-DR 模式。
(3)避免隧道开销:不需要使用隧道技术,降低了网络通信的复杂度和开销。
3. 不足
(1)物理位置限制:负载均衡器和实际服务器必须位于同一物理网段内。
(2)配置复杂性:需要确保所有RS都不响应VIP的ARP请求,可能增加额外配置步骤。
(3)维护难度:添加或移除实际服务器时可能需要重新配置网络设置。
4. 使用场景
(1)适合高性能负载均衡:适用于需要直接路由应答包回客户端的情况。
(2)对延迟敏感的应用程序和服务:例如游戏服务器、实时交易系统等。
3、IP隧道(Tunnel)模式(VS-TUN)
VS-TUN 模式适用于需要处理大量数据流量且 RS 分布在不同地理位置的场景。它通过减少负载均衡器的数据处理负担来提高整体性能,并允许 RS 直接向客户端发送应答,从而实现高效的服务提供。然而,它也要求 RS 具备一定的配置和技术支持。
1. 原理
(1)数据包封装
客户端向虚拟 IP (VIP) 发送请求时,负载均衡器接收请求并选择一个实际服务器 (RS)。负载均衡器将
原始数据包封装在一个新的IP包中,新包的头部包含实际服务器的IP地址作为目的IP,负载均衡器的 IP 地址作为源 IP。
(2)数据包解封装与应答
RS 收到封装的数据包后,解封装得到原始请求数据包。RS处理请求后,直接将应答包发回客户端,无需再经过负载均衡器。
2. 优点
(1)减少负载均衡器负担
负载均衡器只处理请求包,应答包由 RS 直接发送给客户端,减少了负载均衡器的数据流,使其不再是系统瓶颈。
(2)地理分布:通过互联网传输数据包,可以实现跨地域的负载均衡。
(3)高可扩展性:一台负载均衡器能为大量 RS 进行分发,适合处理巨大请求量。
3. 缺点
(1)IP资源需求:每个 RS 都需要一个合法的 IP 地址。
(2)操作系统兼容性:RS 必须支持 IP Tunneling 协议,这意味着需要运行特定版本的 Linux 或其他支持此功能的操作系统。
(3)额外配置:RS 上需要配置隧道功能,增加了管理复杂性。
4. 使用场景
(1)跨地域负载均衡:适用于需要在全球范围内提供服务的场景。
(2)高流量应用:适合处理大量请求和大体积应答数据的应用。
(3)高性能要求:适用于需要高性能负载均衡且服务器分布广泛的情况。

4、LVS三种模式NAT、DR和TUN的区别
lvs-nat:请求和响应报文都经由Director负载均衡器
lvs-dr与lvs-tun:请求报文要经由Director,但响应报文由RS直接发往Client
5、LVS ipvsadm 命令
1、LVS-server安装lvs管理软件
yum -y install ipvsadm
2、命令选项
-A --add-service #在服务器列表中新添加一条新的虚拟服务器记录
-a --add-server #在服务器表中添加一条新的真实主机记录
-t --tcp-service #说明虚拟服务器提供tcp服务
-u --udp-service #说明虚拟服务器提供udp服务
-r --real-server #真实服务器地址
-m --masquerading #指定LVS工作模式为NAT模式
-w --weight #真实服务器的权值
-g --gatewaying #指定LVS工作模式为直接路由器模式(也是LVS默认的模式)
-s --scheduler #使用的调度算法,默认调度算法是 wlc
固定调度算法:rr,wrr,dh,sh
即调度器不会去判断后端服务器的繁忙与否,一如既往得将请求派发下去。
动态调度算法:wlc,lc,sed,nq,lblc,lblcr
调度器会去判断后端服务器的繁忙程度,然后依据调度算法动态得派发请求。
#常用的算法是:rr、wrr、wlc、lc
-C -clear #清除内核虚拟服务器表中的所有记录。
-S -save #保存虚拟服务器规则到标准输出,输出为-R 选项可读的格式
-d -delete-server #删除一条虚拟服务器记录中的某条真实服务器记录
-L|-l –list #显示内核虚拟服务器表
-n --numeric, :#以数字形式输出地址和端口号
4、LVS-DR模式负载均衡集群实战
1. 环境准备
(1)准备虚拟机
准备 3 台纯净的虚拟机,两台 web 服务器
(2)LVS-server 安装lvs管理软件
[root@lvs-server ~]# yum -y install ipvsadm
程序包:ipvsadm(LVS管理工具)
主程序:/usr/sbin/ipvsadm
规则保存工具:/usr/sbin/ipvsadm-save > /path/to/file
配置文件:/etc/sysconfig/ipvsadm-config
(3)LVS/DR 模式
DR模式的组网要求LVS和Real server在同一网段二层互通。因为LVS DR模式在负载均衡转发报文时,只修改目的mac为real server的mac,lvs要能将报文转发给real server,就必须满足LVS和real server是同网段二层互通。
实验说明:1.网络使用NAT模式2.DR模式要求Director DIP 和 所有RealServer RIP必须在同一个网段及广播域
所有节点网关均指定真实网关

2. LVS/DR模式实施
准备工作(集群中所有主机)关闭防火墙和selinux
[root@lvs-server ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.246.166 lvs-server
192.168.246.161 real-server1
192.168.246.162 real-server2
Director分发器配置
配置VIP
[root@lvs-server ~]# ip addr add dev ens33 192.168.246.160/32 #设置VIP
[root@lvs-server ~]# yum install -y ipvsadm #RHEL确保LoadBalancer仓库可用
[root@lvs-server ~]# service ipvsadm start #启动(RHCL6)
注意:启动如果报错: /bin/bash: /etc/sysconfig/ipvsadm: 没有那个文件或目录
需要手动生成文件
[root@lvs-server ~]# ipvsadm --save > /etc/sysconfig/ipvsadm
为什么RS上lo配置的VIP掩码为32位
这是由于lo设备的特殊性导致, 如果lo绑定VIP/24,则该设备会响应该网段所有IP(192.168.246.0-254)的请求,而不是只响应192.168.246.160这一个地址。,就算是不设置为32也是可以的,只不过会影响访问
定义LVS分发策略
-A:添加VIP
-t:用的是tcp协议
-a:添加的是lo的vip地址
-r:转发到real-serve rip
-s:算法
-L|-l –list #显示内核虚拟服务器表
--numeric, -n:#以数字形式输出地址和端口号
-g --gatewaying #指定LVS工作模式为直接路由器模式(也是LVS默认的模式)
-S -save #保存虚拟服务器规则到标准输出,输出为-R 选项可读的格式
rr:轮询算法
如果添加ip错了,删除命令如下:
# ip addr del 192.168.246.193 dev ens33
[root@lvs-server ~]# ipvsadm -C #清除内核虚拟服务器表中的所有记录。
[root@lvs-server ~]# ipvsadm -A -t 192.168.246.160:80 -s rr
[root@lvs-server ~]# ipvsadm -a -t 192.168.246.160:80 -r 192.168.246.161 -g
[root@lvs-server ~]# ipvsadm -a -t 192.168.246.160:80 -r 192.168.246.162 -g
[root@lvs-server ~]# service ipvsadm save #保存方式一,版本7已不支持
[root@lvs-server ~]# ipvsadm -S > /etc/sysconfig/ipvsadm #保存方式二,保存到一个文件中
[root@lvs-server ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.246.160:80 rr
-> 192.168.246.161:80 Route 1 0 0
-> 192.168.246.162:80 Route 1 0 0
[root@lvs-server ~]# ipvsadm -L -n
所有RS配置
配置好网站服务器,测试所有RS #为了测试效果,提供不同的页面(两台real-server都操作,以下以real-server1为例)
~]# yum install -y nginx
~]# echo "real-server1" >> /usr/share/nginx/html/index.html
两台机器都安装,按顺序添加不同的主机名以示区分
~]# ip addr add dev lo 192.168.246.160/32 #在lo接口上绑定VIP
~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #忽略arp广播
~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #匹配精确ip地址回包
~]# systemctl start nginx
~]# systemctl enable nginx
=============================================================================
因为:realServer的vip有了,接着就是同一个网段中拥有两个vip, 客户端在网关发送
arp广播需找vip时需要让realServer不接受响应.
解决:
echo 1 >/proc/sys/net/ipv4/conf/eth0/arp_ignore
arp_ignore 设置为1,意味着当别人的arp请求过来的时候,如果接收的设备没有这个ip,
就不做出响应(这个ip在lo上,lo不是接收设备的进口)
echo 2

最低0.47元/天 解锁文章
3219

被折叠的 条评论
为什么被折叠?



