首页 > 其他分享 >LVS负载均衡群集

LVS负载均衡群集

时间:2024-06-21 17:11:25浏览次数:9  
标签:ARP 负载 LVS 群集 IP ipvsadm 192.168 IP地址 服务器

一、LVS概述

1.工作原理

LVS(Linux Virtual Server)是一个用于构建高可用性和可伸缩性网络服务的开源软件,其工作原理如下:

负载均衡器(Load Balancer):

LVS 主要功能是作为一个负载均衡器,将来自客户端的请求分发到多个后端服务器,以达到分担负载、提高可用性和性能的目的。

四种调度算法:

LVS 提供了四种负载均衡调度算法,用于决定将请求发送到哪个后端服务器:

  • 轮询调度(Round Robin):按照服务器列表的顺序依次分发请求。
  • 加权轮询调度(Weighted Round Robin):根据服务器配置的权重分发请求,权重高的服务器获得更多的请求。
  • 最少连接调度(Least Connections):将请求发送到当前连接数最少的服务器。
  • 基于局部性的最少连接调度(Locality-Based Least Connections):根据客户端 IP 和服务器之间的连接状态来决定发送请求的服务器,以减少网络延迟。

网络地址转换(Network Address Translation,NAT):

LVS 通常使用 IP 负载均衡技术,其中负载均衡器将客户端请求的目标 IP 地址修改为一个后端服务器的 IP 地址,并将响应从后端服务器返回给客户端。这种方式隐藏了后端服务器的实际 IP 地址,增强了安全性和可伸缩性。

监控和故障检测:

LVS 负载均衡器通常与心跳监控(如Keepalived或者自定义脚本)结合使用,定期检测后端服务器的可用性。如果某个服务器宕机或者无法响应,负载均衡器将自动将其从池中移除,以避免将请求发送到不可用的服务器。

高可用性:

LVS 本身可以通过配置多个负载均衡器实现高可用性架构,利用浮动 IP 或者虚拟 IP 技术来确保即使一个负载均衡器故障,服务也能继续可用。

总之,LVS 通过将负载分发到多个服务器并处理后端服务器的故障,实现了高性能、高可用性和可伸缩性的网络服务架构。

2.LVS 的三种工作模式

NAT模式

 

调度器仅作为客户端的访问入口,节点服务器的响应消息是直接返回给客户端的,不需要经过调度器。

但是由于节点服务器需要部署在不同位置的公网环境中,需要具有独立的公网IP,调度器与节点服务器是通过专用的IP隧道实现相互通信的,因此IP隧道模式的成本较高、安全性较低,且IP隧道需要额外的封装和解封装,性能会受到一定的影响。

DR 模式(direct routing)

 调度器仅作为客户端的访问入口,节点服务器的响应消息是直接返回给客户端的,不需要经过调度器。(与NAT模式的区别)
节点服务器与调度器是部署在同一个物理网络内,因此不需要建立专用的IP隧道。(与TUN模式的区别)
DR模式是企业首选的LVS模式。

TUN模式

 

调度器仅作为客户端的访问入口,节点服务器的响应消息是直接返回给客户端的,不需要经过调度器。

但是由于节点服务器需要部署在不同位置的公网环境中,需要具有独立的公网IP,调度器与节点服务器是通过专用的IP隧道实现相互通信的,因此IP隧道模式的成本较高、安全性较低,且IP隧道需要额外的封装和解封装,性能会受到一定的影响。

3.LVS 调度算法

rr 轮询 wrr 加权轮询 sh 源地址哈希 dh 目的地址哈希 lc 最小连接 wlc 加权最小连接 lblc 基于地址的最小连接0

固定调度算法:rr、wrr、dh、sh

rr:轮询算法,将请求依次分配给不同的rs节点,即RS节点中均摊分配。适合于RS所有节点处理性能接近的情况。
wrr:加权轮询调度,一句不同RS的权值分配任务。权值较高的RS将优先获得任务,并且分配到的连接数将比权值低的RS更多,相同权值的RS得到相同数目的连接数。
dh:目的地址哈希调度(destination hashing)以目的地址为关键字查找一个静态hash表来获得所需RS。
sh:源地址哈希调度(source hashing)以源地址为关键字查找一个静态hash表来获得需要的RS。

动态调度算法:wlc、lc、lblc

wlc:加权最小连接数调度,架设各台RS的权值依次为Wi,当前tcp连接数依次为Ti,依次去Ti/Wi为最小的RS作为下一个分配的RS。
lc:最小连接数调度(least-connection),ipvs表存储了所有活动的连接。LB会比较连接请求放到当前连接最少的RS。
lblc:基于地址的最小连接数(locality-based least-connection),将来自同一个目的地址的请求分配给同一台RS,此时这台服务器是尚未满负荷的。否则就将这个请求分配给连接数最小的RS,并以它作为下一次分配的首先考虑。

4.ipvsadm工具

yum install -y ipvsadm

ipvsadm工具的功能

LVS群集创建与管理:

  1. 创建虚拟服务器
  2. 添加、删除服务器节点
  3. 查看群集及节点情况
  4. 保存负载分配策略

 ipvsadm工具选项

-A: 添加虚拟服务器
-D: 删除整个虚拟服务器
-s: 指定负载调度算法(轮询: rr、加权轮询: wrr、最少连接: lc、加权最少连接: wlc)
-a: 添加真实服务器(节点服务器)
-d: 删除某一个节点
-t: 指定VIP地址及TCP端口
-r: 指定RIP地址及TCP端口
-m: 表示使用NAT群集模式
-g: 表示使用DR模式
-i: 表示使用TUN模式
一w: 设置权重(权重为0时表示暂停节点)
-p 60: 表示保持长连接60秒
-l: 列表查看 LVS虚拟服务器(默认为查看所有)
-n: 以数字形式显示地址、端口等信息,常与"-l“选项组合使用。ipvsadm -ln

二、LVS-NAT模式

1.LVS-NAT模式配置思路

1)配置 NFS 共享存储;
2)节点服务器安装 Web 服务,注意:默认网关要指向 调度器的IP地址,测试的时候关闭连接保持;
3)调度服务器要开启 IP路由转发 功能和设置 SNAT 等 iptables 规则,安装 ipvsadm 工具,配置虚拟服务器和真实节点服务器相关配置;
4)客户端测试的时候网关要指向 调度器的IP地址。

2.部署实例

调度器:内网关 ens33:192.168.100.254;外网关ens36:12.0.0.254
Web节点服务器1:192.168.100.146
Web节点服务器2:192.168.100.150
NFS服务器:192.168.100.140
客户端:12.0.0.10

3. 配置 NFS 共享存储

systemctl disable firewalld.service --now
setenforce 0

yum install -y nfs-utils rpcbind
systemctl start rpcbind nfs


mkdir /opt/test1 /opt/test2
chmod 777 /opt/test1 /opt/test2
echo "This is test1 web" > /opt/test1/index.html
echo "This is test2 web" > /opt/test2/index.html
#nfs
vim /etc/exports
 
/usr/share *(ro,sync)
/opt/test1 192.168.2.0/24(rw,sync)
/opt/test2 192.168.2.0/24(rw,sync)
 
systemctl start nfs
exportfs -rv #发布共享 showmount -e

4.配置web服务器

#web1
systemctl disable firewalld
setenforce 0

yum install -y httpd
systemctl start httpd
yum install -y nfs-utils rpcbind
systemctl start rpcbind

mount.nfs 192.168.100.140:/opt/test1 /var/www/html
[root@web1 ~]# vim /etc/fstab
#末行写入,设置自动挂载
192.168.100.140:/opt/test1                 /var/www/html           nfs     defaults,_netdev 0 0
#web2 
mount.nfs 192.168.122.88:/opt/test2 /var/www/html
vim /etc/fstab
#末行写入,设置自动挂载
192.168.122.88:/opt/test2                 /var/www/html           nfs     defaults,netdev 0 0

5. 配置负载调度器

配置SNAT转发规则

#开启路由转发
vim /etc/sysctl.conf
#末行写入
net.ipv4.ip_forward = 1
sysctl -p

iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens36 -j SNAT --to-source 12.0.0.254

安装ipvsadm管理工具

yum install -y ipvsadm
#启动服务前需保存负载分配策略
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm

 配置负载分配策略(NAT模式只要在服务器上配置,节点服务器不需要特殊配置)

ipvsadm -C #清除原有策略

#添加策略
ipvsadm -A -t 12.0.0.254:80 -s rr
ipvsadm -a -t 12.0.0.254:80 -r 192.168.100.146:80 -m -w 1
ipvsadm -a -t 12.0.0.254:80 -r 192.168.100.150:80 -m -w 1

ipvsadm #启用策略

ipvsadm -ln
#查看节点状态,Masq代表NAT模式

ipvsadm-save > /etc/sysconfig/ipvsadm
#保存策略
  --clear           -C        clear the whole table
  --add-service     -A        add virtual service with options
  --tcp-service  -t service-address   service-address is host[:port]
  --add-server      -a        add real server with options
  --scheduler    -s scheduler         one of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
                                      the default scheduler is wlc.
  --real-server  -r server-address    server-address is host (and port)
  --masquerading -m                   masquerading (NAT)
  --weight       -w weight            capacity of real server

6. 访问测试

curl 12.0.0.254

三、LVS-DR模式

1.DR模式的特点

1)Director Server和Real Server必须在同一个物理网络中;

2)Real Server可以使用私有地址,也可以使用公网地址。如果使用公网地址,可以通过互联网对RIP进行直接访问;

3)Director Server作为群集的访问入口,但不作为网关使用;

4)所有的请求报文经由Real Server,但回复响应报文不能经过Director Server;

5)Real Server的网关不允许指向Director Server IP,即Real Server发送的数据包不允许经过Director Server;

6)Real Server上的lo接口配置VIP的IP地址。

2.LVS-DR中的ARP问题及解决方法

ARP问题1-相同IP

#原因

在LVS-DR负载均衡集群中,负载均衡器与节点服务器都要配置相同的VIP地址。
在局域网中具有相同的IP地址,势必会造成各服务器ARP通信的紊乱。
#解决思路及方法

当ARP广播发送到LVS-DR集群时,因为负载均衡器和节点服务器都是连接到相同的网络上,它们都会接收到ARP广播。
只有前端的负载均衡器进行响应,其他节点服务器不应该响应ARP广播。
对节点服务器进行处理,使其不响应针对VIP的ARP请求。

使用虚接口lo:0承载VIP地址;
设置内核参数arp_ignore=1(系统只响应目的IP为本地IP的ARP请求)。
arp_ignore参数控制了内核对ARP请求的响应行为,其值范围为0到8,每个值定义了不同的响应策略:

arp_ignore = 0:内核将对所有ARP请求进行响应,不论请求目标IP地址是否匹配本地网络接口。
arp_ignore = 1:内核仅对那些请求目标IP地址匹配本地网络接口的ARP请求进行响应。这意味着系统会忽略所有目标IP地址不匹配本地网络接口的ARP请求。
arp_ignore = 2:内核仅在目标IP地址既匹配本地网络接口的IP地址,又匹配从哪个接口接收到的ARP请求时,才进行响应。
arp_ignore = 3:内核将对本地子网的ARP请求进行响应。
arp_ignore = 4到8:这些值提供了更细粒度的控制,用于高级网络配置和特定需求场景。

ARP问题2-响应报文的源IP

#原因

ARP请求中的源IP地址:
  在默认情况下,Linux内核在发送ARP请求时会使用IP包的源IP地址作为ARP请求包中的源IP地址。
  在LVS DR模式下,Real Server返回的数据包的源IP地址是VIP(虚拟IP地址),但是这些数据包是通过Real Server的实际网络接口(例如ens33)发送出去的。
ARP表项冲突:   路由器根据ARP表项,会将新的请求报文转发给Real Server。如果Real Server发送的ARP请求使用了VIP作为源IP地址,路由器的ARP表项可能会错误地映射VIP到Real Server的MAC地址。   这种情况下,当客户端尝试访问VIP时,路由器会将流量发送到Real Server而不是Director,导致Director的VIP失效,从而影响LVS的正常工作。
#解决方法

对节点服务器进行处理,设置内核参数arp_announce=2(系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址)
arp_announce参数可以取不同的值,每个值都有特定的行为:

0: 内核使用任何本地地址,即使它不是发送ARP请求的接口的最佳地址。这是默认的行为。
1: 内核尝试选择发送ARP请求的接口上的最佳本地地址。如果没有找到合适的地址,它会使用任何本地地址。
2: 内核严格选择发送ARP请求的接口上的最佳本地地址,并且只使用该接口上的地址。这是最严格的方法,确保ARP请求中的源IP地址与发送接口的地址一致。

预防方法

修改/etc/sysctl.conf文件,末行添加如下内容:

net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
#arp_ignore = 1
#防止网关路由器发送ARP广播时,调度器和节点服务器都进行相应,导致ARP缓存表的紊乱,不对非本地物理网卡IP的ARP请求进行响应,因为VIP是承载在lo:0。
#arp_announce = 2
#系统不使用响应数据包的源IP地址(VIP)来作为本机进行ARP请求报文的源IP地址,而使用发送报文的物理网卡IP地址作为ARP请求报文的源IP地址,这样可以防止网关路由器接收到源IP地址为VIP的ARP请求报文后又更新ARP缓存表,导致外网再发送请求时,数据包到不了调度器。

3.部署实例

调度器:192.168.100.254
Web节点服务器1:192.168.100.146
Web节点服务器2:192.168.100.150
NFS服务器:192.168.100.140
VIP:192.168.100.199

4.配置负载调度器

配置虚拟IP地址

cd /etc/sysconfig/network-scripts

cp ifcfg-ens33 ifcfg-ens33:0
#若是隧道模式,复制为ifcfg-tun10

vim ifcfg-ens33:0
DEVICE="ens33:0"
BOOTPROTO="static"
ONBOOT="yes"
IPADDR=192.168.100.199
NETMASK=255.255.255.0

调整/proc响应参数

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

#服务器不是一台路由器,那么它不会发送重定向,所以可以关闭该功能

vim /etc/sysctl.conf
#末行写入以下内容
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
 
sysctl -p

 配置负载分配策略

ipvsadm-save >/etc/sysconfig/ipvsadm
systemctl start ipvsadm
ipvsadm -C

#添加策略,若隧道模式,-g替换为-i
ipvsadm -A -t 192.168.100.199:80 -s rr
ipvsadm -a -t 192.168.100.199:80 -r 192.168.100.146:80 -g
ipvsadm -a -t 192.168.100.199:80 -r 192.168.100.150:80 -g

#保存策略并查看
ipvsadm
ipvsadm -ln  
  --gatewaying   -g                   gatewaying (direct routing) (default)

5.配置节点服务器

配置虚拟IP地址(VIP:192.168.2.199)
此地址仅用作发送Web响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)。

因此使用虚接口lo:0来承载VIP地址,并为本机添加一条路由记录,将访问VIP的数据限制在本地,以避免通信紊乱。

cd /etc/sysconfig/network-scripts
#配置lo:0
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0

DEVICE="lo:0"
BOOTPROTO="static"
ONBOOT="yes"
IPADDR=192.168.100.188
NETMASK=255.255.255.255

#注意:子网掩码必须全为1
 
ifup lo:0
ifconfig lo:0
route add -host 192.168.100.199 dev lo:0
#临时添加

vim /etc/rc.local 
#末行添加,加入开机自启动
/sbin/route add -host 192.168.100.199 dev lo:0
 
chmod +x /etc/rc.d/rc.local 

调整内核的ARP响应参数以组织更新VIP的MAC地址,避免发生冲突

vim /etc/sysctl.conf 
 
net.ipv4.conf.lo.arp_ignore = 1
#系统只响应目的IP为本地IP的ARP请求
net.ipv4.conf.lo.arp_announce = 2
#系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
 
sysctl -p

6.浏览器访问测试

 

标签:ARP,负载,LVS,群集,IP,ipvsadm,192.168,IP地址,服务器
From: https://www.cnblogs.com/hxqwe/p/18256936

相关文章

  • LVS+KeepAlived高可用负载均衡集群
    1、高可用群集(1)单台服务器(2)keepalived一个合格的群集应该具备的特点:负载均衡:用于提高群集的性能(LVSNqinxHAProxySLBF5)健康检查(探针):针对于调度器和节点服务器(KeepalivedHeartbeat)故障转移:通过VIP漂移实现主备切换健康检查(探针)常用的工作方式:发送心跳消息:vrr......
  • 2024华为OD机试真题-API集群负载统计-(C++/Python)-C卷D卷-100分
     2024华为OD机试题库-(C卷+D卷)-(JAVA、Python、C++)题目描述某个产品的RESTfulAPI集合部署在服务器集群的多个节点上,近期对客户端访问日志进行了采集,需要统计各个API的访问频次,根据热点信息在服务器节点之间做负载均衡,现在需要实现热点信息统计查询功能。RESTfulAPI是......
  • CDN,负载均衡器,反向代理的异同
    内容分发网络(CDN)功能和作用:内容缓存和分发:CDN在全球多个节点上缓存静态内容(如图像、CSS、JavaScript文件),将内容分发到离用户最近的节点,以减少延迟并加快加载速度。负载分担:通过将请求分发到多个缓存节点,CDN可以减少源服务器的负载,从而提高整体系统的性能和可用性。......
  • LVS+Keepalived群集
    目录一、群集1.一个合格的群集应该具备的特点2.健康检查(探针)常用的工作方式二、Keepalived工具1.概念2.工作原理3.安装与启动4.Keepalived体系主要模块及其作用三、配置主备服务器1.配置主备服务器2.验证3.总结4keepalived的抢占与非抢占模式四、配置LVS+Keepal......
  • CPU利用率和负载
    CPU利用率显示的是程序在运行期间实时占用的CPU百分比;cpu使用率反映的是当前cpu的繁忙程度,忽高忽低的原因在于占用cpu处理时间的进程可能处于io等待状态但却还未释放进入wait。CPU负载是指某段时间内占用cpu时间的进程和等待cpu时间的进程数,这里等待cpu时间的进程是指等待被唤醒......
  • LVS_Director + KeepAlived + 邮件报警
    目录一.环境准备二. 对master和backup操作三.配置master主机四.配置backup主机六.验证虚拟IP七.配置后端两个web服务器对web1和web2主机都进行如下操作: 单独修改web1主机单独修改web2主机验证八.设置邮件报警 一.环境准备KeepAlived在该项目中的功能......
  • 信息打点-协议应用_内网资产_CDN_WAF_负载均衡_防火墙
    服务信息获取-协议应用&内网资产常见端口默认对应的服务:特殊服务端口:端口扫描工具:旁注查询旁注查询,又称为旁站查询或同服务器网站查询,是一种信息安全和网络侦查技术,主要用于发现与目标网站托管在同一服务器上的其他网站。这种查询的目的通常与网络安全测试、情报收集......
  • Nginx+KeepAlived高可用负载均衡集群的部署
    目录一.KeepAlived补充知识1.一个合格的群集应该具备的特点2.健康检查(探针)常用的工作方式3.相关面试问题问题1问题2二.Keepealived脑裂现象1.现象2.原因硬件原因运用配置原因3.解决4.预防方法1方法2方法3方法4三.实验部署1.两台nginx做初始化操作并安装ngin......
  • LVS负载均衡集群企业级应用实战-LVS-DR(四)
    目录LVS-DR 一.环境准备二.对虚拟主机操作三.对真实服务器操作 四.打开网页测试LVS-DR 一.环境准备三台虚拟机,都要在同一网段内,统一关闭防火墙和selinux,时间同步,配置好YUM源。系统用centos和roucky都行。主机名主机IP模拟服务器系统用途localhostVIP:1......
  • 华为OD API集群负载统计
    题目描述:某个产品的RESTfulAPI集合部署在服务器集群的多个节点上,近期对客户端访问日志进行了采集,需要统计各个API的访问频次,根据热点信息在服务器节点之间做负载均衡,现在需要实现热点信息统计查询功能。RESTfulAPI的由多个层级构成,层级之间使用/连接,如/A/B/C/D这个地址......