LVS负载均衡群集

LVS负载均衡群集

互联网应用中,随着站点的硬件性能、响应速度、服务稳定性、数据可靠性等要求越来越高,单台服务器力不从心。这时需要考虑横向拓展与纵向扩展,横向拓展是提升硬件等;纵向扩展一般使用普通服务器构建服务器群集(负载均衡群集、高可用群集、高性能运算群集),如 LVS 负载均衡集群。

群集的类型

负载均衡群集(Load Balance Cluster)
  • 以提高应用系统的响应能力、尽可能处理更多的访问请求、减少延迟为目标,获得高并发、高负载(LB)的整体性能。例如,“DNS轮询“、”应用层交换“、”反向代理“等都可用作负载均衡群集
  • LB的负载分配依赖于主节点的分流算法,将来自客户机的访问请求分担给多个服务器节点,从而缓解整个系统的负载压力
高可用群集(High Availability Cluster)
  • 以提高应用系统的可靠性、尽可能地减少中断时间为目标,确保服务的连续性,达到高可用(HA)的容错效果。例如,“故障切换”、“双机热备”、“多级热备”等都属于高可用群集技术
  • HA的工作放hi包括双工和主从两种模式。双工即所有节点同时在线;主从则只有主节点在线,但当出现故障时从节点能自动切换为主节点
高性能运算群集 (High Performance Computer Cluster)
  • 以提高应用系统的CPU运算速度、扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算 (HPC) 能力。例如,“云计算“、”网格计算”也可视为高性能运算的一种。
  • 高性能运算群集的高性能依赖于“分布式运算”和“并行计算”,通过专用硬件和软件将多个服务器的CPU、内存等资源整合在一起,实现只有大型、超级计算机才具备的计算能力。

什么是负载均衡

负载均衡是一种将网络流量分配到多个服务器上的技术,以达到提高系统性能、可靠性和可扩展性的目的。其原理是将来自客户端的请求分发到多台服务器上,从而避免单台服务器过载,提高系统的吞吐量和响应速度。

负载均衡系统的作用

提高系统的可用性和可靠性
  • 通过将流量分配到多台服务器上,当其中一台服务器出现故障时,其他服务器可以继续提供服务,从而避免系统宕机。
提高系统的性能和吞吐量
  • 通过将流量分配到多台服务器上,可以充分利用服务器资源,提高系统的并发处理能力和响应速度。
实现系统的可扩展性
  • 通过增加服务器数量,可以扩展系统的处理能力,满足不断增长的用户需求。

常见的负载均衡系统

  • LVS(Linux Virtual Server):是一种基于 Linux 内核的负载均衡软件,支持多种负载均衡算法和协议,如 IPVS、NAT、DR 等。

  • HAProxy:是一种高性能的负载均衡软件,支持多种负载均衡算法和协议,如 TCP、HTTP、HTTPS 等。

  • Nginx:是一种高性能的 Web 服务器和反向代理服务器,也可以作为负载均衡器使用,支持多种负载均衡算法和协议,如 HTTP、TCP、UDP 等。

  • F5 BIG-IP:是一种商业化的负载均衡硬件和软件,支持多种负载均衡算法和协议,如 HTTP、TCP、UDP、SSL 等。

负载均衡结构

负载调度器
  • 这是访问整个群集系统的唯一入口,对外使用所有服务器共有的 VIP (Virtual IP,虚拟IP)地址,也称为群集IP 地址。
  • 通常会配置主、备两台调度器实现热备份,当主调度器失效以后平滑替换至备用调度器,确保高可用性。
服务器池
  • 群集所提供的应用服务(如 HTTP、FTP) 由服务器池承担,其中的每个节点具有独立的 RIP (Real IP,真实IP) 地址,只处理调度器分发过来的客户机请求。

  • 当某个节点暂时失效时,负载调度器的容错机制会将其隔离,等待错误排除以后再重新纳入服务器池。

共享存储
  • 为服务器池中的所有节点提供稳定、一致的文件存取服务,确保整个群集的统一性。

  • 在 Linux/UNIX环境中,共享存储可以使用NAS设备或者提供NFS(Network File System,网络文件系统)共享服务的专用服务器。

负载均衡的工作模式

关于群集的负载调度技术,可以基于 IP、端口、内容等进行分发,其中基于 IP 的负载调度是效率最高的。基于 IP 的负载均衡模式中,有三种工作模式。

地址转换模式(NAT)
  • 类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,即作为客户机的访问入口,也是各节点回应客户机的访问出口。服务器节点使用私有 IP 地址,与负载调度器位于同一个物理网段,安全性要优于其他两种方式。但是调度器会成为瓶颈的风险。
IP隧道模式(TUN)
  • 采用开放式的网络结构,负载调度器仅作为客户机的访问入口,各节点通过各自的Internet连接直接回应客户机,而不再经过负载调度器。服务器节点分散在互联网中的不同位置,具有独立的公网 IP 地址,通过专用 IP 隧道与负载调度器相互通信。一般用于大型企业,如百度。
直接路由模式(DR)
  • 采用半开放式的网络结构,与 TUN模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络。负载调度器与各节点服务器通过本地网络连接,不需要建立专用的 IP 隧道。

关于LVS虚拟服务器

Linux Virtual Server (LVS) 是针对 Linux 内核开发的一个负载均衡项目,由我国的章文嵩博士在 1998 年 5月创建,官方站点位于 http://www.linuxvirtualserver.org/。

LVS 实际上相当于基于 IP 地址的虚拟化应用,为基于 IP 地址和内容请求分发的负载均衡提出了一种高效的解决方法。

针对Linux内核的负载均衡解决方案,LVS 现在已成为 Linux 内核的一部分,默认编译为 ip_vs 模块,必要时能够自动调用。

modprobe ip_vs  # 确定对内核的支持
cat /proc/net/ip_vs    # 查看ip_vs版本,能够查看即表示已经启动

在这里插入图片描述

LVS负载调度算法

轮询(Round Robin)
  • 将收到的访问请求按照顺序轮流分配给群集中的各节点(真实服务器),均等地对待每一台服务器,而不管服务器实际的连接数和系统负载。
加权轮询 (Weighted Round Robin)
  • 根据真实服务器的处理能力轮流分配收到的访问请求,调度器可以自动查询各节点的负载情况,并动态调整其权重这样可以保证处理能力强的服务器承担更多的访问流量。
最少连接 (Least Connections)
  • 根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数最少的节点。如果所有的服务器节点性能相近,采用这种方式可以更好地均衡负载。
加权最少连接 (Weighted Least Connections)
  • 在服务器节点的性能差异较大的情况下,可以为真实服务器自动调整权重,权重较高的节点将承担更大比例的活动连接负载。

ipvsadm管理工具

ipvsadm是在负载调度器上使用的LVS群集管理工具,通过调用ip_vs模块来添加、删除服务器节点;

即要使用ip_vs,需要安装ipvsadm

# 安装ipvsadm
yum -y insatll ipvsadm
# 查看版本号
ipvsadm -v

在这里插入图片描述

LVS群集的管理工作主要包括创建虚拟服务器、添加服务器节点、查看群集节点状态、删除服务器节点和保存负载分配策略。

LVS-NAT模式

在这里插入图片描述

1 配置SNAT转发,使web节点服务器能够访问外网

在网关服务器配置

# 打开网关路由转发
vi /etc/sysctl.conf
···
net.ipv4.ip_forward = 1
# 设置防火墙策略
firewall-cmd --add-interface=ens33 --zone=external
或
firewall-cmd --add-masquerade --zone=public

2 配置节点服务器

# 为WEB服务器池安装Apache
yum -y install httpd
# 启动Apache
systemctl start httpd

3 创建虚拟调度服务器

# 利用LVS做一对多的调度
ipvsadm -A -t 192.168.27.145:80 -s rr
-A 添加虚拟调度服务器
-t 指定VIP地址及TCP端口
-s 指定负载调度算法rr wrr lc wlc
ipvsadm -ln    # 查看

4 添加节点服务器

ipvsadm -a -t 192.168.27.145:80 -r 192.168.153.132:80 -m -w 1
ipvsadm -a -t 192.168.27.145:80 -r 192.168.153.133:80 -m -w 1
-a 添加服务器
-r 指定调度到哪一台服务器;RIP地址及TCP端口
-m 表示使用NAT群集模式
-g 表示使用DR群集模式
-i 表示使用TUN群集模式
-w 设置权重;默认1;0表示不参与调度
# 查看节点状态
ipvsadm -ln
-l 列表查看LVS虚拟服务器;可以指定查看某一个VIP地址,默认查看全部
-n 以数字形式显示地址、端口等信息

在这里插入图片描述

此时,真机访问网关服务器,LVS负载调度器将用户调度访问WEB服务器池的节点

拓展:如果需要执行删除操作

# 删除LVS群集192.168.153.133中的节点192.168.27.145
ipvsadm -d -r 192.168.27.145:80 -t 192.168.153.133:80
-d 执行删除操作(必须指定目标对象,包括节点地址、虚拟IP地址)

# 删除虚拟服务器
ipvsadm -D -t 192.168.27.145:80
-D 删除整个虚拟服务器;指定虚拟IP地址即可,无需指定节点

如果没有保存策略,重启ipvasdm将会清除全部策略

# 保存策略
ipvsadm-save > /etc/sysconfig/ipvsadm

在这里插入图片描述

5 设置网关服务器防火墙策略

# 打开80端口
firewall-cmd --add-port=80/tcp --zone=external
# LVS需要使用80端口进行转发,设置端口转发
firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -p tcp --sport 80 -j ACCEPT

现在可以访问网关服务器,显示web服务器的内容
在这里插入图片描述

在这里插入图片描述

为了更方便查看效果,可以修改web服务器Apache配置文件,关闭保持连接

vim /etc/httpd/conf/httpd.conf
Keepalive OFF

6 搭建NFS服务器,实现文件共享

# 安装软件
yum install rpcbind nfs-utils -y

# 创建共享目录
mkdir /share

# 编辑配置文件,确定共享目录与共享主机
vim /etc/exports
/share  192.168.153.0/24(rw,sync)

# 启动NFS服务
systemctl start rpcbind
systemctl start nfs

7 在WEB服务器池节点挂载NFS

# 客户端需要安装nfs工具
yum -y install nfs-utils nfs-utils-lib nfs4-acl-tools

# 挂载
mount -t nfs 192.168.153.134:/share /var/www/html/
或
mount.nfs 192.168.153.134:/share /var/www/html/

在这里插入图片描述

8 在NFS服务器/share目录下创建文件,并访问网关服务器

# nfs服务的默认端口是2049
# 需要在NFS服务器配置防火墙策略
firewall-cmd --add-port=2049/tcp  --zone=public

在这里插入图片描述

在这里插入图片描述

LSV-DR模式

在这里插入图片描述

在DR模式的群集中,LVS负载调度器作为群集的访问入口,但不作为网关使用;服务器池中的所有节点都各自接入Internet,发送给客户机的Web响应数据包不需要经过LVS负载调度器;调度器通过本地网络与各节点连接,不在需要专门的IP隧道。

这种方式入站、出站访问数据被分别处理,因此LVS负载调度器和所有节点服务器都需要配置有VIP地址,以便响应对整个群集的访问。考虑到数据的安全性,共享存储设备会放在内部的专用网络中。

数据流向

  • 客户端发送请求到Director Server(负载调度器),携带的目标 IP 地址为 VIP;
  • 调度器判断数据包的目标 IP 是否为本机 VIP ,是本机 VIP 则重新封装数据包;由于Director Server 与 Real Server 在同一网段,调度直接修改目标MAC 为 Real Server 的 MAC 地址,修改源 MAC 地址为自己的 MAC 地址,将数据包发送给 Real Server(源 IP 地址与目标 IP 地址没有修改)
  • 到达 Real Server 后,判断请求报文的 MAC 地址是否为自己的 MAC 地址,如果是 Real Server 就接受此报文
  • Real Server 重新封装报文(源 IP 地址为 VIP ,目标 IP 为客户端 IP 地址),将此报文通过 lo 接口传送给物理网卡然后向外发出, Real Server 直接将响应报文传送到客户端

DR模式的特点

  • Director Server(负载调度器) 和 Real Server(真实服务器) 必须在同一个物理网络中。
  • Real Server 可以使用私有地址,也可以使用公网地址。如果使用公网地址,可以通过互联网对 RIP 进行直接访问。
  • Director Server作为群集的访问入口,但不作为网关使用。
  • 所有的请求报文经由 Director Server,但回复响应报文不能经过 Director Server。
  • Real Server 的网关不允许指向 Director Server IP,即 Real Server发送的数据包不允许经过 Director Server。
  • Real Server 上的 lo 接口配置 VIP 地址。

配置负载均衡器

1 配置虚拟IP地址VIP

采用虚接口的方式ens33:0,为网卡ens33绑定VIP地址,以便响应集群访问

cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0
vim ifcfg-ens33:0

在这里插入图片描述

启用网卡ens33:0,查看配置结果

在这里插入图片描述

2 调整/proc响应参数

对于DR群集模式来说,由于LVS负载调度器和各节点需要公用VIP地址,应该关闭Linux内核的重定向参数响应

vim /etc/sysctl.conf
···
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
——————————————————————————
sysctl -p    # 重新加载

在这里插入图片描述

3 配置负载分配策略

ipvsadm -A -t 192.168.27.149:80 -s rr
ipvsadm -a -t 192.168.27.149:80 -r 192.168.27.150:80 -g -w 1
ipvsadm -a -t 192.168.27.149:80 -r 192.168.27.151:80 -g -w 1
——————————————————————
# 如果需要清除全部策略
ipvsadm -C

在这里插入图片描述

配置节点服务器

使用 DR 模式时,节点服务器也需要配置 VIP 地址,并调整内核的 ARP 响应参数以阻止更新 VIP 的 MAC 地址,避免发生冲突。除此以外,Web 服务的配置与 NAT 方式类似。

1 配置虚拟IP地址VIP

在每个节点服务器,同样需要具有 VIP 地址 192.168.27.149,但此地址仅用作发送 Web 响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)。因此使用虚接口 lo:0 来承载 VIP 地址,并为本机添加一条路由记录,将访问 VIP 的数据限制在本地,以避免通信紊乱。

每一个web服务器池的节点都需要进行配置。

在这里插入图片描述

使用ifconfig命令查看

在这里插入图片描述

添加VIP本地访问路由器

route add -host 192.168.27.149 dev lo:0
——————————————
# 永久配置
vim /etc/rc.local
···
/sbin/route add -host 192.168.27.149 dev lo:0

2 调整/proc响应参数

调整 ARP 响应参数以阻止更新 VIP 的 MAC 地址

vim /etc/sysctl.conf
···
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

在这里插入图片描述

3 在NFS共享服务器上创建共享文件

cd /share
mkdir http1 http2
echo "hello linux 8888888888" > ./http1/index.html
echo "hello python 6666666666" > ./http2/index.html
——————————————————————————
# 编辑配置文件,确定共享目录与共享主机
vim /etc/exports
/share  192.168.153.0/24(rw,sync)
/share/http1    192.168.153.0/24(rw,sync)
/share/http2    192.168.153.0/24(rw,sync)

# 启动NFS服务
systemctl start rpcbind
systemctl start nfs

HTTP1上挂载

mount -t nfs 192.168.153.134:/share/http1 /var/www/html

HTTP2上挂载

mount.nfs 192.168.153.134:/share/http2 /var/www/html

4 启动Apache,测试访问

systemctl start httpd

访问VIP192.168.27.149

在这里插入图片描述

在这里插入图片描述

拓展:关于 ARP 协议与arp_ignorearp_announce参数

ARP协议即地址解析协议,是根据IP地址获取MAC地址的一个网络层协议。

工作原理:ARP首先会发起一个请求数据包,数据包的首部包含了目标主机的IP地址,然后这个数据包会在链路层进行再次包装,生成**以太网数据包,**最终由以太网广播给子网内的所有主机,每一台主机都会接收到这个数据包,并取出标头里的IP地址,然后和自己的IP地址进行比较,如果相同就返回自己的MAC地址,如果不同就丢弃该数据包。ARP接收返回消息,以此确定目标机的MAC地址;与此同时,ARP还会将返回的MAC地址与对应的IP地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。Windows下cmd输入 arp -a 就可以查询本机缓存的ARP数据。

# arp_ignore参数的作用是控制系统在收到外部的arp请求时,是否要返回arp响应
0:响应任意网卡上接收到的对本机IP地址的arp请求(包括环回网卡上的地址),而不管该目的IP是否在接收网卡上。
1:只响应目的IP地址为接收网卡上的本地地址的arp请求。
2:只响应目的IP地址为接收网卡上的本地地址的arp请求,并且arp请求的源IP必须和接收网卡同网段。

# arp_announce的作用是控制系统在对外发送arp请求时,如何选择arp请求数据包的源IP地址。
0:允许使用任意网卡上的IP地址作为arp请求的源IP,通常就是使用数据包a的源IP。
1:尽量避免使用不属于该发送网卡子网的本地地址作为发送arp请求的源IP地址。
2:忽略IP数据包的源IP地址,选择该发送网卡上最合适的本地地址作为arp请求的源IP地址。

# arp_ignore和arp_announce参数在DR模式下的作用
arp_ignore:因为DR模式下,每个真实服务器节点都要在环回网卡上绑定虚拟服务IP。这时候,如果客户端对于虚拟服务IP的arp请求广播到了各个真实服务器节点,如果arp_ignore参数配置为0,则各个真实服务器节点都会响应该arp请求,此时客户端就无法正确获取LVS节点上正确的虚拟服务IP所在网卡的MAC地址。假如某个真实服务器节点A的网卡eth1响应了该arp请求,客户端把A节点的eth1网卡的MAC地址误认为是LVS节点的虚拟服务IP所在网卡的MAC,从而将业务请求消息直接发到了A节点的eth1网卡。这时候虽然因为A节点在环回网卡上也绑定了虚拟服务IP,所以A节点也能正常处理请求,业务暂时不会受到影响。但时此时由于客户端请求没有发到LVS的虚拟服务IP上,所以LVS的负载均衡能力没有生效。造成的后果就是,A节点一直在单节点运行,业务量过大时可能会出现性能瓶颈。所以DR模式下要求arp_ignore参数要求配置为1。

arp_announce:每个机器或者交换机中都有一张arp表,该表用于存储对端通信节点IP地址和MAC地址的对应关系。当收到一个未知IP地址的arp请求,就会再本机的arp表中新增对端的IP和MAC记录;当收到一个已知IP地址(arp表中已有记录的地址)的arp请求,则会根据arp请求中的源MAC刷新自己的arp表。如果arp_announce参数配置为0,则网卡在发送arp请求时,可能选择的源IP地址并不是该网卡自身的IP地址,这时候收到该arp请求的其他节点或者交换机上的arp表中记录的该网卡IP和MAC的对应关系就不正确,可能会引发一些未知的网络问题,存在安全隐患。所以DR模式下要求arp_announce参数要求配置为2。

arp_ignore和arp_announce参数分别有all,default,lo,eth1,eth2…等对应不同网卡的具体参数。当all和具体网卡的参数值不一致时,取较大值生效。

的虚拟服务IP上,所以LVS的负载均衡能力没有生效。造成的后果就是,A节点一直在单节点运行,业务量过大时可能会出现性能瓶颈。所以DR模式下要求arp_ignore参数要求配置为1。

arp_announce:每个机器或者交换机中都有一张arp表,该表用于存储对端通信节点IP地址和MAC地址的对应关系。当收到一个未知IP地址的arp请求,就会再本机的arp表中新增对端的IP和MAC记录;当收到一个已知IP地址(arp表中已有记录的地址)的arp请求,则会根据arp请求中的源MAC刷新自己的arp表。如果arp_announce参数配置为0,则网卡在发送arp请求时,可能选择的源IP地址并不是该网卡自身的IP地址,这时候收到该arp请求的其他节点或者交换机上的arp表中记录的该网卡IP和MAC的对应关系就不正确,可能会引发一些未知的网络问题,存在安全隐患。所以DR模式下要求arp_announce参数要求配置为2。

arp_ignore和arp_announce参数分别有all,default,lo,eth1,eth2…等对应不同网卡的具体参数。当all和具体网卡的参数值不一致时,取较大值生效。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值