虚拟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里也可以,写在这里就不怕断电后机器无法正常使用了