LVS负载均衡集群
LVS简介
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。
LVS的IP负载均衡技术是通过IPVS模块实现的。IPVS模块是LVS集群的核心软件模块,它安装在LVS集群作为负载均衡的主节点上,虚拟出一个IP地址和端口对外提供服务。用户通过访问这个虚拟服务(VS),然后访问请求由负载均衡器(LB)调度到后端真实服务器(RS)中,由RS实际处理用户的请求给返回响应。
ipvs (IP Virtual Server) 实现了传输层负载均衡,也就是我们常说的4层LAN交换,作为 Linux 内核的一部分。ipvs运行在主机上,在真实服务器集群前充当负载均衡器。ipvs可以将基于TCP和UDP的服务请求转发到真实服务器上,并使真实服务器的服务在单个 IP 地址上显示为虚拟服务。
LVS体系架构
使用LVS架设的服务器集群系统有三个部分组成:最前端的负载均衡层(Loader Balancer),中间的服务器群组层,用Server Array表示,最底层的数据共享存储层,用Shared Storage表示。在用户看来所有的应用都是透明的,用户只是在使用一个虚拟服务器提供的高性能服务。
LVS负载均衡的三种模式
LVS集群负载均衡器接受服务的所有入展客户端的请求,然后根据调度算法决定哪个集群节点来处理回复客户端的请求。在已有的IP负载均衡技术中,主要有通过网络地址转换NAT(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器,称VS/NAT技术(Virtual Server via Network Address Translation)。在分析VS/NAT的缺点和网络服务的非对称性的基础上,提出了通过IP隧道实现虚拟服务器的方法VS/TUN (Virtual Server via IP Tunneling),和通过直接路由实现虚拟服务器的方法VS/DR(Virtual Server via Direct Routing),它们可以极大地提高系统的伸缩性。VS/NAT、VS/TUN和VS/DR技术是LVS集群中实现的三种IP负载均衡技术
VS/NAT
在一组服务器前有一个调度器,它们是通过 Switch/HUB 相连接的。这些服务器提供相同的网络服务、相同的内容,即不管请求被发送到哪一服务器,执 行结果是一样的。服务的内容可以复制到每台服务器的本地硬盘上,可以通过网络文件系统(如 NFS)共享,也可以通过一个分布式文件系统来提供。
VS/NAT 的优点是服务器可以运行任何支持 TCP/IP 的操作系统,它只需要一个 IP 地址配置在调度器上,服务器组可以用私有的 IP 地址。缺点是它的伸缩能力有限, 当服务器结点数目升到 20 时,调度器本身有可能成为系统的新瓶颈,因为在 VS/NAT 中请求和响应报文都需要通过负载调度器。
VS/TUN
在 VS/TUN 的集群系统中,负载调度器只将请求调度到不同的后端服务器,后端服务器将应答的数据直接返回给用户。这样,负载调度器就可以处理大量的请求,它甚至可以调 度百台以上的服务器(同等规模的服务器),而它不会成为系统的瓶颈。即使负载调度器只有100Mbps 的全双工网卡,整个系统的最大吞吐量可超过 1Gbps。所以,VS/TUN 可以极大地增加负载调度器调度的服务器数量。VS/TUN 调度器可以调度上百台服务器,而它本身不会成为系统的瓶颈,可以 用来构建高性能的超级服务器。
它的连接调度和管理与 VS/NAT 中的一样,只是它的报文转发方法不同。调度器根据各个服务器的负载情况,动态地选择一台服务器,将请求报文封装在另一个 IP 报文中,再将封装后的 IP 报文转发给选出的服务器;服务器收到报文后,先将报文解封获得原来目标地址为 VIP 的报文,服务器发现 VIP地址被配置在本 地的 IP 隧道设备上,所以就处理这个请求,然后根据路由表将响应报文直接返回给客户。
VS/DR
跟 VS/TUN 方法相同,VS/DR 利用大多数 Internet 服务的非对称特点,负载调度器中只负责调度请求,而服务器直接将响应返回给客户,可以极大地提高整个集群系统的吞吐量调度器和服务器组都必须在物理上有一个网卡通过不分断的局域网相连,如通过交换机或者高速的HUB 相连VIP地址为调度器和服务器组共享,调度器配置的 VIP 地址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把 VIP 地址配置在各自的 NonARP 网络设备上,它对外面是不可见的,只是用于处 理目标地址为 VIP 的网络请求。
三种负载均衡技术的对比
网络地址转换 (NAT) | 直接路由(DR) | IP隧道(IP TUN) | |
---|---|---|---|
建立难度 | 易 | 有一定难度 | 有一定难度 |
可扩展性 | 差 | 好 | 很好 |
带宽 | 小 | 大 | 大 |
延迟 | 最大 | 小 | 大 |
支持的服务器数量 | 少(10-20) | 多 (>100) | 多 (>100) |
IP包修改 | 修改IP地址和端口 | 修改IP包的MAC地址 | 对请求包进行IP包装 |
后台服务器OS | 任何支持NAT的OS | 多数 | 支持IP Tunnel |
网络连接要求 | 局域网 | 局域网 | 本地或远程 |
缺省路由 | 负载均衡服务器 | 不限 | 不限 |
实际服务器限制 | 无 | lo不响应ARP | Tunl设备不响应ARP |
服务器端口映射 | 可以 | 不可以 | 不可以 |
LVS集群部署:DR模式
virtual ip | 192.168.1.100 |
vm4 | LVS |
vm5 | real server |
vm6 | real server |
VS的配置
[root@vm4 ~]# yum install ipvsadm -y /安装LVS管理工具ipvsadm
[root@vm4 ~]# ip addr add 192.168.1.100/24 dev eth0 /添加虚拟IP
[root@vm4 ~]# ipvsadm -A -t 192.168.1.100:80 -s rr 添加地址为192.168.1.100:80的虚拟服务,指定调度算法为轮转
[root@vm4 ~]# ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.5:80 -g /添加真实服务器,指定传输模式为DR
[root@vm4 ~]# ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.6:80 -g
安装LVS管理工具ipvsadm 并配置
[westos@LAPTOP-NKDH5A49 ~]$ curl 192.168.1.100
在真机上进行测试连接,发现无响应
查看当前ipvs模块中记录的连接,发现是有连接的,但是回不到客户端,是因为还没有rs配置虚拟ip
配置real server
配置vm5
[root@vm5 ~]# yum install httpd
[root@vm5 ~]# systemctl enable --now httpd //启动
[root@vm5 ~]# ip addr add 192.168.1.100/32 dev eth0 /添加vip
[root@vm5 ~]# echo server5 > /var/www/html/index.html /编写默认发布页
配置vm6
[root@vm6 ~]# yum install httpd
[root@vm6 ~]# systemctl enable --now httpd
[root@vm6 ~]# ip addr add 192.168.1.100/32 dev eth0
[root@vm6 ~]# echo server6 > /var/www/html/index.html
发现轮询不稳定的问题
配置完成后,重新连接有响应实现了均衡,但是查看vip 的mac地址发现其绑定的是vs的mac地址,我们删除这个连接地址进程,重新连接发现这次响应的一直都是vm5,此时绑定的是vm5的mac地址。
由此我们得到一个结论:
如果绑定的MAC地址是server1,则在server2和3中轮询
如果绑定的MAC地址是sever2或sever3的,那么我们会发现,在测试端根本不会形成轮询,而是直接去了MAC绑定的后端服务器
显然这是不合理的,所以我们必须要客户端的请求落在调度器上而不是后端真实服务器。
响应vm5的mac地址
解决问题 :编写arp策略
arp协议工作在第二层,数据链路层,DR的工作原理是在数据链路层直接转发数据包,和目标ip没有关联,在二层用不到ip地址,当在二层转发到RS以后,在向上进行解包的时候,在网络层需要目标ip。4层传输层沟通上下三层。
[root@vm5 ~]# yum install -y arptables /安装工具
[root@vm5 ~]# arptables -nL /查看策略
[root@vm5 ~]# arptables -A INPUT -d 192.168.1.100 -j DROP
[root@vm5 ~]# arptables -A OUTPUT -s 192.168.1.100 -j mangle --mangle-ip-s 192.168.1.5
[root@vm5 ~]# arptables -nL
当网内广播需要172.25.10.100这个ip时,它丢弃所有网内的请求,当它自身需要在网内发包时,伪装为自己原本的ip
保存策略文件
[root@vm5 ~]# arptables-save /保存策略
[root@vm5 ~]# arptables-save > /etc/sysconfig/arptables 写入工具的配置文件
[root@vm5 ~]# cat /etc/sysconfig/arptables
-F是刷新过后,策略文件失效,
重启服务后,策略文件再次生效
对vm6的配置和vm5相同:
yum install -y arptables
arptables -A INPUT -d 192.168.1.100 -j DROP
arptables -A OUTPUT -s 192.168.1.100 -j mangle --mangle-ip-s 192.168.1.6
arptables -nL
arptables-save
arptables-save > /etc/sysconfig/arptables
cat /etc/sysconfig/arptables
保存vs的策略
[root@vm4 ~]# ipvsadm-save
[root@vm4 ~]# ipvsadm-save -n >/etc/sysconfig/ipvsadm
[root@vm4 ~]# cat /etc/sysconfig/ipvsadm
[root@vm4 ~]# ipvsadm -C /刷新
[root@vm4 ~]# ipvsadm -ln /策略失效
[root@vm4 ~]# systemctl start ipvsadm /重启服务
[root@vm4 ~]# ipvsadm -ln /再次生效
DR 模式的负载均衡实现保存vs的策略
[root@LAPTOP-NKDH5A49 westos]# arp -d 192.168.1.100 清楚缓存
[root@LAPTOP-NKDH5A49 westos]# curl 192.168.1.100 重新连接
keepalived健康检测
若某个 RS 异常宕机,LVS 仍然会将流量转发给异常 RS,这样就会导致服务的部分流量异常,这是一个不能够接受的问题。此时需要安装健康检测工具 keepalived。除此之外,还存在另外一个问题,LVS 服务器存在单点故障的风险,也就是说 LVS 随时都有可能发生宕机故障,可恢复的时间存在不确定性,严重影响服务体验和可用性。keepalvied 在 0.4.x 版本中增加了高可用特性的支持,是通过 VRRP 协议实现的。我们使用两台 Linux 服务器分别 LVS + keepalived 环境,只有其中 1 台对外提供服务(配置 VIP),另外一台作为热备份,只有在 server1 服务器宕机或不可提供服务时,keepalived 会自动将 VIP 迁移到 server2 上,实现服务器的高可用。VIP 切换过程中是不需要人为干预的。
keepalived简介
Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。
Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP是Virtual Router RedundancyProtocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。 所以,Keepalived 一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能。
部署keepalived
[root@vm4 ~]# yum install keepalived -y
[root@vm4 ~]# cd /etc/keepalived/
[root@vm4 keepalived]# vim keepalived.conf
[root@vm4 keepalived]# yum install -y mail
[root@vm4 keepalived]# systemctl start keepalived.service
安装keepalived 并且进行修改配置文件
部署后的结果,当某个rs宕掉时,keepalived会自动将他剔除。
keepalived的高可用
使用两台 Linux 服务器分别 LVS + keepalived 环境,只有其中 1 台对外提供服务(配置 VIP),另外一台作为热备份,只有在 vm4服务器宕机或不可提供服务时,keepalived 会自动将 VIP 迁移到 vm7 上,实现服务器的高可用。VIP 切换过程中是不需要人为干预的。
vm4作为主机,vm7作为备机。
[root@vm7 ~]# yum install keepalived -y
[root@vm7 ~]# yum install ipvsadm -y
对vm7进行和vm4相同的配置。
让vm4宕掉,查看vip发现其绑定的是mac地址,此时自动切换到vm7。
当vm4恢复时,又将自动切换回vm4.