DR模式 LVS负载均衡群集

发布于:2024-08-22 ⋅ 阅读:(27) ⋅ 点赞:(0)

一、DR模式

1.1、DR 模式的特点

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

1.2、数据包流向分析

(1)客户端 发送请求到 Director Server(负载均衡器),请求的数据报文到达内核空间

(源 IP 是 CIP,目标 IP 是 VIP)。【cip是客户端的地址,vip是虚拟地址】

三层:  s 192.168.88.200 -->  d 192.168.88.180

二层:  mac    9  ——>   mac  10   (先要通过路由)

(2)Director Server 和 Real Server (真实服务器)在同一个网络中,数据通过二层数据链路层来传输。

第二步   解封装      ARP广播(问题一)

二层:  mac    10  ——>   mac  11 

问题一:解封装发现目标d 192.168.88.180,是vip ,但是 web1和web2以及负载均衡的虚拟地址是都是192.168.88.180,那ARP广播是怎么找到负载均衡器而不矛盾响应的呢?

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

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

解决思路:如何对节点服务器进行处理,使其不针对vip的ARP响应。

解决

使用使用虚接口lo:0承载VIP地址

并且使用arp_ignore=1

它可以防止网关路由发送ARP广播时调度器和节点服务器都进行响应,
导致ARP缓存表混乱,不对非本地物理网卡IP的ARP请求进行响应,因为vip是承载lo:0,不是本地网卡。

扩展

arp_ignore的其他值

0:这是默认值。主机上任意一个网卡接口有广播ARP请求报文ip地址 都会进行响应,包括回环地址。
2:只响应目的ip地址为接受网卡上本地地址ARP请求,并且ARP请求的源IP地址必须和接受网卡同网段。这个设置比 arp_ignore=1 更严格,因为它不仅要求目的 IP 地址匹配,还要求源 IP 地址在同一网段。

(3)内核空间判断数据包的目标IP是本机VIP,此时IPVS(IP虚拟服务器)比对数据包请求的服务是否是集群服务,是集群服务就重新封装数据包。

修改源 MAC 地址为 Director Server 的 MAC地址,修改目标 MAC 地址为 Real Server 的 MAC 地址,源 IP 地址与目标 IP 地址没有改变,然后将数据包发送给 Real Server。

第三步    封装

三层:  s 192.168.88.200 -->  d 192.168.88.180

二层:  mac   11 ——>   mac  12


(4)到达 Real Server 的请求报文的 MAC 地址是自身的 MAC 地址,就接收此报文。

第四步   目标是自己 ,解封装

数据包重新封装报文(源 IP 地址为 VIP,目标 IP 为 CIP),将响应报文通过 lo 接口传送给物理网卡然后向外发出。

第五步    封装    

三层:  loo   s 192.168.88.180 --> ens   s   192.168.88.76  ---->  d 192.168.88.200  (问题二)

二层:  mac   12 ——>   mac  10

问题二:我的服务器节点的虚拟ip 192.168.88.180作为目标给客户机,那下次经过路由就直接根据arp表项更新了mac表,把调度器的mac替换成节点arp的表,会将下一个新来的新的请求报文转发给real-server,导致请求director(负载均衡器)的vip失效。

解决:

arp_announce=2

系统不使用响应数据包的源ip地址(vip)来作为本机进行arp请求报文的ip地址,而使用发送报文的物理网卡的ip地址来作为arp请求包的源p地址,

这样就可以防止网关路由器收到的源ip地址为vip的arp请求报文后又更新arp缓存表,导致外网再发送请求时,数据包到达不了调度器。


(5)Real Server (节点服务器)直接将响应报文传送到客户端。

三层:   ens   s   192.168.88.76  ---->  d 192.168.88.200    是自己,解封装

二层:  mac   10 ——>   mac  9

二、DR模式 LVS负载均衡群集部署

部署环境,前置关闭防火墙和selinux

DR 服务器:192.168.88.79   
Web 服务器1:192.168.88.76       
Web 服务器2:192.168.88.77  

NFS服务器:192.168.88.200       
vip:192.168.88.180
客户端:192.168.88.200   

systemctl stop firewalld.service
setenforce 0


A、【配置负载调度器】

配置思路:

1、加载ip_vs模块

2、安装 ipvsadm,使用ipvsadm 配置负载分配策略

3、配置虚拟 IP 地址 ifcfg-ens33:0,开启

4、调整 proc 响应参数

在Linux系统中,调整proc系统的响应参数通常指的是调整与进程(process)或系统性能相关的内核参数。然而,需要注意的是,proc文件系统本身是一个伪文件系统,它提供了对内核和进程信息的访问接口,而不是用来直接调整参数的。不过,通过修改/etc/sysctl.conf文件或使用sysctl命令,我们可以调整一些与进程和系统性能相关的内核参数。

1、加载ip_vs,他是 Linux 内核中的一个模块,它实现了基于 IP 的负载均衡功能

modprobe   ip_vs
cat /proc/net/ip_vs

2、安装 ipvsadm
yum -y install ipvsadm

使用ipvsadm 配置负载分配策略
ipvsadm-save    > /etc/sysconfig/ipvsadm
systemctl   start    ipvsadm

ipvsadm -C
ipvsadm -A -t 192.168.10.180:80 -s rr
ipvsadm -a -t 192.168.10.180:80 -r 192.168.10.16:80 -g            #若隧道模式,-g替换为-i
ipvsadm -a -t 192.168.10.180:80 -r 192.168.10.17:80 -g
ipvsadm

查看节点状态,Route代表 DR模式

ipvsadm -ln

3、配置虚拟 IP 地址
cd /etc/sysconfig/network-scripts/

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

配置

vim   ifcfg-ens33:0

DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.88.180
NETMASK=255.255.255.255

开启 

ifup ens33:0
ifconfig ens33:0

4、调整 proc 响应参数
由于 LVS 负载调度器和各节点需要共用 VIP 地址,需要关闭 icmp 的重定向,不充当路由器
vim /etc/sysctl.conf

#不会转发非本地接口的IPv4数据包
net.ipv4.ip_forward = 0
#关闭 ICMP 的重定向
net.ipv4.conf.all.send_redirects = 0
#不会向默认路由接口发送ICMP重定向消息
net.ipv4.conf.default.send_redirects = 0
#不会向ens33接口发送ICMP重定向消息
net.ipv4.conf.ens33.send_redirects = 0

sysctl -p

  1. net.ipv4.ip_forward = 0

    这个设置用于控制IPv4数据包的转发。当设置为0时,表示系统不会转发非本地接口的IPv4数据包。这通常用于防止服务器成为未经授权的路由器,从而增加网络的安全性。如果你希望服务器转发数据包(例如,作为路由器或网关),你需要将这个值设置为1。

  2. net.ipv4.conf.all.send_redirects = 0

    这个设置用于控制是否向所有接口发送ICMP重定向消息。ICMP重定向消息是当数据包被路由到非最优路径时,由路由器发送给发送方的通知,指示更高效的路由路径。将此值设置为0意味着系统不会向任何接口发送ICMP重定向消息。这通常用于提高网络的安全性,因为ICMP重定向消息可能被用于欺骗或探测网络拓扑。

  3. net.ipv4.conf.default.send_redirects = 0

    这个设置与上一个类似,但它特定于默认路由接口(如果有的话)。在大多数情况下,default 指的是在没有明确指定接口时使用的路由。将这个值设置为0同样意味着不会向默认路由接口发送ICMP重定向消息。

  4. net.ipv4.conf.ens33.send_redirects = 0

    这个设置专门用于名为ens33的网络接口(这通常是一个以太网接口的名称,但可能因系统而异)。它控制是否向该接口发送ICMP重定向消息。将值设置为0表示不会向ens33接口发送ICMP重定向消息。这对于确保特定接口上的流量安全特别有用。


 



B、【部署共享存储】

配置思路:

1、下载,创建两个共享文件夹,设置权限

2、定义哪些目录可以被远程系统通过网络挂载

3、启动

1、首先安装

yum -y install nfs-utils rpcbind

创建两个共享文件夹
mkdir /opt/yc    /opt/hhh
chmod 777 /opt/yc    /opt/hhh

2、定义哪些目录可以被远程系统通过网络挂载,以及这些挂载的权限和选项。

vim /etc/exports

/usr/share *(ro,sync)
/opt/hhh 192.168.88.0/24(rw,sync)
/opt/yc 192.168.88.0/24(rw,sync)

3、启动

systemctl start nfs.service
systemctl start rpcbind.service


C、【配置节点服务器】

配置思路:

1、配置回环地址

2、添加路由

3、添加自定义的启动命令  添加永久路由

4、调整内核

5、配置NFS客户端

1、配置虚拟 IP 地址(VIP:192.168.88.180)


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


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

DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.10.180
NETMASK=255.255.255.255                        #注意:子网掩码必须全为 1

ifup lo:0
ifconfig lo:0

2、添加路由

route add -host 192.168.88.180 dev lo:0

route: 这是用来管理系统路由表的命令,可以添加、删除或显示网络路由。
add: 这是 route 命令的一个子命令,用于添加一个新的路由规则。
-host 192.168.88.180: 这个选项指定了要添加的路由目标是一个单独的主机(而非整个网络)。192.168.88.180 是目标主机的 IP 地址。
dev lo:0: 这个选项指定了数据包应该通过哪个网络接口来传输。lo:0 是一个网络接口设备,在这个它是一个虚拟的网络接口(lo 表示回环接口,通常用于本地主机通信)

总结上面
告诉系统 对于目标 IP 地址 192.168.88.180,所有发送到该 IP 的数据包都应该通过 lo:0 这个接口来处理。直白点将 192.168.88.180 这个 IP 地址指向了本地回环接口的一个虚拟接口 lo:0,使得访问这个 IP 的数据流量不会离开本地计算机。

3、在Linux系统中,/etc/rc.local 文件是一个在系统启动过程结束时(即在所有服务都启动之后)被执行的脚本。

vim /etc/rc.local

/sbin/route add -host 192.168.88.180 dev lo:0

给权限

chmod +x /etc/rc.d/rc.local

4、调整内核的 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

或者
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

sysctl -p

5、配置NFS客户端

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

--192.168.88.16---
mount.nfs 192.168.88.19:/opt/yc  /var/www/html
echo 'this is yc web!' > /var/www/html/index.html

--192.168.88.17---
mount.nfs 192.168.88.19:/opt/hhh    /var/www/html
echo 'this is hhh web!' > /var/www/html/index.html


最后  测试 LVS 群集
在客户端使用浏览器访问 http://192.168.88.180/


 

三、常见的面试题

3.1、简述LVS三种工作模式,简述他们的区别?

答案:
NAT:通过网络地址转换实现的虚拟服务器,大并发访问时,调度器的性能成为瓶颈
DR:使用路由技术实现虚拟服务器,节点服务器需要配置VIP,注意MAC地址广播
TUN:通过隧道方式实现虚拟服务器。

3.2、列举你知道的LVS调度算法?

答案:
轮询(Round Robin);
加权轮询(Weighted Round Robin);
最少连接(Least Connections);
加权最少连接(Weighted Least Connections);
源地址哈希值(source hash)。

3.3、LVS调度器常见算法(均衡策略)?

LVS调度器用的调度方法基本分为两类:
固定调度算法: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,并以它作为下一次分配的首先考虑。

LVS的工作模式及其工作过程:

LVS 有三种负载均衡的模式,分别是VS/NAT(nat 模式)、VS/DR(路由模式)、VS/TUN(隧道模式)。

3.4、回顾负载均衡三种模式(原理和优缺点)

1、NAT模式(VS-NAT)

原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后负载均衡器就把客户端发送的请求数据包的目标IP地址及端口改成后端真实服务器的IP地址(RIP)。真实服务器响应完请求后,查看默认路由,把响应后的数据包发送给负载均衡器,负载均衡器在接收到响应包后,把包的源地址改成虚拟地址(VIP)然后发送回给客户端。

优点:集群中的服务器可以使用任何支持TCP/IP的操作系统,只要负载均衡器有一个合法的IP地址。

缺点:扩展性有限,当服务器节点增长过多时,由于所有的请求和应答都需要经过负载均衡器,因此负载均衡器将成为整个系统的瓶颈。


2、直接路由模式(VS-DR)

原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后负载均衡器就把客户端发送的请求数据包的目标MAC地址改成后端真实服务器的MAC地址(R-MAC)。真实服务器响应完请求后,查看默认路由,把响应后的数据包直接发送给客户端,不需要经过负载均衡器。

优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,也能处理很巨大的请求量。

缺点:需要负载均衡器与真实服务器RS都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。


3、IP隧道模式(VS-TUN)

原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后负载均衡器就把客户端发送的请求报文封装一层IP隧道(T-IP)转发到真实服务器(RS)。真实服务器响应完请求后,查看默认路由,把响应后的数据包直接发送给客户端,不需要经过负载均衡器。

优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,也能处理很巨大的请求量。

缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持“IP Tunneling”。