负载均衡集群 [ 1 ] ---集群的认识,四层负载,七层负载 ,LVS 实现四层负载均衡


负载均衡集群

1、集群是什么?

1 集群(cluster),可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技术。
2 集群组成后,可以利用多个计算机和组合进行海量请求处理(负载均衡),从而获得很高的处理效率,也可以用多个计算机做备份(高可用),使得任何一个机器坏了整个系统还是能正常运行。

2、负载均衡集群技术

① 负载均衡(Load Balance):负载均衡集群为企业需求提供了可解决容量问题的有效方案。负载均衡集群使负载可以在计算机集群中尽可能平均地分摊处理。
② 负载通常包括应用程序处理负载和网络流量负载,每个节点都可以承担一定的处理负载,并且可以实现处理负载在节点之间的动态分配,以实现负载均衡。

3、负载均衡集群技术的实现

负载均衡(Load Balance)
负载均衡技术类型:基于 4 层负载均衡技术和基于 7 层负载均衡技术
负载均衡实现方式:硬件负载均衡设备或者软件负载均衡
硬件负载均衡产品:F5 、深信服 、Radware
软件负载均衡产品: LVS(Linux Virtual Server)、 Haproxy、Nginx、Ats(apache traffic server)

4、负载均衡分类

负载均衡根据所采用的设备对象(软/硬件负载均衡),应用的OSI网络层次(网络层次上的负载均衡)等来分类。下面着重介绍的是根据应用的 OSI 网络层次来分类的两个负载均衡类型。

负载均衡可以大概分为以下几类:

  • 二层负载均衡(mac)
    一般是用虚拟mac地址方式,外部对虚拟MAC地址请求,负载均衡接收后分配后端实际的MAC地址响应。
  • 三层负载均衡(ip)
    一般采用虚拟IP地址方式,外部对虚拟的ip地址请求,负载均衡接收后分配后端实际的IP地址响应。
  • 四层负载均衡(tcp)
    在三层负载均衡的基础上,用ip+port接收请求,再转发到对应的机器。
  • 七层负载均衡(http)
    根据虚拟的url或IP,主机名接收请求,再转向相应的处理服务器。

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

实现四层负载均衡的产品有:

  • F5:硬件负载均衡器,功能很好,但是成本很高。
  • lvs:重量级的四层负载软件
  • nginx:轻量级的四层负载软件,带

功能,正则表达式较灵活

  • haproxy:模拟四层转发,较灵活

6、七层的负载均衡(基于虚拟的URL或主机IP的负载均衡)

  1. 在四层负载均衡的基础上(没有四层是绝对不可能有七层的),再考虑应用层的特征,比如同一个Web服务器的负载均衡,除了根据VIP加80端口辨别是否需要处理的流量,还可根据七层的URL、浏览器类别来决定是否要进行负载均衡。
  2. 实现七层负载均衡的软件有:
    • haproxy:天生负载均衡技能,全面支持七层代理,会话保持,标记,路径转移;
    • nginx:只在http协议和mail协议上功能比较好,性能与haproxy差不多;
    • apache:功能较差
    • Mysql proxy:功能尚可。

7、四层负载与七层负载的区别

四层负载均衡 七层负载均衡
实现方式 基于IP+Port的 基于虚拟的URL或主机IP等。
功能类比 路由器 代理服务器
难度
性能 高;无需解析内容 中;需要算法识别 URL,HTTP head 等信息
额外功能 会话保持,图片压缩等

总结:从上面的对比看来四层负载与七层负载最大的区别就是效率与功能的区别。四层负载架构设计比较简单,无需解析具体的消息内容,在网络吞吐量及处理能力上会相对比较高,而七层负载均衡的优势则体现在功能多,控制灵活强大。在具体业务架构设计时,使用七层负载或者四层负载还得根据具体的情况综合考虑。

8、LVS 实现四层负载均衡项目实战

1、LVS 介绍

(1)LVS 是Linux Virtual Server的简称,也就是 Linux 虚拟服务器, 是一个由国人章文嵩博士发起的自由软件项目,它的官方站点是**www.linuxvirtualserver.org。**现在LVS已经是 Linux标准内核的一部分,因此性能较高。
(2)LVS软件作用:通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。

2、LVS 优势与不足

1、优势

高并发连接:LVS基于内核网络层面工作,有超强的承载能力和并发处理能力。单台LVS负载均衡器,可支持上万并发连接。
**稳定性强:**是工作在网络4层之上仅作分发之用,这个特点也决定了它在负载均衡软件里的性能最强,稳定性最好,对内存和cpu资源消耗极低。
**成本低廉:**硬件负载均衡器少则十几万,多则几十万上百万,LVS只需一台服务器和就能免费部署使用,性价比极高。
**配置简单:**LVS配置非常简单,仅需几行命令即可完成配置,也可写成脚本进行管理。
**支持多种算法:**支持多种论调算法,可根据业务场景灵活调配进行使用
**支持多种工作模型:**可根据业务场景,使用不同的工作模式来解决生产环境请求处理问题。
应用范围广:因为LVS工作在4层,所以它几乎可以对所有应用做负载均衡,包括http、数据库、DNS、ftp服务等等

2、不足

工作在4层,不支持7层规则修改,不适合小规模应用。

3、LVS 核心组件和专业术语

1、核心组件

LVS的管理工具和内核模块 ipvsadm/ipvs
ipvsadm:用户空间的命令行工具,用于管理集群服务及集群服务上的RS等;
ipvs:工作于内核上的程序,可根据用户定义的集群实现请求转发;

2、专业术语

VS:Virtual Server #虚拟服务,一个抽象的服务,用于最开始接收 web 请求的服务
Director, Balancer #负载均衡器、分发器
RS:Real Server # 真正提供服务的服务器
CIP: Client IP #用户端IP,发起请求的客户端 IP,一般是公网 IP
VIP:Director Virtual IP #负载均衡器虚拟IP
DIP:Director IP #负载均衡器IP
RIP:Real Server IP #真正提供 web 服务的服务器的 IP

3、LVS负载均衡工作模式

LVS/NAT:网络地址转换模式,进站/出站的数据流量经过分发器(IP负载均衡,他修改的是IP地址) --利用三层功能
LVS/DR :直接路由模式,只有进站的数据流量经过分发器(数据链路层负载均衡,因为他修改的是目的mac地址)–利用二层功能mac地址
LVS/TUN: 隧道模式,只有进站的数据流量经过分发器

4、LVS 四种工作模式原理、以及优缺点比较

1、NAT模式(VS-NAT)

​ 原理:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址,并发至此RS来处理,RS处理完成后把数据交给经过负载均衡器,负载均衡器再把数据包的源IP地址改为自己的IP,将目的地址改为客户端IP地址即可。期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器。

限制条件: 集群中所有的 Real Server( 真实服务器) 需要设置网关为:负载均衡器的 DIP,以保证响应的数据能经过负载均衡器。

优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址。
缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢!

2、IP隧道(Tunnel)模式(VS-TUN)

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

3、直接路由(Direct routing)模式(VS-DR)

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

4、FULL-NAT模式原理:

客户端对VIP发起请求,Director接过请求发现是请求后端服务。Direcrot对请求报文做full-nat,把源ip改为Dip,把目标ip转换为任意后端RS的rip,然后发往后端,rs接到请求后,进行响应,响应源ip为Rip,目标ip还是DIP,又内部路由路由到Director,Director接到响应报文,进行full-nat。将源地址为VIP,目标地址改为CIP

5、四者的区别

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头实现转发,支持远距离通信 

5、LVS ipvsadm 命令的使用

1、LVS-server安装lvs管理软件

程序包:ipvsadm(LVS管理工具)
主程序:/usr/sbin/ipvsadm
规则保存工具:/usr/sbin/ipvsadm-save > /path/to/file
配置文件:/etc/sysconfig/ipvsadm-config

2、命令选项

-A --add-service #在服务器列表中新添加一条新的虚拟服务器记录
-s --scheduler #使用的调度算法, rr | wrr | lc | wlc | lblb | lblcr | dh | sh | sed | nq 默认调度算法是 wlc
固定调度算法:rr,wrr,dh,sh
动态调度算法:wlc,lc,sed,nq,lblc,lblcr

-a --add-server  #在服务器表中添加一条新的真实主机记录
-t --tcp-service #说明虚拟服务器提供tcp服务
-u --udp-service #说明虚拟服务器提供udp服务
-r --real-server #真实服务器地址
-m --masquerading #指定LVS工作模式为NAT模式
-w --weight #真实服务器的权值
-g --gatewaying #指定LVS工作模式为直接路由器模式(也是LVS默认的模式)
-i --ip #指定LVS的工作模式为隧道模式

-C -clear #清除内核虚拟服务器表中的所有记录。
-R -restore #恢复虚拟服务器规则
-S -save #保存虚拟服务器规则到标准输出,输出为-R 选项可读的格式
-d -delete-server #删除一条虚拟服务器记录中的某条真实服务器记录
-L|-l –list #显示内核虚拟服务器表
--numeric, -n:#以数字形式输出地址和端口号

3、安装

清理环境:

lvs 之前不有任何占用 lvs 使用的端口号
比如: 80
Nginx

准备环境:

纯净虚拟机 *3 (yum源 epel源 关闭防火墙selinux)
一台server 两台web

1.安装lvs管理工具
[root@localhost ~]# yum -y install ipvsadm
[root@localhost ~]# cat  /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.116.155 lvs-server
192.168.116.159 real-server1
192.168.116.166 real-server2
2.Director分发器配置
[root@localhost ~]# ip addr add dev ens33 192.168.116.100/32
[root@localhost ~]# ipvsadm --save > /etc/sysconfig/ipvsadm
[root@localhost ~]# systemctl restart ipvsadm
#ip添加错了 删除命令:ip addr del 192.168.116.100 dev ens33

4.添加算法策略

[root@localhost ~]# ipvsadm -A -t 192.168.116.100:80 -s rr 

添加一台 real server,并使用直接路由模式

[root@localhost ~]# ipvsadm -a -t 192.168.116.100:80 -r 192.168.116.159 -g 
[root@localhost ~]# ipvsadm -a -t 192.168.116.100:80 -r 192.168.116.166 -g 

ipvsadm --help
ipvsadm -d -t 192.168.116.100:80 -r 192.168.116.166  删除rel servers
ipvsadm -D -t 192.168.116.100:80  删除vip

[root@localhost ~]# ipvsadm -S > /etc/sysconfig/ipvsadm 
[root@lvs-server ~]# cat  /etc/sysconfig/ipvsadm
-A -t localhost:http -s rr
-a -t localhost:http -r lvs-server:http -g -w 1
-a -t localhost:http -r real-server1:http -g -w 1
-a -t localhost:http -r real-server2:http -g -w 1

[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.116.100:80 rr
  -> 192.168.116.155:80           Route   1      0          0         
  -> 192.168.116.166:80           Route   1      0          0 

[root@lvs-server ~]# ipvsadm -L -n --stats    #显示统计信息

1. Conns    (connections scheduled)  #已经转发过的连接数
2. InPkts   (incoming packets)       #入包个数
3. OutPkts  (outgoing packets)       #出包个数
4. InBytes  (incoming bytes)         #入流量(字节)  
5. OutBytes (outgoing bytes)         #出流量(字节)
   [root@lvs-server ~]# ipvsadm -L -n --rate #看速率
6. CPS      (current connection rate)   #每秒连接数
7. InPPS    (current in packet rate)    #每秒的入包个数
8. OutPPS   (current out packet rate)   #每秒的出包个数
9. InBPS    (current in byte rate)      #每秒入流量(字节)
10. OutBPS   (current out byte rate)      #每秒出流量(字节)

[root@localhost ~]# ipvsadm -L -n --stats    
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  192.168.116.159:80                  0        0        0        0        0
  -> 192.168.116.160:80                  0        0        0        0        0
  -> 192.168.116.161:80                  0        0        0        0        0

[root@localhost ~]# ipvsadm -L -n --rate    
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port                 CPS    InPPS   OutPPS    InBPS   OutBPS
  -> RemoteAddress:Port
TCP  192.168.116.159:80                  0        0        0        0        0
  -> 192.168.116.160:80                  0        0        0        0        0
  -> 192.168.116.161:80                  0        0        0        0        0

5.所有RS配置

配置好网站服务器,测试所有RS #为了测试效果,提供不同的页面(以下两台real-server都操作)

[root@localhost ~]# yum install -y nginx

server1
[root@real-server1 ~]# echo "real-server1" >> /usr/share/nginx/html/index.html
[root@real-server1 ~]# ip addr add dev lo 192.168.116.100/32   #在lo接口上绑定VIP
[root@real-server1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore  #忽略arp广播
[root@real-server1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #匹配精确ip地址回包
[root@real-server1 ~]#  systemctl start nginx 
[root@real-server1 ~]# systemctl enable  nginx 


server2
[root@real-server2 ~]# echo "real-server2" >> /usr/share/nginx/html/index.html
[root@real-server2 ~]# ip addr add dev lo 192.168.116.100/32  
[root@real-server2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
[root@real-server2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
[root@real-server2 ~]# systemctl start nginx 
[root@real-server2 ~]# systemctl enable  nginx 

6.测试

在除这三台主机外的机器查看

curl 192.168.116.100

或者win10 CMD 里面也可以用curl命令

添加 VIP 时候
lvs 本身添加 VIP 是添加到 真实的网卡名称上,比如: ens33/eth0

真实服务器 添加 VIP 是添加到回环接口设备上 lo

猜你喜欢

转载自blog.csdn.net/Houaki/article/details/111822661