負載均衡是虛擬服務的一種好的處理方案。當設計一種負載均衡的拓撲時必定要考慮到以下兩點:html
真實服務器的可用性使用健康檢測機制。linux
負載均衡器的可用性使用故障轉移協議。web
負載均衡真實服務,提供了一個全局的高可用虛擬服務。爲增長負載均衡服務的可用性,須要檢測每一個真實服務器節點的狀態。這個問題能夠經過使用健康檢測框架來操做一個服務器池來解決。服務器
另外一方面,當使用一個負載均衡器director,對虛擬服務引入了一個故障節點。因負載均衡器的高可用性必須被處理,使用專用的路由協議對director的故障轉移/虛擬化。多線程
Keepalived解決這兩個問題:一方面,增長一個強壯和健壯的監控檢測框架;另外一方面,實現了一個熱待機協議。這兩個框架能夠處理lvs框架來操做lvs真實服務器池,對lvs真實服務池的操做能夠經過增長或者刪除基於健康檢測的真實服務器來完成。架構
LVS 表明了linux virtual Server. LVS 是linux 內核內嵌的一個負載均衡工具。更多信息參考工程主頁:http://www.linux-vs.org. LVS做爲一個網橋(經過nat)來負載均衡TCP/UDP流。LVS路由器組件以下:負載均衡
關鍵詞:框架
LVS組件:異步
VIP: 能夠被全部用戶訪問的虛擬IP,全部的用戶經過這個IP訪問服務器。工具
真實服務器:應用服務部署在真實的服務器上,處理用戶的請求。上圖中的web server1 和webserver2 便是。
服務器池:一組真實服務器。
虛擬服務器:被應用訪問的服務器池地址。
虛擬服務: 關聯到VIP的TCP/UDP服務。
VRRP 組件:
VRRP:虛擬路由器冗餘協議是一種選擇協議,它能夠把一個虛擬路由器的責任動態分配到局域網上的 VRRP 路由器中的一臺。
VRRP實例:a thread manipulating vrrpv2 specific set of ip addresses。
一個VRRP實例能夠做爲一個或者多個VRRP實例的備份。
IP地址擁有者:用戶IP地址做爲真實接口地址的VRRP實例。
主機狀態:一種VRRP實例狀態,當VRRP實例處於這種狀態就能夠認爲關聯此實例的IP地址負責處理髮送的請求。
備機狀態:一種VRRP實例狀態,噹噹前的處於主機狀態的VRRP實例宕機時,處於該狀態的VRRP實例有能力處理髮送來的請求。
真實負載均衡器:運行一個或者多個VRRP實例的一個LVS director。
虛擬負載均衡器:一組真實負載均衡器。
被同步實例:一個將要被同步的VRRP實例,被監控的VRRP實例。
通知:發送給處於一組處於主機狀態的VRRP實例的一個簡單VRRPv2包的名稱。
軟件架構涉及4個linux 內核組件:
下面將闡述keepalived軟件的內部實現組件。Keepalived使用一個基於中央I/O複用器的多線程框架。2個主要的組件以下:
健康檢測工做線程:每一個健康檢測被註冊到全局的調度框架。這些工做線程在keepalived 健康檢測框架下執行健康檢測。健康檢測框架當前執行3個檢測:
TCP檢測:應用第三層檢測。
HTTP GET:檢測一個遠程http服務器的html 內容完整性。
SSL GET:檢測一個遠程SSL服務器的html內容完整性。
混合檢測:應用用戶定義的完整性檢測。
VRRP 包分發器:解服用特定I/O來處理VRRP實例的響應。
這兩個主要組件使用到下面的底層primitives
SMTP通知:一個SMTP包裝器使用異步數據流處理。這個primitive使得keepalived能夠發送郵件通知。
IPVS框架:LVS NAT,DR&TUN等。
Netlink:提供VRRP VIP操做。
組播:使用多播來發送VRRP通告。
IPCHAINS框架,如上所述。
SYSLOG: 全部後臺通知消息使用syslog後臺來記錄。
如上《略》
爲了director故障轉移,keepalived實現了VRRP協議。這個協議能夠這樣簡潔的描述爲:
虛擬路由器冗餘協議(VRRP)是一種選擇協議,它能夠把一個虛擬路由器的責任動態分配到局域網上的 VRRP 路由器中的一臺。控制虛擬路由器 IP 地址的 VRRP 路由器稱爲主路由器,它負責轉發數據包到這些虛擬 IP 地址。一旦主路由器不可用,這種選擇過程就提供了動態的故障轉移機制,這就容許虛擬路由器的 IP 地址能夠做爲終端主機的默認第一跳路由器。使用 VRRP 的好處是有更高的默認路徑的可用性而無需在每一個終端主機上配置動態路由或路由發現協議。 VRRP 包封裝在 IP 包中發送。[ 引用自rfc2338]。
配置文件分爲三個部分: