Lvs-dr配置

客户端通过路由器将请求交给director的VIP。director接收请求,将通过相应的算法将请求转发给相应的realserver。在转发的过程中,会修改请求包的目的mac地址,目的ip地址不变。realserver接收请求,并直接响应客户端。但这有个问题:director此时与realserver位于同一个网络中,当director直接将请求转发给realserver时,realserver检测到该请求包的目的ip是vip而并非自己,便会丢弃,而不会响应。所以,我们需要在所有realserver上都配上VIP。但又会有二个问题:director与realserver位于同一个网络中,当出现多个vip时,通过arp广播,整个网络必然混乱,我们无法保证客户端的请求一定会发往director。为保证当客户端请求抵达网络时,只有director来响应请求。我们需要realserver忽略对vip的arp请求,并且在arp通告时,不通告vip地址。我们需要配置如下两个内核参数:
arp_ignore :

  
当一台主机某个接口接收到arp请求时,这台机上的ip地址是否通过该接口响应给对应请求的限制级别。简单来说,当这台主机有多块网卡,或者有多个ip地址时,是否通过该接口将所有ip地址响应给对应的请求。


   0:不作任何限制。将所有本机的ip地址都响应给对应请求。

   1:当请求的ip就配置在本接口上时,才予以响应。换句话说,就是只响应当前接口的ip地址。

arp_announce:
  当一台主机加入到一个新的网络。会发出ARP通告,向网络中其他主机通告自己的ip地址及mac等信息。arp_anounce就用来限制通告的级别。当这台主机有多块网卡或者多个ip地址时,是否通过某一个接口将所有ip地址通告给该网络中的主机。

   
0:不作任何限制。从任意接口通告所有ip地址。

   1:尽可能避免通告非本接口上的ip。

   2:只通知本接口的ip。非本接口的ip不予通告。

由此我们亦可知,在realserver上配置vip时显然也不能配置的物理接口的虚接口上,而应该配置在loopback上。

 

dr模型的特点:
1保证前端路由将目标地址为VIP的报文统统发往Directory,而不能是RS

                       解决方案:

                            (1)静态地址绑定:在前端路由器上操作

                                 问题:未必有路由操作权限

                            (2)aprtables

                            (3)修改RS上内核参数,将RS上的VIP配置在lo接口的别名上,并限制其不能响应对VIP地址解析请求;

                   2、RS可以使用私有地址;但也可以使用公网地址,此时可通过互联网通过RIP对其直接访问;

                   3、RS跟Directory必须在同一物理网络中;

                   4、请求报文经由Director,但响应报文必须不能经过Director;

                   5、不支持端口映射;

                   6、RS可以是大多数常见的OS;

                   7、RS的网关绝不允许指向DIP;

实验配置如下(共需三台主机)

1,  在虚拟机2上

[root@localhost~]# ifconfig eth0 172.16.31.31/16 up

[root@localhost~]# route add default gw 172.16.0.1

2,  在虚拟机3上

[root@localhost ~]# ifconfig eth0 172.16.31.32/16 up

[root@localhost~]# route add default gw 172.16.0.1

3,  在虚拟机1上配置

[root@localhost~]# ifconfig eth0:0 172.16.31.100/16 up

[root@localhost~]# ifconfig

eth0      Link encap:Ethernet  HWaddr 00:0C:29:D0:61:EB 

          inet addr:172.16.31.30  Bcast:172.16.255.255  Mask:255.255.0.0

          inet6 addr:fe80::20c:29ff:fed0:61eb/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500 Metric:1

          RX packets:5109 errors:0 dropped:0overruns:0 frame:0

          TX packets:142 errors:0 dropped:0overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:368690 (360.0 KiB)  TX bytes:12077 (11.7 KiB)

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:D0:61:EB 

          inet addr:172.16.31.100  Bcast:172.16.255.255  Mask:255.255.0.0

          UP BROADCASTRUNNING MULTICAST  MTU:1500  Metric:1

4,  配置节点2和3上vip,在这之前要改变配置参数并且添加路由

[root@localhost~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

[root@localhost ~]# echo 1 >/proc/sys/net/ipv4/conf/eth0/arp_ignore

[root@localhost~]# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce

[root@localhost ~]# echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce

[root@localhost ~]# ifconfig lo:0 172.16.31.100/16 up    ----vip地址

[root@localhost~]#ifconfig lo:0172.16.32.88 netmask 255.255.255.255 broadcast 172.16.32.88 up

[root@localhost ~]#route add -host 172.16.32.88 dev lo:0

5,  配置集群服务

[root@localhost~]# ipvsadm -A -t 172.16.31.100:80 -s rr

[root@localhost~]# ipvsadm -a -t 172.16.31.100:80 -r 172.16.31.31 -g -w 1

[root@localhost ~]# ipvsadm -a -t 172.16.31.100:80 -r172.16.31.32 -g -w 2

[root@localhost ~]# ipvsadm -L -n

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  ->RemoteAddress:Port           ForwardWeight ActiveConn InActConn

TCP 172.16.31.100:80 rr

  ->172.16.31.31:80              Route   1     0          0        

  ->172.16.31.32:80              Route   2     0          0   

lvs-dr原理及配置_lvs-dr

lvs-dr原理及配置_路由器_02