企业级负载均衡集群---LVS高可用集群搭建(二):DR模式

本文详细介绍了LVS直接路由模式(DR模式)的工作原理,包括客户端请求流程,以及在实际部署实验环境中的步骤。在实验环境中,通过设置3台虚拟机作为调度器和后端服务器,探讨了不同MAC地址绑定情况下对负载均衡的影响,并提出了通过arp路由策略解决潜在问题的方法。
摘要由CSDN通过智能技术生成

1.DR模式

DR(Direct Routing)直接路由模式

过程:
Client发送请求 --> DS(调度器) -->prerouting --> INPUT -->postrouting -->RS(Real Server)–>lo --> 网卡eth0 -->Client

用户(client)发送请求给调度器(DS),DS调度器先把请求发往prerouting链(内核空间kernal space),确定请求的是不是VIP;
到了INPUT链之后,如果请求的是集群服务,会在这里修改MAC地址,把源MAC地址改为DS的MAC地址,把目的MAC地址改为RS的MAC地址,此时IP仍然不变,处理完成后把请求发往postrouting链;
postrouting链检测请求的是否为RS(会检测请求的MAC地址),如果是,接受请求,把请求通过回环接口发给出口的网卡,再发回给客户端。

2.部署实验环境

实验前提:

  • 需要3台虚拟机:sever1 sever2 sever3
  • server1作为lvs调度器,而server2和server3作为后端服务器

1)在server2和server3中安装apache,并且写好测试页,以方便查看实验效果:

1.yum install httpd -y
2.cd /var/www/html/
3.vim index.html  
  cat index.html  ##分别写入vm2和vm3
4.systemctl start httpd

2)配置ipvsadm:
在server1中:

1.yum install ipvsadm -y
2.ipvsadm -l  #查看策略(解析ip与域名的对应关系,查看速度较慢)
3.ipvsadm -ln  #-n不解析(速度快)
3.ipvsadm -A -t 172.25.10.100:80 -s rr #添加策略:tcp,通过80端口访问172.25.10.100,以轮询的调度算法
4.ipvsadm -a -t 172.25.10.100:80 -r 172.25.10.2:80 -g #添加策略:tcp,通过80端口访问172.25.254.100,以轮询的调度算法,使用DR(直接路由)模式,转发到172.25.254.2的80端口
5.ipvsadm -a -t 172.25.10.100:80 -r 172.25.10.3:80 -g ##添加策略:tcp,通过80端口访问172.25.254.100,以轮询的调度算法,使用DR(直接路由)模式,转发到172.25.254.3的80端口
6.ipvsadm -ln

3)添加VIP:
在server1、server2、server3中分别添加VIP地址:

ip addr add 172.25.10.100/24 dev eth0 #添加VIP地址到eth0上
ip addr show

4)测试:
在客户端(真机)中:

curl 172.25.10.100

注意:用上面的方法配置lvs,server1、server2、server3都有可能被访问到:

  • 如果绑定的MAC地址是server1,则在server2和3中轮询
  • 如果绑定的MAC地址是sever2或sever3的,那么我们会发现,在测试端根本不会形成轮询,而是直接去了MAC绑定的后端服务器 (显然这样在企业中是不允许的)

绑定的MAC地址是server1

1.在真机中进行 curl 172.25.10.100 ##在server2和server3中轮询
2.通过arp -an | grep 100命令查看绑定的MAC地址
3.经ip addr show 查询server1的地址,与server1的MAC地址一致

绑定的MAC地址是server2

1.arp -d 172.25.10.100  #删除现有绑定的MAC地址
2.curl 172.25.10.100    #显示为server2
3.arp -an | grep 100	#查看绑定的MAC地址
4.ip addr show 		#查询server2的地址,与server2的MAC地址一致

绑定的MAC地址是server3

1.arp -d 172.25.10.100  #删除现有绑定的MAC地址
2.curl 172.25.10.100    #显示为server3
3.arp -an | grep 100 #查看绑定的MAC地址
4.ip addr show   #查询server3的地址,与server3的MAC地址一致

5)解决方法:
为避免这种情况:

  • 要求只能绑定server1(调度器)的MAC地址

  • 配置server2和server3的arp路由策略:为arptables网络的用户控制过滤的守护进程

在server2中:

yum whatprovides arptables/*
yum install arptables-0.0.4-8.el7.x86_64 -y

arptables -A INPUT -d 172.25.10.100 -j DROP #当网内广播需要172.25.10.100这个ip时,它丢弃所有网内的请求
arptables -A OUTPUT -s 172.25.10.100 -j mangle --mangle-ip-s 172.25.254.2 #当它自身需要在网内发包时,伪装为自己原本的ip172.25.254.2

在server3中:

yum whatprovides arptables/*
yum install arptables-0.0.4-8.el7.x86_64 -y

arptables -A INPUT -d 172.25.10.100 -j DROP #当网内广播需要172.25.254.100这个ip时,它丢弃所有网内的请求
arptables -A OUTPUT -s 172.25.10.100 -j mangle --mangle-ip-s 172.25.254.3 #当它自身需要在网内发包时,伪装为自己原本的ip172.25.254.3

6)测试:
在真机中:

arp -d 172.25.10.100  #先删除现有绑定MAC地址
curl 172.25.10.100    #重复此命令,实现了server2和server3的轮询

MAC---server1:
[root@foundation18 images]# arp -an | grep 100
? (172.25.18.100) at 52:54:00:94:87:0e [ether] on br0
[root@server1 ~]# ip addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:94:87:0e brd ff:ff:ff:ff:ff:ff

在server1中:

ipvsadm -ln #查看策略

[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.18.100:80 rr
  -> 172.25.18.2:80               Route   1      0          2         
  -> 172.25.18.3:80               Route   1      0          3 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值