LVS之DR(Direct Routing)模式

LVS的概念

请看这篇博客:https://blog.csdn.net/weixin_38044888/article/details/97794685

DR模式详解

DR模式实验步骤

实验环境准备

主机服务
真实主机localhost客户端
server1DS(Director Sever——LVS调度器)
server2RS(Real Server——后端真实提供服务的虚拟机)
server3RS(Real Server——后端真实提供服务的虚拟机)

注意:我们所有的虚拟机server1-3的实验环境都是rhel7.5版本。

配置各服务器环境

server1(DS)

  • 安装软件ipvsadm
yum install -y ipvsadm
ipvsadm -ln 		#	查看lvs策略
systemctl status ipvsadm.service		#	查看服务状态
touch /etc/sysconfig/ipvsadm			#	创建该文件,否则服务会启动不了
systemctl start ipvsadm.service			#	启动服务
 vim /etc/sysconfig/ipvsadm-config 
修改:no为yes
IPVS_SAVE_ON_RESTART="yes"
  • 利用ipvsadm添加策略
ipvsadm -A -t 172.25.66.100:80 -s rr
# 说明:-A 添加策略  -t 指定VIP:端口  -s 指定调度算法 rr轮询

ipvsadm -a -t 172.25.66.100:80 -r 172.25.66.2:80 -g
ipvsadm -a -t 172.25.66.100:80 -r 172.25.66.3:80 -g
# 说明: -t 指定VIP:端口 -r 指定rs:端口  -g 指定模式为DR模式
  • 此时,需要检查一下服务器上是否有80端口被其他服务占用,没有的话,重启ipvsadm服务,发现已经把策略写入配置文件中。
[root@server1 ~]# netstat -nlpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1319/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1072/master         
tcp6       0      0 :::22                   :::*                    LISTEN      1319/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      1072/master         
[root@server1 ~]# cat /etc/sysconfig/ipvsadm
[root@server1 ~]# systemctl restart ipvsadm.service 
[root@server1 ~]# cat /etc/sysconfig/ipvsadm
-A -t 172.25.66.100:80 -s rr
-a -t 172.25.66.100:80 -r 172.25.66.2:80 -g -w 1
-a -t 172.25.66.100:80 -r 172.25.66.3:80 -g -w 1
  • 查看策略,发现已经生效:
[root@server1 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.66.100:80 rr
  -> 172.25.66.2:80               Route   1      0          0         
  -> 172.25.66.3:80               Route   1      0          0  
  • 给DS(lvs调度器)添加VIP网卡:
ip addr add 172.25.66.100/24 dev eth0

server2与server3(Real Server)

  • 安装Apache,开启并写入各自的发布文件,便于检测实验效果:
yum install -y httpd

[root@server2 ~]# cat /var/www/html/index.html
server2
[root@server2 ~]# systemctl start httpd.service 
  • 添加一块IP与VIP一致,否则,从RS返回到client的数据包的源地址就不是VIP地址,client不会接收的。
ip addr add 172.25.66.100/24 dev eth0

真实主机上测试

[root@localhost images]# curl 172.25.66.100
server2
[root@localhost images]# curl 172.25.66.100
server3
[root@localhost images]# curl 172.25.66.100
server2
[root@localhost images]# curl 172.25.66.100
server3

发现已经轮询,此时我们查看VIP主机的mac地址:
在这里插入图片描述

发现与我们的DS调度器一致,说明正确找到了DS:
在这里插入图片描述

我们试着清除一下arp连接:

arp -d 172.25.66.100

再次请求VIP时,发现不轮询访问RS了,只是访问其中一台。

[root@localhost images]# curl 172.25.66.100
server2
[root@localhost images]# curl 172.25.66.100
server2
[root@localhost images]# curl 172.25.66.100
server2

用同样的方法查看VIP的mac地址:

在这里插入图片描述
在这里插入图片描述
发现与server2一致,说明此时客户端直接访问了RS,并没有经过调度器DS。我们回想一下刚刚的过程,发现DS和RS都有VIP地址,所以client访问时,就会发生这样的情况。

解决方法

我们需要在RS(server2、server3)上设置策略,拒绝接受想要访问VIP的请求。

  • 安装arptables,设置相关策略
yum install -y arptables

arptables也有三条链,我们设置INPUT和OUTOUT链上的策略。

[root@server2 ~]# arptables -nL
Chain INPUT (policy ACCEPT)

Chain OUTPUT (policy ACCEPT)

Chain FORWARD (policy ACCEPT)
arptables -A INPUT -d 172.25.66.100 -j DROP
	#	  拒绝网络里对于vip的arp请求,也就是避免了误请求
arptables -A OUTPUT -s 172.25.66.100 -j mangle --mangle-ip-s 172.25.66.2
	 # 将响应的arp源IP地址172.25.66.2改为 172.25.66.100,也就是说,让客户端以为是VIP发回的。

再次查看arptables策略:

[root@server2 ~]# arptables -nL
Chain INPUT (policy ACCEPT)
-j DROP -d 172.25.66.100 

Chain OUTPUT (policy ACCEPT)
-j mangle -s 172.25.66.100 --mangle-ip-s 172.25.66.2 

Chain FORWARD (policy ACCEPT)

为了防止服务重启失效,将arptables策略保存。

[root@server2 ~]# cat /etc/sysconfig/arptables 
# Configure prior to use
[root@server2 ~]# arptables-save > /etc/sysconfig/arptables
[root@server2 ~]# cat /etc/sysconfig/arptables 
*filter
:INPUT ACCEPT
:OUTPUT ACCEPT
:FORWARD ACCEPT
-A INPUT -j DROP -d 172.25.66.100 
-A OUTPUT -j mangle -s 172.25.66.100 --mangle-ip-s 172.25.66.2 

[root@server2 ~]# systemctl restart arptables.service 
[root@server2 ~]# arptables -nL
Chain INPUT (policy ACCEPT)
-j DROP -d 172.25.66.100 

Chain OUTPUT (policy ACCEPT)
-j mangle -s 172.25.66.100 --mangle-ip-s 172.25.66.2 

Chain FORWARD (policy ACCEPT)

当然,server3设置同上。

再次测试

发现无论如何清楚arp连接,都是通过DS轮询访问两个RS,说明我们的lvsDR模式设置成功!!

[root@localhost images]# arp -d 172.25.66.100
[root@localhost images]# curl 172.25.66.100
server2
[root@localhost images]# curl 172.25.66.100
server3
[root@localhost images]# arp -d 172.25.66.100
[root@localhost images]# curl 172.25.66.100
server2
[root@localhost images]# curl 172.25.66.100
server3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值