學習一下虛擬IP和IP漂移的概念。 git
在 TCP/IP 的架構下,全部想上網的電腦,不管是用何種方式連上網路,都必需要有一個惟一的 IP-address。事實上IP地址是主機硬件地址的一種抽象,簡單的說,MAC地址是物理地址,IP地址是邏輯地址。 github
虛擬IP,就是一個未分配給真實主機的IP,也就是說對外提供服務器的主機除了有一個真實IP外還有一個虛IP,使用這兩個IP中的任意一個均可以鏈接到這臺主機。 數據庫
虛擬IP通常用做達到HA(High Availability)的目的,好比讓全部項目中數據庫連接一項配置的都是這個虛IP,當主服務器發生故障沒法對外提供服務時,動態將這個虛IP切換到備用服務器。 緩存
ARP是地址解析協議,它的做用很簡單,將一個IP地址轉換爲MAC地址,而後給傳輸層使用。 服務器
每臺主機中都有一個ARP高速緩存,存儲同一個網絡內的IP地址與MAC地址的對應關 系,以太網中的主機發送數據時會先從這個緩存中查詢目標IP對應的MAC地址,會向這個MAC地址發送數據。操做系統會自動維護這個緩存。 網絡
在Linux下可使用arp命令操做ARP高速緩存。 架構
好比存在物理機A(IP是192.168.192.54 )和物理機器B(IP是192.168.192.40),A做爲對外服務的主服務器(好比數據庫主庫),B做爲備份機器,兩臺服務器之間的通訊是經過 Heartbeat,即主服務器會定時的給備份服務器發送數據包,告知主服務器服務正常,當備份服務器在規定時間內沒有收到主服務器的 Heartbeat,就會認爲主服務器宕機,則備份服務器就會升級爲主服務器。假設物理機A的ARP緩存以下: 負載均衡
另外物理機器B(IP是192.168.192.40)的ARP緩存以下:
學習
當機器B經過BeatHeart得知機器A對外服務質量低於預期的時候(好比發生故障,服務無響應),會將本身的ARP緩存發送出去,讓路由器修改 路由表,告知虛擬地址應該指向我(物理機器B,192.168.192.40),這時候,外界再次訪問虛擬IP的時候,機器B會變成主服務器,而A降級爲 備份服務器。這就完成了主從機器的自動切換,這一切對外界是透明的。 spa
上面的VIP自動切換的過程就稱之爲IP漂移。
咱們能夠經過Keepalived來實現這個過程。 Keepalived是一個基於VRRP協議(Virtual Router Redundancy Protocol,即虛擬路由冗餘協議)來實現的LVS(負載均衡器)服務高可用方案,能夠利用其來避免單點故障。一個LVS服務會有2臺服務器運行 Keepalived,一臺爲主服務器(MASTER),一臺爲備份服務器(BACKUP),可是對外表現爲一個虛擬IP,主服務器會發送特定的消息給備 份服務器,當備份服務器收不到這個消息的時候,即主服務器宕機的時候, 備份服務器就會接管虛擬IP,繼續提供服務,從而保證了高可用性。