当前位置: 首页 > news >正文

LVS-DR群集

一、理论
LVS-DR(Linux Virtual Server Director Server,linux虚拟服务器 导演服务器)工作模式,是生产环境中最常用的一种模式。

DR模式解析
拓扑图
    客户机    路由器
        交换机    Director server
        Real server

Director作为群集的访问入口,不作为网关使用,节点Director Server与Real Server在同一个网络中,返回给客户端的数据不需要经过Director Server。Director Server与Real Server都需要配置VIP地址。

工作原理:
1、客户端发送请求到Director Server,请求的数据报文(源ip是cip,目标ip是vip)到达内核空间。
2、Director Server和Real Server在同一个网络中,数据通过二层数据链路层来传输。(通过中间的交换机传输)
3、内核空间判断数据包的目标ip是本机vip,此时ipvs比对数据包请求的服务是否为集群服务,是集群服务就重新封装数据包。修改源mac地址为Director Server的mac地址,修改目标mac地址为Real Server的mac地址,源ip地址与目标ip地址没有改变,然后将数据包发送给Real Server。
4、到达Real Server的请求报文的mac地址是自身的mac地址,就接收此报文。数据包重新封装报文(源ip地址为vip,目标ip为cip),将响应报文通过lo接口传送给物理网卡然后向外发出。
5、Real Server直接将响应报文传送到客户端。

LVS-DR模式的特点:
Director Server和Real Server必须在同一个物理网络中。

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

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

Real Server的网关不允许指向Director Server IP,即不允许数据包经过Director Server。

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

LVS-DR模式中的arp问题。
问题一
    在lvs-dr负载均衡集群中,负载均衡器与节点服务器都要配置相同的vip地址,在局域网中具有相同的IP地址。势必会造成各服务器arp通信的紊乱。

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

解决方法:
对节点服务器进行处理,使其不响应针对vip的arp请求。

使用虚接口lo:0承载vip地址
设置内核参数arp_ignore=1 系统只响应目的ip为本地ip的arp请求。

问题二
    real server返回报文(源ip是vip)经路由器转发,重新封装报文时,需要先获取路由器的mac地址,发送arp请求时,linux默认使用ip包的源ip地址(即vip)作为arp请求包中的源ip地址,而不使用发送接口的ip地址,路由器收到arp请求后,将更新arp表项,原有的vip对应director的mac地址会被更新为vip对应real server的mac地址。

解决方法:
对节点服务器进行处理,设置内核参数arp_announce=2 系统不使用ip包的源地址来设置arp请求的源地址,而选择发送接口的ip地址。
 

二、实践

1、实验环境
lvsens160 	192.168.10.101ens160:0 	192.168.10.100
web01ens160 	192.168.10.102lo:0 	192.168.10.100
web02ens160 	192.168.10.103lo:0 	192.168.10.100
nfsens160	192.168.10.104
clientens160	192.168.10.1052、lvs配置
[root@lvs network-scripts]# cat ifcfg-ens160:0
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.10.100
NETMASK=255.255.255.255
GATEWAY=192.168.10.254
DNS1=114.114.114.114
DNS2=8.8.8.8
DEFROUTE=yesIPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=eui64
NAME=ens160:0
DEVICE=ens160:0
ONBOOT=yes
[root@lvs network-scripts]# systemctl restart NetworkManager
[root@lvs network-scripts]# ip a
ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:23:90:5d brd ff:ff:ff:ff:ff:ffinet 192.168.10.101/24 brd 192.168.10.255 scope global noprefixroute ens160valid_lft forever preferred_lft foreverinet 192.168.10.100/32 scope global noprefixroute ens160:0[root@localhost network-scripts]# sysctl -p  # lvs和RS共同使用vip,因此需要关闭内核的重定向参数响应。
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens160.send_redirects = 0[root@lvs ~]# dnf -y install ipvsadm
[root@lvs ~]# ipvsadm -A -t 192.168.10.100:80 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.102 -g -w 1
[root@lvs ~]# ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.103 -g -w 1
[root@lvs ~]# 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.10.100:80 rr-> 192.168.10.102:80            Route   1      0          0         -> 192.168.10.103:80            Route   1      0          0   3、web01配置
[root@web01 ~]# vip='192.168.10.100'
[root@web01 ~]# ip addr add ${vip}/32 dev lo label lo:0  # label表示指定标签,lo:0是标签。
[root@web01 ~]# ip route add local ${vip}/32 dev lo
RTNETLINK answers: File exists
[root@web01 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.10.254  0.0.0.0         UG    100    0        0 ens160
192.168.10.0    0.0.0.0         255.255.255.0   U     100    0        0 ens160
[root@web01 ~]# ip route
default via 192.168.10.254 dev ens160 proto static metric 100 
192.168.10.0/24 dev ens160 proto kernel scope link src 192.168.10.102 metric 100 
[root@web01 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000inet 192.168.10.100/32 scope global lo:0valid_lft forever preferred_lft forever
[root@web01 ~]# sysctl -p  # ignore 忽略 announce 公布
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参数解释:
net.ipv4.conf.all.arp_ignore = 1  禁用igp协议对arp请求的响应,确保所有arp流量都按照配置处理,而不是通过igp路由来处理。net.ipv4.conf.all.arp_announce = 2 调整了arp注明的超时时间,设置了2秒。防止过多的arp缓存更新请求,减少网络流量和资源消耗。net.ipv4.conf.default.arp_ignore = 1 禁用igp对arp请求的响应,作用范围更广泛,在默认接口上。net.ipv4.conf.default.arp_announce = 2  调整arp注明时间于默认接口,设置为2秒。net.ipv4.conf.lo.arp_ignore = 1  禁用回环口(loopback)界面上的arp请求忽略。net.ipv4.conf.lo.arp_announce = 2  调整loopback接口的arp注明时间,控制内部网络中arp缓存的更新频率,减少网络流量和资源消耗。[root@web01 ~]# dnf -y install httpd
[root@web01 ~]# cat /var/www/html/index.html 
web01
[root@web01 ~]# systemctl start httpd
[root@web01 ~]# curl 192.168.10.102
web01
[root@web01 ~]# curl 192.168.10.100
web014、web02配置
[root@web02 ~]# ip addr add 192.168.10.100/32 dev lo label lo:0
[root@web02 ~]# ip route add local 192.168.10.100/32 dev lo
RTNETLINK answers: File exists
[root@web02 ~]# sysctl -p
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[root@web01 ~]# dnf -y install httpd
[root@web02 ~]# cat /var/www/html/index.html
web02
[root@web01 ~]# systemctl start httpd
[root@web02 ~]# curl 192.168.10.103
web02
[root@web02 ~]# curl 192.168.10.100
web025、客户机验证
[root@client ~]# curl 192.168.10.100
web01
[root@client ~]# curl 192.168.10.100
web02
[root@client ~]# curl 192.168.10.100
web01
[root@client ~]# curl 192.168.10.100
web02
[root@client ~]# curl 192.168.10.100
web01
[root@client ~]# curl 192.168.10.100
web02lvs查看访问
[root@lvs ~]# ipvsadm -lnc
TCP 01:43  FIN_WAIT    192.168.10.105:55868 192.168.10.100:80  192.168.10.102:80
TCP 01:42  FIN_WAIT    192.168.10.105:55852 192.168.10.100:80  192.168.10.102:80
TCP 01:28  FIN_WAIT    192.168.10.105:35658 192.168.10.100:80  192.168.10.103:80
TCP 01:31  FIN_WAIT    192.168.10.105:35708 192.168.10.100:80  192.168.10.103:80
TCP 01:43  FIN_WAIT    192.168.10.105:55862 192.168.10.100:80  192.168.10.103:80
TCP 01:29  FIN_WAIT    192.168.10.105:35674 192.168.10.100:80  192.168.10.102:806、nfs配置及102、103挂载
[root@nfs ~]# dnf -y install nfs-utils rpcbind
[root@nfs ~]# mkdir /opt/sooo
[root@nfs ~]# cat /etc/exports
/opt/sooo 192.168.10.0/24(rw,sync,no_root_squash)
[root@nfs ~]# systemctl start rpcbind
[root@nfs ~]# systemctl start  nfs
[root@nfs ~]# netstat -anpt | grep rpc
tcp        0      0 0.0.0.0:53527           0.0.0.0:*               LISTEN      2204/rpc.statd      
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      2196/rpcbind        
tcp        0      0 0.0.0.0:20048           0.0.0.0:*               LISTEN      2216/rpc.mountd     
tcp6       0      0 :::58323                :::*                    LISTEN      2204/rpc.statd      
tcp6       0      0 :::111                  :::*                    LISTEN      2196/rpcbind        
tcp6       0      0 :::20048                :::*                    LISTEN      2216/rpc.mountd     [root@web01 ~]# mount 192.168.10.104:/opt/sooo /var/www/html
[root@web01 ~]# tail -1 /etc/mtab
192.168.10.104:/opt/sooo /var/www/html nfs4 rw,relatime,vers=4.2,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.10.102,local_lock=none,addr=192.168.10.104 0 0[root@web02 ~]# mount 192.168.10.104:/opt/sooo /var/www/html
[root@web02 ~]# tail -1 /etc/mtab
192.168.10.104:/opt/sooo /var/www/html nfs4 rw,relatime,vers=4.2,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.10.103,local_lock=none,addr=192.168.10.104 0 0[root@nfs sooo]# cat index.html 
nfs7、客户机验证
[root@client ~]# curl 192.168.10.100
nfs
[root@client ~]# curl 192.168.10.100
nfs
[root@client ~]# curl 192.168.10.100
nfs
[root@client ~]# curl 192.168.10.100
nfs[root@lvs ~]# ipvsadm -lnc
IPVS connection entries
pro expire state       source             virtual            destination
TCP 01:46  FIN_WAIT    192.168.10.105:42100 192.168.10.100:80  192.168.10.102:80
TCP 01:46  FIN_WAIT    192.168.10.105:42098 192.168.10.100:80  192.168.10.103:80
TCP 01:45  FIN_WAIT    192.168.10.105:42084 192.168.10.100:80  192.168.10.102:80
TCP 01:47  FIN_WAIT    192.168.10.105:42110 192.168.10.100:80  192.168.10.103:80

相关文章:

  • HTTPS加密通信详解及在Spring Boot中的实现
  • LabVIEW 中不同 VI 间图像传递方法解析
  • AI自动化测试框架browser use 项目测试总结
  • ClamAV使用
  • 数据结构:线性表的基本操作与链式表达
  • C53-字符串引入和注意事项.
  • 硬件实时时钟(RTC)
  • 【机器学习基础】机器学习入门核心算法:GBDT(Gradient Boosting Decision Tree)
  • 如何使用DeepSpeed来训练大模型
  • 【前端】Vue3+elementui+ts,TypeScript Promise<string>转string错误解析,习惯性请出DeepSeek来解答
  • 部署LVS-DR群集
  • OpenAI大模型不听人类指令事件的技术分析与安全影响
  • 如何收集Oracle DB SQL Monitor报告
  • 根据基因名称自动获取染色体上的位置
  • 西门子SCL语言编写两台电机正反转控制程序,并涵盖从选型、安装到调试全过程的详细步骤指南(上)
  • opengl - 在本地搭建API的文档说明网站
  • 全球轨道铺设设备市场发展现状与未来趋势分析
  • 第 85 场周赛:矩阵重叠、推多米诺、新 21 点、相似字符串组
  • js中后台框架的增删改查要点
  • XCTF-web-easyphp
  • 网站制作成品免费/青岛百度快速排名优化
  • 做爰全过程免费狐狸网站/百度在线
  • 专门做汽车内饰的网站/手游免费0加盟代理
  • 做电影网站 资源去哪里找/聚名网域名注册
  • 动漫网站开发设计思想/游戏推广员
  • app小程序网站开发/windows优化大师值得买吗