標籤:交換器 ip地址 解決方案 基礎知識 設定檔
一、Keepalived介紹
Keepalived是Linux下一個輕量級的高可用解決方案,它與HeartBeat、RoseHA實現的功能類似,都可以實現服務或者網路的高可用,但是又有差別:HeartBeat是一個專業的、功能完善的高可用軟體,它提供了HA軟體所需的準系統,比如心跳檢測和資源接管,監測叢集中的系統服務,在叢集節點間轉移共用IP地址的所有者等,HeartBeat功能強大,但是部署和使用相對比較麻煩;與HeartBeat相比,Keepalived主要是通過虛擬路由冗餘來實現高可用功能,雖然它沒有HeartBeat功能強大,但Keepalived部署和使用非常簡單,所有配置只需一個設定檔即可完成。這也是本章重點介紹Keepalived的原因。
二、Keepalived是什麼
Keepalived起初是為LVS設計的,專門用來監控叢集系統中各個服務節點的狀態。它根據layer3, 4 & 5交換器制檢測每個服務節點的狀態,如果某個服務節點出現異常,或工作出現故障,Keepalived將檢測到,並將出現故障的服務節點從叢集系統中剔除,而在故障節點恢複正常後,Keepalived又可以自動將此服務節點重新加入到伺服器叢集中,這些工作全部自動完成,不需要人工幹涉,需要人工完成的只是修複出現故障的服務節點。
Keepalived後來又加入了VRRP的功能,VRRP是Virtual Router Redundancy Protocol(虛擬路由器冗餘協議)的縮寫,它出現的目的是為瞭解決靜態路由出現的單點故障問題,通過VRRP可以實現網路不間斷地、穩定地運行。因此,Keepalived一方面具有伺服器狀態檢測和故障隔離功能,另一方面也具有HA cluster功能.下面詳細介紹下VRRP協議的實現過程。
三、 VRRP協議與工作原理
在現實的網路環境中,主機之間的通訊都是通過配置靜態路由(預設閘道)完成的,而主機之間的路由器一旦出現故障,通訊就會失敗,因此,在這種通訊模式中,路由器就成了一個單點瓶頸,為瞭解決這個問題,就引入了VRRP協議。
熟悉網路的讀者對VRRP協議應該並不陌生。它是一種主備模式的協議,通過VRRP可以在網路發生故障時透明地進行裝置切換而不影響主機間的資料通訊,這其中涉及兩個概念:物理路由器和虛擬路由器。
VRRP可以將兩台或多台物理路由器裝置虛擬成一個虛擬路由器,這個虛擬路由器通過虛擬IP(一個或多個)對外提供服務,而在虛擬路由器內部,是多個物理路由器協同工作,同一時間只有一台物理路由器對外提供服務,這台物理路由器被稱為主路由器(處於MASTER角色)。一般情況下MASTER由選舉演算法產生,它擁有對外服務的虛擬IP,提供各種網路功能,如ARP請求、ICMP、資料轉寄等。而其他物理路由器不擁有對外的虛擬IP,也不提供對外網路功能,僅僅接收MASTER的VRRP狀態通告資訊,這些路由器被統稱為備份路由器(處於BACKUP角色)。當主路由器失效時,處於BACKUP角色的備份路由器將重新進行選舉,產生一個新的主路由器進入MASTER角色繼續提供對外服務,整個切換過程對使用者來說完全透明。
每個虛擬路由器都有一個唯一標識,稱為VRID,一個VRID與一組IP地址構成了一個虛擬路由器。在VRRP協議中,所有的報文都是通過IP多播形式發送的,而在一個虛擬路由器中,只有處於MASTER角色的路由器會一直發送VRRP資料包,處於BACKUP角色的路由器只接收MASTER發過來的報文資訊,用來監控MASTER運行狀態,因此,不會發生BACKUP搶佔的現象,除非它的優先順序更高。而當MASTER不可用時,BACKUP也就無法收到MASTER發過來的報文資訊,於是就認定MASTER出現故障,接著多台BACKUP就會進行選舉,優先順序最高的BACKUP將成為新的MASTER,這種選舉並進行角色切換的過程非常快,因而也就保證了服務的持續可用性。
四、Keepalived工作原理
上節簡單介紹了Keepalived通過VRRP實現高可用功能的工作原理,而Keepalived作為一個高效能叢集軟體,它還能實現對叢集中伺服器運行狀態的監控及故障隔離。下面繼續介紹下Keepalived對伺服器運行狀態監控和檢測的工作原理。
Keepalived工作在TCP/IP參考模型的第三、第四和第五層,也就是網路層、傳輸層和應用程式層。根據TCP/IP參考模型各層所能實現的功能,Keepalived運行機制如下。
在網路層,運行著四個重要的協議:互連網協議IP、互連網控制報文協議ICMP、地址轉換協議ARP以及反向地址轉換協議RARP。Keepalived在網路層採用的最常見的工作方式是通過ICMP協議向伺服器叢集中的每個節點發送一個ICMP的資料包(類似於ping實現的功能),如果某個節點沒有返迴響應資料包,那麼就認為此節點發生了故障,Keepalived將報告此節點失效,並從伺服器叢集中剔除故障節點。
在傳輸層,提供了兩個主要的協議:傳輸控制通訊協定TCP和使用者資料協議UDP。傳輸控制通訊協定TCP可以提供可靠的Data Transmission Service,IP地址和連接埠,代表一個TCP串連的一個串連端。要獲得TCP服務,須在發送機的一個連接埠上和接收機的一個連接埠上建立串連,而Keepalived在傳輸層就是利用TCP協議的連接埠串連和掃描技術來判斷叢集節點是否正常的。比如,對於常見的Web服務預設的80連接埠、SSH服務預設的22連接埠等,Keepalived一旦在傳輸層探測到這些連接埠沒有響應資料返回,就認為這些連接埠發生異常,然後強制將此連接埠對應的節點從伺服器叢集組中移除。
在應用程式層,可以運行FTP、TELNET、SMTP、DNS等各種不同類型的高層協議,Keepalived的運行方式也更加全面化和複雜化,使用者可以通過自訂Keepalived的工作方式,例如使用者可以通過編寫程式來運行Keepalived,而Keepalived將根據使用者的設定檢測各種程式或服務是否允許正常,如果Keepalived的檢測結果與使用者設定不一致時,Keepalived將把對應的服務從伺服器中移除。
五、Keepalived的體繫結構
Keepalived是一個高度模組化的軟體,結構簡單,但擴充性很強,如有興趣的讀者,可以閱讀下Keepalived的源碼。是官方給出的Keepalived體繫結構拓撲圖。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6C/10/wKiom1U-5OGBU2g0AAHKMde8jdI531.jpg" title="111.png" alt="wKiom1U-5OGBU2g0AAHKMde8jdI531.jpg" />
可以看出,Keepalived的體繫結構從整體上分為兩層,分別是使用者空間層(User Space)和核心空間層(Kernel Space).下面介紹Keepalived兩層結構的詳細組成及實現的功能。
核心空間層處於最底層,它包括IPVS和NETLINK兩個模組。IPVS模組是Keepalived引入的一個第三方模組,通過IPVS可以實現基於IP的負載平衡叢集。IPVS預設包含在LVS叢集軟體中。而對於LVS叢集軟體,相信做營運的朋友並不陌生:在LVS叢集中,IPVS安裝在一個叫做Director Server的伺服器上,同時在Director Server上虛擬出一個IP地址來對外提供服務,而使用者必須通過這個虛擬IP地址才能訪問服務。這個虛擬IP一般稱為LVS的VIP,即Virtual IP。訪問的請求首先經過VIP到達Director Server,然後由Director Server從伺服器叢集節點中選取一個服務節點響應使用者的請求。
Keepalived最初就是為LVS提供服務的,由於Keepalived可以實現對叢集節點的狀態檢測,而IPVS可以實現負載平衡功能,因此,Keepalived藉助於第三方模組IPVS就可以很方便地搭建一套負載平衡系統。在這裡有個誤區,由於Keepalived可以和IPVS一起很好地工作,因此很多初學者都以為Keepalived就是一個負載平衡軟體,這種理解是錯誤的。
在Keepalived中,IPVS模組是可配置的,如果需要負載平衡功能,可以在編譯Keepalived時開啟負載平衡功能,反正,也可以通過配置編譯參數關閉。
NETLINK模組主要用於實現一些進階路由架構和一些相關的網路功能,完成使用者空間層Netlink Reflector模組發來的各種網路請求。
使用者空間層位於核心空間層之上,Keepalived的所有具體功能都在這裡實現,下面介紹、幾個重要部分所實現的功能。
在使用者空間層,Keepalived又分為四個部分,分別是Scheduler I/O Multiplexer、Memory Management、Control Plane和Core components。其中,Scheduler I/O Multiplexer是一個I/O複用分發調度器,它負責安排Keepalived所有內部的工作要求。Memory Management是一個記憶體管理機制,這個架構提供了訪問記憶體的一些通用方法。Control Plane是Keepalived的控制台,可以實現對設定檔進行編譯和解析,Keepalived的設定檔解析比較特殊,它並不是一次解析所有模組的配置,而是只有在用到某模組時才解析相應的配置。最後詳細說一下Core components,這個部分是Keepalived的核心組件,包含了一些列功能模組,主要有WatchDog、Checkers、VRRP Stack、IPVS wrapper和Netlink Reflector,下面介紹每個模組所實現的功能如下。
(1)WatchDog
WatchDog是電腦可靠性領域中一個極為簡單又非常有效偵查工具,它的工作原理是針對被監視的目標設定一個計數器和一個閾值,WatchDog會自己增加此計數值,然後等待被監視的目標周期性地重設該計數值。一旦被監控目標發生錯誤,就無法重設此計數值,WatchDog就會檢測到,於是就採取對應的恢複措施,例如重啟或關閉。
在Linux中很早就引入了WatchDog功能,而Keepalived正是通過WatchDog的運行機制來監控Checkers和VRRP進程的。
(2)Checkers
這是Keepalived最基礎的功能,也是最主要的功能,可實現對伺服器運行狀態檢測和故障隔離。
(3)VRRP Stack
這是Keepalived後來引入的VRRP功能,可以實現HA叢集中失敗切換(Failover)功能。Keepalived通過VRRP功能再結合LVS負載平衡軟體即可部署一套高效能的負載平衡叢集系統。
(4)IPVS wrapper
這是IPVS功能的一個實現。IPVS wrapper模組可以將設定好的IPVS規則發送到核心空間並提交給IPVS模組,最終實現IPVS模組的負載平衡功能。
(5)Netlink Reflector
用來實現高可用叢集中Failover時虛擬IP(VIP)的設定和切換。Netlink Reflector的所有請求最後都發送到核心空間的NETLINK模組來完成。
本文出自 “技術成就夢想” 部落格,請務必保留此出處http://ixdba.blog.51cto.com/2895551/1639562
高效能叢集軟體Keepalived之基礎知識篇