虛擬IP原理


http://blog.csdn.net/whycold/article/details/11898249

高可用性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 bond0

 

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的機器。

 

=======================================

在做HA的時候需要為服務器設計虛擬IP,也就是一個主機對應多個IP地址?剛聽起來好神奇,原來這樣也是可能的
看了下面的這個鏈接 自己配了一下
http://hi.baidu.com/pbottle/item/7175d29702a0a0bd83d29533

在eth0處引用別名,設置完子網掩碼即可
ifconfig eth0:0 166.111.69.100 netmask 255.255.255.0 up
ifconfig查看此時的信息

點擊(此處)折疊或打開

  1. eth0 Link encap:Ethernet HWaddr 08:00:27:64:59:11 
  2.           inet addr:166.111.69.17 Bcast:166.111.69.255 Mask:255.255.255.0
  3.           inet6 addr: 2402:f000:1:4412:a00:27ff:fe64:5911/64 Scope:Global
  4.           inet6 addr: fe80::a00:27ff:fe64:5911/64 Scope:Link
  5.           UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
  6.           RX packets:597673 errors:0 dropped:0 overruns:0 frame:0
  7.           TX packets:215472 errors:0 dropped:0 overruns:0 carrier:0
  8.           collisions:0 txqueuelen:1000 
  9.           RX bytes:67285933 (67.2 MB) TX bytes:22782158 (22.7 MB)
  10. eth0:0 Link encap:Ethernet HWaddr 08:00:27:64:59:11 
  11.           inet addr:166.111.69.100 Bcast:166.111.69.255 Mask:255.255.255.0
  12.           UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
  13. lo Link encap:Local Loopback 
  14.           inet addr:127.0.0.1 Mask:255.0.0.0
  15.           inet6 addr: ::1/128 Scope:Host
  16.           UP LOOPBACK RUNNING MTU:16436 Metric:1
  17.           RX packets:843 errors:0 dropped:0 overruns:0 frame:0
  18.           TX packets:843 errors:0 dropped:0 overruns:0 carrier:0
  19.           collisions:0 txqueuelen:0 
  20.           RX bytes:67174 (67.1 KB) TX bytes:67174 (67.1 KB)

然后找另一台機器ping這個vip(eth0:0)就可以看到顯示結果了。
寫在/etc/rc.local里也可以,寫在這里就不怕斷電后機器無法正常使用了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM