VIP=192.168.1.1
Director Server为A,DIP=192.168.1.2
Realserver为B,RIP=192.168.1.3
那么当有一个请求过来后,首先由director得到,然后lvs根据设置,需要将该请求修改后,广播给B。这时,他就需要B的MAC地址,当本地arp缓冲区中不存在时,A首先会广播arp消息,格式为who has 192.168.1.3? tell 192.168.1.2,然后由B响应请求
而如果A仅仅只有一个VIP,而没有DIP时,arp格式变为who has 192.168.1.3? tell 192.168.1.1,这时,B机收到arp请求后,会按照arp请求src地址192.168.1.1发送自己的信息,而由于B机本身就有VIP,所以此时不会广播出去。所以A机永远得不到B机的MAC地址。
Linux kernel 2.0.xx doesn't do arp response on loopback alias and tunneling interfaces, it is good for the LVS cluster. However, Linux kernel 2.2.xx does all arp responses of all its IP addresses except the loopback addresses (127.0.0.0/255.0.0.0) and multicast addresses.
dr建立了hash table,再改写了data frame mac地址为选择的real server
########### 补充一个 ##############
1、LVS调度器收到目标地址为VIP的请求包后,将MAC地址改成RS的MAC地址,并通过交换机(链路层)发给RS.
2、RS的链路层收到请求后,往上传给IP层。IP层需要验证请求的目标IP地址。所以RS需要配置一个VIP的loopback device。这样RS的IP层收到报文后,会往上递交给传输层。之所以配置成loopback device,是因为loopback device对外不可见,不会跟LVS的VIP冲突。
3、RS处理完成后,将应答包直接返回给客户端。若是公网服务器,则RS需要连上互联网(公网IP或者网关)才能将应答包返回。
VIP地址为调度器和服务器(RealServer)所共享,那会不会引起IP冲突?
答案是:不会。正因为后面所说的,“调度器配置的VIP地址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把VIP地址配置在各自的Non-ARP网络设备上,它对外面是不可见的”。在调度器上,VIP与其局域网内IP对外都是可见的;在服务器上,对外可见的是其在局域网上的IP(调度器调度的时候使用的IP),而在服务器上,VIP的性质就像是平常我们所熟知的127.0.0.1的性质一样,它是一个loopback device,他只在网络层之上可见(包括网络层),这样的loopback device用来模拟网络适配器的行为。就算没有装网卡,127.0.0.1与VIP的这样IP都是可用的。
那为什么要在服务器上还放上一个VIP呢?
因为当只修改了MAC地址的链路层帧发到服务器的链路层时,要想再向上提交到应用层去让HTTP等服务器程序处理,必须再经过网络层、传输层等,而要通过这些层是要经过目标IP的检测的。