虚拟ip的工作原理


虚拟IP,何为虚IP那,就是一个未分配给真实主机的IP,重新对外提供数据库服务器的主机除有一个真实IP外还有一个虚IP,使用这两个IP中的任意一个都可以连接到这台主机,所有项目中数据库链接分配配置的都是这个虚IP,当服务器发生故障无法对外提供服务时,动态将这个虚IP切换到备用主机。

开始我也不明白这是怎么实现的,以为是软件动态改IP地址,其实不是这样,其实现原理主要是靠TCP / IP的ARP协议。因为ip地址只是一个逻辑地址,在以太网中MAC地址才是真正用作进行数据传输的物理地址,每台主机中都有一个ARP高速缓存,存储同一个网络内部的IP地址与MAC地址的对应关系,以太网的主机发送数据时会先从这个缓存中查询目标IP对应的MAC地址,会向这个MAC地址发送数据。操作系统会自动维护这个缓存。这就是整个实现的关键。

下边就是我电脑上的arp缓存的内容。

(192.168.1.219)在bond0的00:21:5A:DB:68:E8 [ether]

(192.168.1.217)在bond0的00:21:5A:DB:68:E8 [ether]

(192.168.1.218)在bond0的00:21:5A:DB:7F:C2 [ether]

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)在bond0的00:21:5A:DB:7F:C2 [ether]

(192.168.1.217)在bond0的00:21:5A:DB:68:E8 [ether]

(192.168.1.218)在bond0的00:21:5A:DB:7F:C2 [ether]

这就是奥妙所在。当218发现217停机机后会向网络发送一个ARP数据包,告诉所有主机192.168.1.219这个IP对应的MAC地址是00:21:5A:DB:7F:C2,这样所有发送到219的数据包都会发送到mac地址为00:21:5A:DB:7F:C2的机器,也就是218的机器。

======================================

在做HA的时候需要为服务器设计虚拟IP,也就是一个主机对应多个IP地址?刚听起来好神奇,原来这样也是可能的

在eth0处引用别名,设置完烷基萘即可

ifconfig eth0:0 166.111.69.100网络掩码255.255.255.0以上

ifconfig查看此时的信息

eth0链接encap:以太网HWaddr 08:00:27:64:59:11

inet地址:166.111.69.17广播:166.111.69.255掩码:255.255.255.0

inet6 addr:2402:f000:1:4412:a00:27ff:fe64:5911/64范围:全局

inet6地址:fe80 :: a00:27ff:fe64:5911/64范围:链接

UP广播多播MTU:1500公制:1

RX数据包:597673错误:0掉落:0超限:0帧:0

TX数据包:215472错误:0掉落:0超限:0运营商:0

碰撞:0 txqueuelen:1000

接收字节:67285933(67.2 MB)发送字节:22782158(22.7 MB)

eth0:0链接encap:以太网HWaddr 08:00:27:64:59:11

inet地址:166.111.69.100广播:166.111.69.255掩码:255.255.255.0

UP广播多播MTU:1500公制:1

lo Link encap:本地环回

inet地址:127.0.0.1掩码:255.0.0.0

inet6 addr::: 1/128范围:主机

上环运行MTU:16436公制:1

RX数据包:843错误:0丢弃:0超限:0帧:0

TX数据包:843错误:0掉落:0超限:0运营商:0

冲突:0 txqueuelen:0

接收字节:67174(67.1 KB)接收字节:67174(67.1 KB)

然后找另一台机器ping这个vip(eth0:0)就可以看到显示结果了。

写在/etc/rc.local里也可以,写在这里就不怕断电后机器无法正常使用了