虛擬 IP原理(動態 IP 、固定 IP 、實體 IP)

1、虛擬ip概念:

分析虛擬IP前,先說一下:
動態 IP 、固定 IP 、實體 IP 

實體 IP:在網絡的世界裏,爲了要辨識每一部計算機的位置,因此有了計算機 IP 位址的定義。一個 IP 就好似一個門牌!例如,你要去微軟的網站的話,就要去『 207.46.197.101 』這個 IP 位置!這些可以直接在網際網絡上溝通的 IP 就被稱爲『實體 IP 』了。

固定 IP 與 動態 IP:基本上,這兩個東西是由於近來網絡公司大量的成長下的產物,例如,你如果向中華電信申請一個商業型態的 ADSL 專線,那他會給你一個固定的實體 IP ,這個實體 IP 就被稱爲『固定 IP 』了。而若你是申請計時制的 ADSL ,那由於你的 IP 可能是由數十人共同使用,因此你每次重新開機上網時,你這部計算機的 IP 都不會是固定的!於是就被稱爲『動態 IP』或者是『浮動式IP』。基本上,這兩個都是『實體IP』,只是網絡公司用來分配給用戶的方法不同而產生不同的名稱而已。

虛擬 IP:不過,衆所皆知的,IP 位址僅爲 xxx.xxx.xxx.xxx 的資料型態,其中, xxx 爲 1-255 間的整數,由於近來計算機的成長速度太快,實體的 IP 已經有點不足了,好在早在規劃 IP 時就已經預留了三個網段的 IP 做爲內部網域的虛擬 IP 之用。這三個預留的 IP 分別爲:

A級:10.0.0.0 - 10.255.255.255
B級:172.16.0.0 - 172.31.255.255
C級:192.168.0.0 - 192.168.255.255

上述中最常用的是192.168.0.0這一組。不過,由於是虛擬 IP ,所以當您使用這些地址的時候﹐當然是有所限制的,限制如下:

私有位址的路由信息不能對外散播
使用私有位址作爲來源或目的地址的封包﹐不能透過Internet來轉送
關於私有位址的參考紀錄(如DNS)﹐只能限於內部網絡使用

由於虛擬 IP 的計算機並不能直接連上 Internet ,因此需要特別的功能才能上網。不過,這給我們架設IP網絡做成很大的方便﹐比如﹕即使您目前的公司還沒有連上Internet﹐但不保證將來不會啊。如果使用公共IP的話﹐如果沒經過註冊﹐等到以後真正要連上網絡的時候﹐就很可能和別人衝突了。也正如前面所分析的﹐到時候再重新規劃IP的話﹐將是件非常頭痛的問題。這時候﹐我們可以先利用私有位址來架設網絡﹐等到真要連上intetnet的時候﹐我們可以使用IP轉換協定﹐如 NAT (Network Addresss Translation)等技術﹐配合新註冊的IP就可以了。

2、虛擬IP原理

我們知道一般的IP地址是和物理網卡綁定的,而VIP相反,是不與實際網卡綁定的的IP地址。當外網的上的一個機器,通過域名訪問某公司內網資源時,內網的DNS服務器會把域名解析到一個VIP上。當外網主機經過域名解析得到這個VIP後,就將數據包發往這個VIP。但是在內網中,這個VIP是不與具體的設備相連接的,所以外網發過來的目的地址是VIP的IP數據包,究竟會到哪臺機器呢?

其實,這個在內網的過程是,通過ARP協議來完成的。也就是說這個VIP可以映射到的MAC地址是可以控制的。VIP在內網中被動態的映射到不同的MAC地址上,也就是映射到不同的機器設備上,那麼就可以起到負載均衡的效果啦。

PS:VIP的概念的是LVS中一個概念,具體學習《Linux負載均衡軟件LVS之概念篇》

3、爲什麼需要虛擬ip(HA的重要性)

 HA即(high available)高可用,又被叫做雙機熱備,用於關鍵性業務。簡單理解就是,有2臺機器 A 和 B,正常是 A 提供服務,B 待命閒置,當 A 宕機或服務宕掉,會切換至B機器繼續提供服務。常見的實現高可用的開源軟件有 heartbeat 和 keepalived。

    這樣,一臺 web 服務器一天24小時提供web服務,難免會存在 web 服務掛掉或服務器宕機宕機的情況,那麼用戶就訪問不了服務了,這當然不是我們期望的。如果這樣,有2臺服務器,A對外提供 web 服務,B作爲備用,如果A掛掉,那麼B立刻替代A的位置去提供 web 服務,這樣對用戶來說是透明的。但是有個問題,服務器A的 ip 是 10.0.0.100,服務器B的 ip 是 10.0.0.101,顯然向用戶提供A或B的ip地址是不可行的,因爲用戶總不能去切換ip來訪問的吧。這時heartbeat或keepalived可以提供一個虛擬IP:10.0.0.102,用戶只需要訪問 10.0.0.102,當A提供服務時,VIP 會設置在A服務器上,當B提供服務時,VIP會設置在B服務器上,這樣就可以讓用戶通過訪問 10.0.0.102 來獲取web服務,即使A或B服務器切換也不影響用戶的正常訪問。

下面我們使用 heartbeat 來做 HA 集羣,並且把 nginx 服務作爲 HA 對應的服務。

4、具體的實現(方案的細節)

高可用性HA(High Availability)指的是通過儘量縮短因日常維護操作(計劃)和突發的系統崩潰(非計劃)所導致的停機時間,以提高系統和應用的可用性。HA系統是目前企業防止核心計算機系統因故障停機的最有效手段。

實現HA的方式,一般採用兩臺機器同時完成一項功能,比如數據庫服務器,平常只有一臺機器對外提供服務,另一臺機器作爲熱備,當這臺機器出現故障時,自動動態切換到另一臺熱備的機器。

怎麼實現故障檢測的那?

      心跳,採用定時發送一個數據包,如果機器多長時間沒響應,就認爲是發生故障,自動切換到熱備的機器上去。

怎麼實現自動切換那?

      虛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) at 00:21:5A:DB:68:E8 [ether] on bond0
(192.168.1.217) at 00:21:5A:DB:68:E8 [ether] on bond0
(192.168.1.218) at 00:21:5A:DB:7F:C2 [ether] on bond

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) at 00:21:5A:DB:7F:C2 [ether] on bond0
(192.168.1.217) at 00:21:5A:DB:68:E8 [ether] on bond0
(192.168.1.218) at 00:21:5A:DB:7F:C2 [ether] on bond0 

這就是奧妙所在。當218 發現217宕機後會向網絡發送一個ARP數據包,告訴所有主機192.168.1.219這個IP對應的MAC地址是00:21:5A:DB:7F:C2,這樣所有發送到219的數據包都會發送到mac地址爲00:21:5A:DB:7F:C2的機器,也就是218的機器。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章