虛擬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里也可以,寫在這里就不怕斷電后機器無法正常使用了