使用keepalived实现虚拟IP + IP漂移

首先介绍几个概念:虚拟IP、IP漂移、ARP协议

虚拟IP

  在TCP/IP的架构下,所有想上网的电脑,不论是用何种方式连上网路,都必须要有一个唯一的 IP-address。事实上IP地址是主机硬件地址的一种抽象,简单的说,MAC地址是物理地址,IP地址是逻辑地址。

虚拟IP,就是一个未分配给真实主机的IP,也就是说对外提供服务器的主机除了有一个真实IP外还有一个虚IP,使用这两个IP中的任意一个都可以连接到这台主机。

虚拟IP一般用作达到HA(High Availability)的目的,比如让所有项目中数据库链接一项配置的都是这个虚IP,当主服务器发生故障无法对外提供服务时,动态将这个虚IP切换到备用服务器。

先来说说实体IP与虚拟IP
1、实体IP:在网络的世界里,为了要辨识每一部计算机的位置,因此有了计算机 IP 位址的定义。实体IP可以理解为公网IP
2、虚拟IP:由于实体IP数量有限,不可能给每个机器都分配一个。好在早在规划 IP 时就已经预留了三个网段的 IP 做为内部网域的虚拟IP之用。所以虚拟IP也可以理解为局域网IP。这三个预留的IP分别为:
A级:10.0.0.0 - 10.255.255.255
B级:172.16.0.0 - 172.31.255.255
C级:192.168.0.0 - 192.168.255.255

上述中最常用的是192.168.0.0这一组。不过,由于是虚拟 IP ,所以当您使用这些地址的时候﹐当然是有所限制的,限制如下:
1、私有位址的路由信息不能对外散播
2、使用私有位址作为来源或目的地址的封包﹐不能透过Internet来转送
3、关于私有位址的参考纪录(如DNS)﹐只能限于内部网络使用

由于虚拟 IP 的计算机并不能直接连上 Internet ,因此需要特别的功能才能上网。不过,这给我们架设IP网络做成很大的方便﹐比如﹕即使您目前的公司还没有连上Internet﹐但不保证将来不会啊。如果使用公共IP的话﹐如果没经过注册﹐等到以后真正要连上网络的时候﹐就很可能和别人冲突了。也正如前面所分析的﹐到时候再重新规划IP的话﹐将是件非常头痛的问题。这时候﹐我们可以先利用私有位址来架设网络﹐等到真要连上intetnet的时候﹐我们可以使用IP转换协定﹐如 NAT (Network Addresss Translation)等技术﹐配合新注册的IP就可以了。

虚拟IP原理
  虚拟IP(Vrtual IP Address),是一种不与特定计算机或者特定计算机网卡相对应的IP地址。所有发往这个IP地址的数据包最后都会经过真实的网卡到达目的主机的目的进程。虚拟IP主要是用来网络地址转换,网络容错和可移动性。

虚拟IP比较常见的一个用例就是在系统高可用性(High Availability HA)方面的应用,通常一个系统会因为日常维护或者非计划外的情况而发生宕机,为了提高系统对外服务的高可用性,就会采用主备模式进行高可用性的配置。当提供服务的主机M宕机后,服务会切换到备用主机S继续对外提供服务。而这一切用户是感觉不到的,在这种情况下系统对客户端提供服务的IP地址就会是一个虚拟IP,当主机M宕机后,虚拟IP便会漂浮到备机上,继续提供服务。

在这种情况下,虚拟IP就不是与特定计算主机或者特定某个物理网卡对应的了,而是一种虚拟或者是说逻辑的概念,它是可以自由移动自由漂浮的,这样一来既对外屏蔽了系统内部的细节,又为系统内部的可维护性和扩展性提供了方便。

ARP协议

  ARP协议属于TCP/IP协议族里面一种用户将IP地址解析为MAC地址的协议。该协议是用户局域网内解析IP地址对应的物理地址。通常一个主机A给另一个主机B通过网络发送一个IP数据报的时候,首先会发送到主机A所在的路由器上面,然后路由器会判断目的地址是否在本网络内,是则直接转发到本网络内的目的主机,否则会继续传递到下一个路由,直到到达指定的网络的路由器。指定网络的路由器会将此数据报发送到目的主机。整个过程最后都会涉及到由某一个网络中的路由器发送到网内某一主机的过程。这个过程通常是由路由器发送一个arp广播请求,请求IP地址为数据包目的地址的主机将它自己的MAC地址发送过来,因为数据链路层的数据传输是通过物理地址传输的。arp请求会广播到所有网内的主机,网内其他主机收到这个arp请求后,首先会检查发送arp请求的主机的IP地址,然后将该IP地址和其对应的MAC地址存放在缓存中,然后会检查这个arp请求中请求的IP地址是否为自己的IP地址,是则发送一个arp应答,应答包含自己的IP地址和对应的MAC地址。当得到了MAC地址后,便可以将数据包正确传输到目的主机上了。

ARP协议中比较重要的内容之一就是ARP缓存,主机操作系统会将IP地址与MAC地址的映射关系存放在主机的一片高速缓存中。
缓存失效:该缓存会在一定时间内失效,失效后,请求该IP地址时需要广播arp请求重新获取IP地址对应的MAC地址
缓存更新:当收到ARP请求时,会将发送ARP请求的主机IP地址与MAC地址记录下来,然后去更新本机arp缓存中对应的记录。

ARP是地址解析协议,它的作用很简单,将一个IP地址转换为MAC地址,然后给传输层使用。

每台主机中都有一个ARP高速缓存,存储同一个网络内的IP地址与MAC地址的对应关 系,以太网中的主机发送数据时会先从这个缓存中查询目标IP对应的MAC地址,会向这个MAC地址发送数据。操作系统会自动维护这个缓存。

在Linux下可以使用arp命令操作ARP高速缓存。

比如存在物理机A(IP是192.168.192.54 )和物理机器B(IP是192.168.192.40),A作为对外服务的主服务器(比如数据库主库),B作为备份机器,两台服务器之间的通信是通过Heartbeat,即主服务器会定时的给备份服务器发送数据包,告知主服务器服务正常,当备份服务器在规定时间内没有收到主服务器的Heartbeat,就会认为主服务器宕机,则备份服务器就会升级为主服务器。假设物理机A的ARP缓存如下:

1
2
3
4
5
地址                     类型    硬件地址            标志  Mask            接口
192.168.192.54 ether ec:f4:bb:49:xx:xx C eth0
192.168.192.237 ether ec:f4:bb:49:xx:xx C eth0
192.168.192.40 ether 28:e3:47:c0:xx:xx C eth0
...

另外物理机器B(IP是192.168.192.40)的ARP缓存如下:

1
2
3
4
5
地址                     类型    硬件地址            标志  Mask            接口
192.168.192.54 ether ec:f4:bb:49:xx:xx C eth0
192.168.192.237 ether ec:f4:bb:49:xx:xx C eth0
192.168.192.40 ether ec:f4:bb:49:xx:xx C eth0
...

当机器B通过BeatHeart得知机器A对外服务质量低于预期的时候(比如发生故障,服务无响应),会将自己的ARP缓存发送出去,让路由器修改路由表,告知虚拟地址应该指向我(物理机器B,192.168.192.40),这时候,外界再次访问虚拟IP的时候,机器B会变成主服务器,而A降级为备份服务器。这就完成了主从机器的自动切换,这一切对外界是透明的。

IP漂移

上面的VIP自动切换的过程就称之为IP漂移。

我们可以通过Keepalived来实现这个过程。 Keepalived是一个基于VRRP协议(Virtual Router Redundancy Protocol,即虚拟路由冗余协议)来实现的LVS(负载均衡器)服务高可用方案,可以利用其来避免单点故障。一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候, 备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

利用keepalived 实现主从VIP的切换

JouyPub wechat
欢迎订阅「K叔区块链」 - 专注于区块链技术学习