举个通俗的例子:老王开了一个会所,地址是虹X路1.1.1.1,经营范围不太正规,经常被封,顾客以为店已经关门,其实里面热火朝天,所以老王急啊,于是开了一个后门,地址是2.2.2.1,于是顾客纷纷从后门进入,老王笑开了花…过几天大门解封了,但后门由于弄堂改造,临时关闭了,熟门熟路的顾客从后门进不来了,有同学会问,大门都开着,顾客为何不从前门进店?因为这些顾客头脑比较简单,老王苦啊,痛定思痛,老王想出了一个好主意。老王给顾客自己的电话号码4.4.4.1,叮嘱他们,以后来店消费之前,只要电话能打通(4.4.4.1路由可达),说明店还营业,前门进不来(1.1.1.1接口down)就走后门(2.2.2.1接口UP);同理,如果后门进不来,可以走前门。如果电话打不通(4.4.4.1路由消失),说明老王被关进去了,顾客就别来了,因为前门被封(1.1.1.1接口down),后门也被封(2.2.2.1接口down),来了也是白来。
实现原理主要是靠TCP/IP的ARP协议。因为ip地址只是一个逻辑地址,在以太网中MAC地址才是真正用来进行数据传输的物理地址,每台主机中都有一个ARP高速缓存,存储同一个网络内的IP地址与MAC地址的对应关系,以太网中的主机发送数据时会先从这个缓存中查询目标IP对应的MAC地址,会向这个MAC地址发送数据。操作系统会自动维护这个缓存。这就是整个实现的关键。
下边就是电脑上的arp缓存的内容。
(192.168.1.219) at 00:21:5A:DB:68:E8 [ether] on bond0
(192.168.1.217) at 00:21:5A:DB:68:E8 [ether] on bond0
(192.168.1.218) at 00:21:5A:DB:7F:C2 [ether] on bond0
192.168.1.217、192.168.1.218是两台真实的电脑,
192.168.1.217为对外提供数据库服务的主机。
192.168.1.218为热备的机器。
192.168.1.219为虚IP。
注意:219、217的MAC地址是相同的
再看看那217宕机后的arp缓存
(192.168.1.219) at 00:21:5A:DB:7F:C2 [ether] on bond0
(192.168.1.217) at 00:21:5A:DB:68:E8 [ether] on bond0
(192.168.1.218) at 00:21:5A:DB:7F:C2 [ether] on bond0
这就是奥妙所在。当218 发现217宕机后会向网络发送一个ARP数据包,告诉所有主机192.168.1.219这个IP对应的MAC地址是00:21:5A:DB:7F:C2,这样所有发送到219的数据包都会发送到mac地址为00:21:5A:DB:7F:C2的机器,也就是218的机器。
这里采用定时发送一个数据包,如果机器多长时间没响应,就认为是发生故障,自动切换到热备的机器上去。