上次我们演示的是LVS-NAT模型,说到在LVS-NAT中的director在里面充当着连接客户端与realserver的作用,所有的请求报文和回复报文都将通过director,所以当后端realserver逐渐增多时候,LVS-NAT的性能将不甚理想,而LVS-DR模型却解决了这个问题。
如图所示,director,realserver1和realserver2一同连接在一个交换机上面,当用户请求报文进来时,交换机送往director,然后director通过调度算法转发至其中一台realserver,最后realserver直接送往外界,由上图可以看出,director只转发用户的请求,回复报文不在经过director,所以director的工作压力就减少很多。
操作环境 : windows 7
VMware Workstation 9 redhat6.2
具体IP分配:
director
eth0: DIP 169.254.179.1
eth0:0 VIP 169.254.179.5
realserver1
eth0: RIP1 169.254.179.3
lo:0 VIP 169.254.179.5
realserver2
eth0 RIP2 169.254.179.2
lo:0 VIP 169.254.179.5
通过上面的ip分配可能有人发现了,不管是director还是realserver都配置了VIP地址,这是为什么呢,好,下面让我们来分析分析。
当用户报文传达到交换机上时候,此时的报文首部原地址是CIP,目标地址是VIP,那么问题来了,director和realserver都有VIP,这样一来报文送给谁呢?
linux有这么一组内核参数,arp_ignore和arp_announce,arp_ingore表示定义接受arp请求时候的响应级别,arp_announce表示定义将自己的地址向外通告时候的通告级别的,
arp_ingore
0:只要本地配置有相应地址,就给予响应。
1:仅在请求的目标地址配置请求到达的接口上的时候,才给予响应;
arp_announce
0:将本地任何接口上的任何地址向外通告;
1:试图仅向目标网络通告与其网络匹配的地址;
2:仅向与本地接口上地址匹配的网络进行通告;
所以我需要在RS1和RS2上配置好这两个参数,这样来自交换机的报文就会送往director了,当报文到达director上后,director发现到达的这个请求是定义好的集群服务,将会选择一个realserver,然后报文首部信息不变,原地址依然是CIP,目标地址依然是VIP,然后再封装一个mac首部,原mac是director,目标mac是realserver,将信息送达realserver。
当此报文到达realserver上后,realserver发现一切都没问题,然后回复。那么问题又来了,从上面我们发现配置在realserver上的VIP在lo接口上,然是报文的进来和出去都是通过eth0这个接口的,在linux上默认数据报文从那个接口出去,原IP地址尽可能使用那个接口的地址,但是realserver的eth0的IP为RIP,但是客户端可没有请求RIP!所以,我们还得添加一条独特的路由条目:route add -host VIP
dev lo:0 这条信息表示到达某个主机的路由,地址如果是VIP的话,要通过lo:0进来和出去,并且将lo:0上的地址作为原地址。所以realserver的回复报文,目标ip为CIP,原IP为VIP,没有问题。
好的,下面让我来配置一下吧:
注意:为避免其他因素干扰,请关闭每台机器上的iptables并将SElinux设置为0.
一 配置directorIP地址:
二 配置RS1和RS2arp_ignore和arp_announce参数
RS1
RS2
三 配置RS1和RS2 ip地址:
RS1
RS2
四 在RS1和RS2都添加如下路由条目信息
五 启动RS1和RS2的httpd服务,并且区别网站首页信息
RS1
RS2
六 在director上定义web集群服务
-g 参数表示使用LVS的DR模型
七 在director上先测试访问RS1和RS2
八 在windows上面输入VIP地址测试
通过刷新网页可以看到RS1和RS2主页轮回出现,LVS-DR模型实现的负载均衡简单实现。
总结: LVS-DR模型是现实中应用的较多的模型,成功释放了director的压力,但这次做的只是个简单LVS-DR模型,VIP,DIP,RIP地址都在同一网段,先掌握了再去解决复杂的。