HA高可用,一般是对外提供一个固定IP地址或者固定域名供用户访问。固定域名方式需要域名解析为对应的ip地址,是一种分布式系统,这个和虚拟ip没关系。固定ip地址访问的方式,这个访问的ip又怎么知道服务运行在主备哪个物理机或虚拟机上呢?这就是虚拟ip的妙处,当某个物理机或虚拟机对外提供服务时虚拟ip就启动这个节点上,当HA高可用倒换时,虚拟ip从原节点上删除,在新的节点上启动。今天只讲能通过虚拟ip访问服务以及虚拟ip其他的使用场景。后面介绍虚拟ip的增加删除和查看,以及arp缓存失效和更新可能面临的问题。为何能通过虚拟ip访问服务
之所以能通过虚拟ip访问服务,实现原理主要是靠TCP/IP的ARP协议。因为ip地址只是一个逻辑地址,在以太网中MAC地址才是真正用来进行数据传输的物理地址,每台主机中都有一个ARP高速缓存,存储同一个网络内的IP地址与MAC地址的对应关系,以太网中的主机发送数据时会先从这个缓存中查询目标IP对应的MAC地址,会向这个MAC地址发送数据。操作系统会自动维护这个缓存。这就是整个实现的关键。----摘自网络文章1
如果上边看不懂,再看看这个更详细的介绍:通常一个主机A给另一个主机B通过网络发送一个IP数据报的时候,首先会发送到主机A所在的路由器上面,然后路由器会判断目的地址是否在本网络内,是则直接转发到本网络内的目的主机,否则会继续传递到下一个路由,直到到达指定的网络的路由器。指定网络的路由器会将此数据报发送到目的主机。整个过程最后都会涉及到由某一个网络中的路由器发送到网内某一主机的过程。这个过程通常是由路由器发送一个arp广播请求,请求IP地址为数据包目的地址的主机将它自己的MAC地址发送过来,因为数据链路层的数据传输是通过物理地址传输的。arp请求会广播到所有网内的主机,网内其他主机收到这个arp请求后,首先会检查发送arp请求的主机的IP地址,然后将该IP地址和其对应的MAC地址存放在缓存中,然后会检查这个arp请求中请求的IP地址是否为自己的IP地址,是则发送一个arp应答,应答包含自己的IP地址和对应的MAC地址。当得到了MAC地址后,便可以将数据包正确传输到目的主机上了。ARP协议属于TCP/IP协议族里面一种用户将IP地址解析为MAC地址的协议。该协议是用户局域网内解析IP地址对应的物理地址。--摘自网络文章2
在某台机器上能ping通虚拟ip和虚拟ip所在主机的实际ip地址,arp -n执行后可以看到二者对应的的mac是一样的。
主机会向同一网络内发送一个ARP数据包,告诉同一网络内的其它所有机器该虚拟IP对应的MAC地址是00:21:5A:DB:7F:C2,这样所有发送到该虚拟ip的数据包都会发送到mac地址为00:21:5A:DB:7F:C2的机器。arp缓存要面临的问题
arp协议中比较重要的内容之一就是arp缓存,主机操作系统会将IP地址与MAC地址的映射关系存放在主机的一片高速缓存中。
缓存失效:该缓存会在一定时间内失效,失效后,请求该IP地址时需要广播arp请求重新获取IP地址对应的MAC地址
缓存更新:当收到ARP请求时,会将发送ARP请求的主机IP地址与MAC地址记录下来,然后去更新本机arp缓存中对应的记录。--摘自网络文章2
缓存在一定时间内会失效,失效后缓存重新更新。多长时间会失效比较合理?如何设置失效时长?默认时长是多少?缓存更新失败怎么办?重启虚机或物理机后会立即更新缓存嘛?这都有待后面了解。虚拟IP的其他使用场景
A virtual IP address (VIP or VIPA) is an IP address that doesn't correspond to an actual physical network interface (port). Uses for VIPs include network address translation (especially, one-to-many NAT), fault-tolerance, and mobility.虚拟IP主要是用来网络地址转换,网络容错和可移动性。