一、DR模式简介

DR模式,直接路由模式,通过改写请求报文的MAC地址,将客户端的请求发送到RS,RS处理完请求后,直接返回给客户端。Dr只负责处理入站请求,不处理出站请求。

拓扑参考图

Linux使用LVS的DR模式搭建负载均衡集群_第1张图片

规则

1.各集群节点必须与director位于同一网络,中间不间隔其他设备,仅通过一台或几台交换机连接

2.RIP地址可以不为私有地址

3.Director仅负责处理入站请求,不负责处理出站请求,响应报文由realserver直接发给客户端

4.集群节点一定不能使用director的dip作为网关

5.Director可以不支持端口映射

6.大多数操作系统都能用于realserver,realserver必须要求能隐藏vip,vip都相同。

工作原理

Linux使用LVS的DR模式搭建负载均衡集群_第2张图片

1.不管是Director Server还是Real Server上都需要配置VIP

2.当用户请求到达我们的集群网络的前端路由器的时候,请求数据包的源地址为CIP目标地址为VIP

3.路由器会发广播问谁是VIP,集群中所有的节点都配置有VIP,此时谁先响应路由器那么路由器就会将用户请求发给谁,这样一来我们的集群系统是不是没有意义了

4.我们可以在网关路由器上配置静态路由指定VIP就是Director Server,或者使用一种机制不让Real Server 接收来自网络中的ARP地址解析请求(关闭realserver的ARP解析器),这样一来用户的请求数据包都会经过Director Server

5.当Director Server收到用户的请求后根据此前设定好的调度算法结果来确定将请求负载到某台Real Server上去

6.Director Server 会将数据帧中的目标MAC地址修改为该Real Server的MAC地址,然后再将数据帧发送出去

7.当Real Server收到一个源地址为CIP目标地址为VIP的数据包时,Real Server发现目标地址为VIP,而VIP是自己,于是接受数据包并给予处理

8.当Real Server处理完请求后,会将一个源地址为VIP目标地址为CIP的数据包发出去,此时的响应请求就不会再经过Director Server了,而是直接响应给用户

二、实验准备

1.Director有一张网卡,与realserver连接在同一个交换机上,并能相互通信,配置一个网络别名作为VIP

2.在每个realserver上绑定一个虚拟网卡ip地址lo:0,该虚拟ip地址为director的ip地址

3.用于realserver处理完director分给的用户请求后,直接使用director的ip作为源ip返回给用户

4.在绑定虚拟网卡ip前,需要先调整director的arptable(对arp请求的通告级别、回应级别调整)。

arp_ignore:对什么级别的arp请求进行响应,当arp广播请求的目标ip不在同一个接口上就不予响应,默认为0,能通告就通告。

    0:只要本地配置的有相应地址,就给予响应;
    1:仅在请求的目标地址配置请求到达的接口上的时候,才给予响应;

arp_announce:向外主动通告自己的通告级别, 默认为0,能通告就通告。

    0:将本地任何接口上的任何地址向外通告;
    1:试图仅向目标网络通告与其网络匹配的地址;
    2:仅向与本地接口上地址匹配的网络进行通告

5.在realserver上配置一条独特的路由条目,才能将处理好的用户请求使用director的IP地址返回结果给用户

三、实验步骤

ipvs在2.6.X版本后的内核中默认安装有,我们需要安装ipvsadm进行管理,注意:ipvsadm与iptables不能同时使用,实验前需关闭iptables与selinux

1).Director只需一张网卡,启动

2).为Director安装ipvsadm

 yum -y install ipvsadm

 检查是否安装成功只需输入ipvsadm,无输出则未安装有,若已安装则输出如下字样

  IP Virtual Server version 1.2.1 (size=4096)
  Prot LocalAddress:Port Scheduler Flags
   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

3).配置测试网页

4).为每台realserver安装http,并启动httpd服务

   yum install http
   service httpd start
   echo "this is realserver1 test web" > /var/www/html/index.html
   echo "this is realserver2 test web" > /var/www/html/index.html #分别创建测试页 
   curl http://ipaddress    #访问测试页

5).配置director的DIP,确保director能与外部进行通讯。

director:192.168.8.31

6).配置director 配置VIP

ifconfig eth0:0 192.168.8.30/24

7).配置realserver的RIP,确保RS之间,RS与director之间能相互通讯。(虚拟机中可同时选择桥接模式或NAT模式,确保RS与director处于同一物理网络上)

realserver1:192.168.8.32
realserver2:192.168.8.33

8).分别配置realserver的arp_ignore、arp_announce

realserver1:
    echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
    echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

realserver2:
    echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
    echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

或

    sysctl -w net.ipv4.conf.eth0.arp_ignore=1
    sysctl -w net.ipv4.conf.eth0.arp_annonce=2
    sysctl -w net.ipv4.conf.all.arp_ignore=1
    sysctl -w net.ipv4.conf.all.arp_announce=2

9).分别在realserver1、2上配置的网络别名VIP与静态路由

   ifconfig lo:0 192.168.8.30 broadcast 192.168.8.30 netmask 255.255.255.255 up
   route add -host 192.168.8.30 dev lo:0
   在director上也需要配置静态路由
   route add -host 192.168.8.30 dev eth0:0

10).在director上测试能否正常访问realserver的测试页

11).配置ipvsadm规则

  在director上配置
  [root@director ~]# ipvsadm -C    #清空之前的ipvsadm规则
  [root@director ~]# ipvsadm -A -t 192.168.8.30:80 -s wlc
  [root@director ~]# ipvsadm -a -t 192.168.8.30:80 -r 192.168.8.32 -g -w 2  #-g表示DR模式 -w表示权重
  [root@director ~]# ipvsadm -a -t 192.168.8.30:80 -r 192.168.8.33 -g -w 1
  [root@director ~]# ipvsadm -l -n
  IP Virtual Server version 1.2.1 (size=4096)
  Prot LocalAddress:Port Scheduler Flags
    -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
  TCP  192.168.8.30:80 wlc
    -> 192.168.8.33:80              Route   1      0          0         
    -> 192.168.8.32:80              Route   2      0          0         

12).测试

使用物理机的外部浏览器输入http://director的ip地址,
刷新即可看到效果。