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