虛擬IP,何為虛IP那,就是一個(gè)未分配給真實(shí)主機(jī)的IP,重新對(duì)外提供數(shù)據(jù)庫服務(wù)器的主機(jī)除有一個(gè)真實(shí)IP外還有一個(gè)虛IP,使用這兩個(gè)IP中的任意一個(gè)都可以連接到這臺(tái)主機(jī),所有項(xiàng)目中數(shù)據(jù)庫鏈接分配配置的都是這個(gè)虛IP,當(dāng)服務(wù)器發(fā)生故障無法對(duì)外提供服務(wù)時(shí),動(dòng)態(tài)將這個(gè)虛IP切換到備用主機(jī)。
開始我也不明白這是怎么實(shí)現(xiàn)的,以為是軟件動(dòng)態(tài)改IP地址,其實(shí)不是這樣,其實(shí)現(xiàn)原理主要是靠TCP / IP的ARP協(xié)議。因?yàn)閕p地址只是一個(gè)邏輯地址,在以太網(wǎng)中MAC地址才是真正用作進(jìn)行數(shù)據(jù)傳輸?shù)奈锢淼刂罚颗_(tái)主機(jī)中都有一個(gè)ARP高速緩存,存儲(chǔ)同一個(gè)網(wǎng)絡(luò)內(nèi)部的IP地址與MAC地址的對(duì)應(yīng)關(guān)系,以太網(wǎng)的主機(jī)發(fā)送數(shù)據(jù)時(shí)會(huì)先從這個(gè)緩存中查詢目標(biāo)IP對(duì)應(yīng)的MAC地址,會(huì)向這個(gè)MAC地址發(fā)送數(shù)據(jù)。操作系統(tǒng)會(huì)自動(dòng)維護(hù)這個(gè)緩存。這就是整個(gè)實(shí)現(xiàn)的關(guān)鍵。
下邊就是我電腦上的arp緩存的內(nèi)容。
(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是兩臺(tái)真實(shí)的電腦,
192.168.1.217為對(duì)外提供數(shù)據(jù)庫服務(wù)的主機(jī)。
192.168.1.218為熱備的機(jī)器。
192.168.1.219為虛IP。
大家注意紅字部分,219、217的MAC地址是相同的。
再看看那217停機(jī)機(jī)后的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]
這就是奧妙所在。當(dāng)218發(fā)現(xiàn)217停機(jī)機(jī)后會(huì)向網(wǎng)絡(luò)發(fā)送一個(gè)ARP數(shù)據(jù)包,告訴所有主機(jī)192.168.1.219這個(gè)IP對(duì)應(yīng)的MAC地址是00:21:5A:DB:7F:C2,這樣所有發(fā)送到219的數(shù)據(jù)包都會(huì)發(fā)送到mac地址為00:21:5A:DB:7F:C2的機(jī)器,也就是218的機(jī)器。
======================================
在做HA的時(shí)候需要為服務(wù)器設(shè)計(jì)虛擬IP,也就是一個(gè)主機(jī)對(duì)應(yīng)多個(gè)IP地址?剛聽起來好神奇,原來這樣也是可能的
在eth0處引用別名,設(shè)置完烷基萘即可
ifconfig eth0:0 166.111.69.100網(wǎng)絡(luò)掩碼255.255.255.0以上
ifconfig查看此時(shí)的信息
eth0鏈接encap:以太網(wǎng)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數(shù)據(jù)包:597673錯(cuò)誤:0掉落:0超限:0幀:0
TX數(shù)據(jù)包:215472錯(cuò)誤:0掉落:0超限:0運(yùn)營商:0
碰撞:0 txqueuelen:1000
接收字節(jié):67285933(67.2 MB)發(fā)送字節(jié):22782158(22.7 MB)
eth0:0鏈接encap:以太網(wǎng)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:本地環(huán)回
inet地址:127.0.0.1掩碼:255.0.0.0
inet6 addr::: 1/128范圍:主機(jī)
上環(huán)運(yùn)行MTU:16436公制:1
RX數(shù)據(jù)包:843錯(cuò)誤:0丟棄:0超限:0幀:0
TX數(shù)據(jù)包:843錯(cuò)誤:0掉落:0超限:0運(yùn)營商:0
沖突:0 txqueuelen:0
接收字節(jié):67174(67.1 KB)接收字節(jié):67174(67.1 KB)
然后找另一臺(tái)機(jī)器ping這個(gè)vip(eth0:0)就可以看到顯示結(jié)果了。
寫在/etc/rc.local里也可以,寫在這里就不怕斷電后機(jī)器無法正常使用了