之前介绍了lvs-nat的工作模型已经集群搭建与测试,因为调度器在中间起到一个支点的作用,请求报文与响应报文都需要经过调度器,调度器压力随之增大,因此调度器成为了整个集群中的性能瓶颈,进而可能会引发单点故障。为了避免这种情况发生,章文嵩先生提出了lvs-dr集群架构,lvs-dr通过为请求报文重新封装一个数据链路层首部(MAC地址)进行报文转发,重新封装之后的报文源MAC地址是DIP所在网络接口的MAC地址,目的MAC地址是某个利用调度算法挑选出来的后端RS的RIP所在借口的MAC地址,源IP地址和源PORT以及目的IP和目的PORT在整个报文转发的过程中保持不变。下面是拓扑图:
假定客户端IP在172.16.0.0/16网段,后端RS的IP在192.168.100.0/24网段。调度器上同时设定CIP与DIP分别在两个网段以进行沟通,后端RS上也需要设定RIP与VIP,这里VIP的作用是为了能使RS接受请求报文。这就产生了一个问题,当客户端请求报文发出至交换机时,交换机会广播哪台主机有VIP这个IP地址,这时RS与VS都可以给予响应,因此为了避免这个问题引入了arp_ignore和arp_announce这两个内核参数。另一个问题是当RS回复响应报文时的源IP地址会是RIP这样客户端会认为此报文是虚假信息不予接受,因此为了避免这个问题需要在RS上设置一条特殊的路由,当接受报文时先经过lo接口上的VIP以设置源IP地址为VIP。
下面配置一个lvs-dr集群并进行测试:
编写脚本配置后端RS服务器的VIP,特殊的路由转发功能,以及arp_ignore,arp_announce:  
然后配置后端RS的RIP:192.168.100.0/24网段的任意IP,实验里选择192.168.100.2和192.168.100.3,看一下配置好的IP以及网关:
 接下来就可以配置调度服务器的DIP和VIP以及ipvsadm配置的内容,注意这里调度服务器只有一个网卡,我们将DIP配置在网卡上,而VIP则配置在别名网卡上: 
在ipvsadm上配置时,lvs-dr算法是默认算法,因此不需要专门指定算法类型:
因为DIP和VIP不在同一网段,假定客户端与VIP在同一网段,所以添加一台虚拟机当做客户机来监测集群情况,配置如下:
接下来监测集群使用状况:
采用rr轮询算法调度后端服务器,客户端10次申请,后端RS轮询提供服务,并且reply报文不经过调度器转发,成功实现lvs-dr集群的构建。
|