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
转载于:https://blog.51cto.com/clarence/1548435