Lvs DR 模式的配置与部属图文详解(通俗易懂,适合入门小白)

Lvs的DR模式需要在每一个real server上面配置上VIP和RIP,但是VIP是隐藏的,并不真正进行解析工作,只是用作请求回复的源ip。我们需要在一张网卡上面配置两个ip即:VIP和RIP

 以下是LVS_DR模式的原理图:

大致过程:当cip向我们的负载均衡器发出请求时,此时的源iP是:cip,目标ip是vip,而由于我们的vip在lvs机器和后面两台real-server机器上面都有,但是我们并不能让请求发到后面两台real-server上面,否则负载均衡就毫无意义,因此要让real-server忽略arp响应,不允许收关于目标地址是vip的数据包,但是可以让real-server上的vip将数据包转发出去。此时cip的请求将发送到lvs机器上面,因为就只有lvs上的vip对其进行了相应。当lvs机器接收到数据包后,此时lvs上的dip将进行工作,dip将数据包上的源ip也就是cip的mac地址:cipmac改为自己的mac地址即:dipmac,将数据包上目标ip的mca地址改为后面两台web服务器其中之一的mac地址,即RIPMAC。由于mac地址是唯一的,所以尽管后面两台web服务器都有vip,也不会将数据包同时发给这两台服务器,只会发送给其中一台,至于发送给哪一台,则要看lvs的负载均衡算法。当real-server将发送过来的请求处理完毕之后,便直接以vip的地址作为源ip将资源发送给目标地址cip,此时便不用经过lvs负载均衡器,因为cip是唯一的,指在一台机器上存在。由此便完成了负载均衡。

缺点:消耗过多的ip资源

有点:相对于NAT模式,DR模式遇到的瓶颈更小,因为DR模式下返回请求时,并不用经过lvs负载均衡,因此并不会造成过度的拥挤。

环境配置:一台lvs服务器,一台client客户端,两台nginx web服务器

1.client客户端:192.168.23.128

2.lvs负载均衡服务器:192.168.23.144

3.nginxweb服务器1:192.168.23.145

4.nginxweb服务器2:192.168.23.146

第一步:lvs服务器上添加vip和路由:

1.查看本机网卡名称:

1.查看自己虚拟机的网卡名称:
[root@lvs-server ~]# ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.23.144  netmask 255.255.255.0  broadcast 192.168.23.255
        inet6 fe80::20c:29ff:fe9b:8c4f  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:9b:8c:4f  txqueuelen 1000  (Ethernet)
        RX packets 31380  bytes 30858220 (29.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 46908  bytes 7435020 (7.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

可以看到我们目前网卡名称为ens160

2.添加vip:

[root@lvs-server ~]# ifconfig ens160:0 192.168.23.147 broadcast 192.168.23.255 netmask 255.255.255.0 up

其中 192.168.23.147 就是我们的vip 虚拟IP的设计,遵循本网段未使用的IP即可。这里的VIP与虚拟机上真实的ip要配到同一个网卡上,即都在ens160上面。就好比一个手机上面插了多张手机卡

3.查看是否成功:

[root@lvs-server ~]# ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.23.144  netmask 255.255.255.0  broadcast 192.168.23.255
        inet6 fe80::20c:29ff:fe9b:8c4f  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:9b:8c:4f  txqueuelen 1000  (Ethernet)
        RX packets 34832  bytes 31256490 (29.8 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 57717  bytes 9368402 (8.9 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens160:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.23.147  netmask 255.255.255.0  broadcast 192.168.23.255
        ether 00:0c:29:9b:8c:4f  txqueuelen 1000  (Ethernet)

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

可以看到,出现了 ens160:0 说明配置成功。上面的IP也就是我们配置的vip:192.168.23.147,广播地址和掩码也都是我们指定的。

4.添加路由:

route add -host 192.168.23.147 dev ens160:0

第二步:设置路由转发:

1.修改配置文件

[root@lvs-server ~]# vim /etc/sysctl.conf
#往配置文件里新增以下内容(配置完毕wq保存退出即可):
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.ens160.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

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

net.ipv4.ip_forward = 1:开启路由功能

net.ipv4.conf.all.send_redirects = 0:#禁止转发重定向报文

net.ipv4.conf.ens160.send_redirects = 0:禁止ens160转发重定向报文

net.ipv4.conf.default.send_redirects = 0:禁止转发默认重定向报文

第三步:LVS设置负载均衡条目/规则:

1.安装ipvsadm:

[root@lvs-server ~]# yum -y install ipvsadm

2.清除ipvsadm规则(新安装的ipvsadm不用执行该命令)

[root@lvs-server ~]# ipvsadm -C

3.添加VIP规则

[root@lvs-server ~]# ipvsadm -A -t 192.168.23.147:80 -s rr

#参数说明:这里的-A 是添加virtual server,即我们配置的vip

                    -t 指定使用tcp协议

                    -s 指定调度策略/负载算法为rr(轮询)

4.添加real-server:

[root@lvs-server ~]# ipvsadm -a -t 192.168.23.147:80 -r 192.168.23.145:80 -g
[root@lvs-server ~]# ipvsadm -a -t 192.168.23.147:80 -r 192.168.23.146:80 -g

#参数说明:这里的 -a 是添加real-server也就是我们后面那两台web服务器。-r 指定realserver是谁,-g 是指定LVS类型为DR模式。如果用 -i  则是TUN模式,-m则是NAT模式。

5.LVS让配置永久生效:

[root@lvs-server ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@lvs-server ~]# systemctl enable ipvsadm.service 
Created symlink /etc/systemd/system/multi-user.target.wants/ipvsadm.service → /usr/lib/systemd/system/ipvsadm.service.

#查看一下我们做的配置:
[root@lvs-server ~]# cat /etc/sysconfig/ipvsadm
-A -t bogon:http -s rr
-a -t bogon:http -r bogon:http -g -w 1
-a -t bogon:http -r bogon:http -g -w 1

第四步:在两个web上面配置web服务:

1.安装web服务:

[root@web01 ~]# yum -y install nginx
#此台机器是:192.168.23.145
[root@web02 ~]# yum -y install nginx
#此台机器是:195.168.23.146

2.等待两台机器安装完毕,修改nginx的默认欢迎页面:

[root@web01 html]# cd /usr/local/nginx/html/ #我的nginx是源码编译安装,与yum安装的html目录不一致,你们找到自己nginx的index.html页面自行修改即可
[root@web01 html]# ls
50x.html  index.html
[root@web01 html]# vim index.html
#写入以下内容:This is web01
[root@web02 html]# cd /usr/local/nginx/html/ #我的nginx是源码编译安装,与yum安装的html目录不一致,你们找到自己nginx的index.html页面自行修改即可
[root@web02 html]# ls
50x.html  index.html
[root@web01 html]# vim index.html
#写入以下内容:This is web02

将两台web服务器都修改完毕即可,这里我们的两台服务器的index.html里面的内容故意不一致,以便后续能够看清负载均衡的效果。

3.将两台web服务器都启动nginx服务:

[root@web01 ~]# systemctl start nginx
[root@web01 ~]# systemctl enable nginx
[root@web02 ~]# systemctl start nginx
[root@web02 ~]# systemctl enable nginx

4.给两个web服务器的lo网卡设置子网掩码为32位vip

[root@web01 html]# ifconfig lo:0 192.168.23.147/32

[root@web01 html]# ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.23.145  netmask 255.255.255.0  broadcast 192.168.23.255
        inet6 fe80::20c:29ff:fed1:9322  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:d1:93:22  txqueuelen 1000  (Ethernet)
        RX packets 56717  bytes 34772358 (33.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 122818  bytes 20900580 (19.9 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.23.147  netmask 0.0.0.0
        loop  txqueuelen 1000  (Local Loopback)

[root@web02 html]#  ifconfig lo:0 192.168.23.147/32
[root@web02 html]# 
[root@web02 html]# 
[root@web02 html]# ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.23.146  netmask 255.255.255.0  broadcast 192.168.23.255
        inet6 fe80::20c:29ff:fe10:444e  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:10:44:4e  txqueuelen 1000  (Ethernet)
        RX packets 57961  bytes 34889982 (33.2 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 124671  bytes 21135392 (20.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.23.147  netmask 0.0.0.0
        loop  txqueuelen 1000  (Local Loopback)

设置成功后,使用ifconfig命令查看,可以看到lo下面多了一个 lo:0就是我们刚才设置的vip。

注意两台web服务器都要设置!

5.给两个web服务器设置内核参数:

[root@web01 html]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
#忽略arp响应 ,不允许收
[root@web01 html]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
#为了让vip发包出去,但允许发
[root@web02 html]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
#忽略arp响应 ,不允许收
[root@web02 html]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
#为了让vip发包出去,但允许发

这样一来,real-server上面的vip就不会接收到来自client的请求,因此只有lvs上面的vip会接收到请求。后续lvs通过调度算法将请求分发给real-server后,real-server处理完毕后,通过real-server上的vip将结果响应给用户,做到了只能发包不接受包。

第五步:在客户端上测试:

1.在clent机器上下载curl软件

[root@client ~]# yum -y install  curl

2.访问lvs的vip看是否实现了负载均衡:

[root@client ~]# curl 192.168.23.147
This is web02
[root@client ~]# curl 192.168.23.147
This is web01
[root@client ~]# curl 192.168.23.147
This is web02
[root@client ~]# curl 192.168.23.147
This is web01

可以看到,已经实现了负载均衡!至此实验完毕。

  • 34
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用LVS-DR(Linux Virtual Server - Direct Routing)时,有一些注意事项需要考虑。首先,需要注意LVS-DR的配置和注意事项可能因环境和需求的不同而略有变化,因此建议在实施LVS-DR之前仔细阅读相关文档和指南,并根据实际情况进行适当的调整和配置LVS-DR是LVS中最常用和性能最高的一种工作模式,它可以在Linux服务器上实现高可用性和性能增强。 在使用LVS-DR时,有几个需要注意的事项。首先,需要设置正确的网络配置,包括将VIP(Virtual IP)绑定到物理服务器网络接口上,并配置正确的IP地址和子网掩码。此外,还需要确保物理服务器之间具有正确的网络连通性和路由设置。 另外,需要注意在LVS-DR模式下,真实服务器(Real Server)的响应数据包是直接返回给客户端的,而不经过负载均衡器。因此,需要在真实服务器配置正确的网络路由和ARP(Address Resolution Protocol)表项,以确保响应数据包能够正确返回给客户端。此外,需要注意在真实服务器上禁用ICMP重定向,以避免网络问题导致的异常行为。 最后,如果在使用LVS-DR时遇到问题或困惑,建议寻求专业人士的帮助和支持。他们可以根据具体情况提供更准确和有效的解决方案。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [LVS-DR模式](https://blog.csdn.net/Breeze_nebula/article/details/132319087)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值