Lvs的DR工作模式原理及部署

1、Lvs的DR工作模式原理:

用直接路由技术实现虚拟服务器
DR模式是通过改写请求报文的目的MAC地址,将请求发送给真实服务器,服务器将响应消息直接发送给客户端
这里写图片描述
<1>通过在调度器上修改数据包的目的MAC地址实现转发,注意源地址仍然是CIP,目的地址仍然是VIP地址;
<2>请求的报文经过调度器,而服务器响应处理后的报文无需经过调度器,因此并发访问量大时使用效率很高(和NAT模式比)
<3>因为DR模式是通过MAC地址改写机制实现转发,因此所有RS节点和调度器只能在一个局域网里面
<4>服务器主机需要有VIP地址,并且需要配置ARP抑制。
DR工作模式下的数据流走向:client -> VS -> RS -> client

2、Lvs的部署
###实验环境
  • server1 172.25.29.1 VS
  • server2 172.25.29.2 RS
  • server3 172.25.29.3 RS
###Server1:
[root@server1 ~]# cd /etc/yum.repos.d/
[root@server1 yum.repos.d]# vim rhel-source.repo 
[HighAvailability]  //高可用
name=HighAvailability
baseurl=http://172.25.29.250/rhel6.5/HighAvailability
gpgcheck=0

[LoadBalancer]      //负载均衡
name=LoadBalancer
baseurl=http://172.25.29.250/rhel6.5/LoadBalancer
gpgcheck=0

[ResilientStorage]      //分布式存储
name=ResilientStorage
baseurl=http://172.25.29.250/rhel6.5/ResilientStorage
gpgcheck=0

[ScalableFileSystem]        //大文件系统
name=ScalableFileSystem
baseurl=http://172.25.29.250/rhel6.5/ScalableFileSystem
gpgcheck=0
[root@server1 yum.repos.d]# yum install ipvsadm -y
[root@server1 yum.repos.d]# /etc/init.d/ipvsadm start
[root@server1 yum.repos.d]# ipvsadm -A -t 172.25.29.100:80 -s rr                            //-s 调度算法,DR模式不支持端口转发
[root@server1 yum.repos.d]# ipvsadm -a -t 172.25.29.100:80 -r 172.25.29.2:80 -g                 //-g    表示采用直连模式
[root@server1 yum.repos.d]# ipvsadm -a -t 172.25.29.100:80 -r 172.25.29.3:80 -g
[root@server1 yum.repos.d]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.29.100:http rr
  -> server2:http                 Route   1      0          0         
  -> server3:http                 Route   1      0          0 
[root@server1 yum.repos.d]# ip addr add 172.25.29.100/24 dev eth0
[root@server1 yum.repos.d]# ip addr
  link/ether 52:54:00:00:1d:66      //MAC地址
###Server2:
[root@server2 ~]# /etc/init.d/httpd start
[root@server2 html]# cat index.html 
Server2
[root@server2 ~]# yum install arptables_jf -y
[root@server2 ~]# ip addr add 172.25.29.100/24 dev eth0
[root@server2 ~]# ip addr
    link/ether 52:54:00:9e:c6:99    
###Server3:
[root@server3 ~]# /etc/init.d/httpd start
[root@server3 html]# cat index.html 
server3
[root@server3 ~]# yum install arptables_jf -y
[root@server3 ~]# ip addr add 172.25.29.100/24 dev eth0
[root@server3 ~]# ip addr      
 link/ether 52:54:00:04:a7:ee

DS会修改客户端的目的MAC地址为RS,数据包到达RS,由链路层向上封装,故RS上必须有vip才能建立连接

###主机测试:
[root@foundation29 rhel6.5]# arp -an |grep 100
? (172.25.29.100) at 52:54:00:00:1d:66 [ether] on br0

[root@foundation29 rhel6.5]# arp -d 172.25.29.100
[root@foundation29 rhel6.5]# ping 172.25.29.100
[root@foundation29 rhel6.5]# arp -an |grep 100
? (172.25.29.100) at 52:54:00:9e:c6:99 [ether] on br0

[root@foundation29 rhel6.5]# arp -d 172.25.29.100
[root@foundation29 rhel6.5]# ping 172.25.29.100
[root@foundation29 rhel6.5]# arp -an |grep 100
? (172.25.29.100) at 52:54:00:04:a7:ee [ether] on br0

多次测试,可以看出其连接具有随机性,因为三台server在同一VLAN下具有相同的ip,因此并不能保证每次都访问的是调度器server1

为了解决这个问题,需要对RS进行ARP抑制,进行如下操作:
###Server2:
[root@server2 ~]# yum install arptables_jf -y
[root@server2 ~]# arptables -A IN -d 172.25.29.100 -j DROP
[root@server2 ~]# arptables -A OUT -s 172.25.29.100 -j mangle --mangle-ip-s 172.25.29.2        //以本身实际ip进行OUT
[root@server2 ~]# /etc/init.d/arptables_jf save
###Server3:
[root@server3 ~]# yum install arptables_jf -y
[root@server3 ~]# arptables -A IN -d 172.25.29.100 -j DROP
[root@server3 ~]# arptables -A OUT -s 172.25.29.100 -j mangle --mangle-ip-s 172.25.29.3
[root@server3 ~]# /etc/init.d/arptables_jf save
###主机测试:
[root@foundation29 rhel6.5]# arp -an |grep 100  
? (172.25.29.100) at 52:54:00:00:1d:66 [ether] on br0 //每次都访问VS
[root@foundation29 rhel6.5]# curl 172.25.29.100
server2
[root@foundation29 rhel6.5]# curl 172.25.29.100
server3

猜你喜欢

转载自blog.csdn.net/yyyxxxs/article/details/81660275