Keepalived 使用指南
1. 簡介
負載均衡是虛擬服務的一種好的處理方案。當設計一種負載均衡的拓撲時一定要考慮到如下兩點:
真實伺服器的可用性使用健康檢測機制。
負載均衡器的可用性使用故障轉移協議。
負載均衡真實服務,提供了一個全域性的高可用虛擬服務。為增加負載均衡服務的可用性,需要檢測每個真實伺服器節點的狀態。這個問題可以通過使用健康檢測框架來操作一個伺服器池來解決。
另一方面,當使用一個負載均衡器director,對虛擬服務引入了一個故障節點。因負載均衡器的高可用性必須被處理,使用專用的路由協議對director的故障轉移/虛擬化。
Keepalived解決這兩個問題:一方面,增加一個強壯和健壯的監控檢測框架;另一方面,實現了一個熱待機協議。這兩個框架可以處理lvs框架來操作lvs真實伺服器池,對lvs真實服務池的操作可以通過增加或者刪除基於健康檢測的真實伺服器來完成。
2. 術語
LVS 代表了linux virtual Server. LVS 是linux 核心內嵌的一個負載均衡工具。更多資訊參考工程主頁:http://www.linux-vs.org. LVS作為一個網橋(通過nat)來負載均衡TCP/UDP流。LVS路由器元件如下:
- WAN 介面。可以被所有使用者訪問到的乙太網介面控制器。
- LAN介面。管理所有負載均衡伺服器的乙太網介面控制器。
- linux核心。核心內嵌了最新的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包的名稱。
3. 軟體架構
3.1 全域性和區域性
軟體架構涉及4個linux 核心元件:
- LVS核心框架:Kernel2.2使用setsockopt,kernel 2.4使用setsockopt netfilter。
- IPCHAINS 框架:kernel 2.2 LVS NAT架構使用內部的IPCHAINS 包裝器來傳送MASQ鏈到核心。這個僅僅在linux 2.2核心上執行。在kernel 2.4 ipvs程式碼使用netfilter call來處理特定的NAT規則。
- Netlink介面:對於熱待機協議(VRRP),我們使用netlink介面來設定/去除VRRP的VIP.
- 組播:對於VRRP部分,通告被髮送到組播組。
3.2軟體設計
下面將闡述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後臺來記錄。
4. 健康檢測框架
如上《略》
為了director故障轉移,keepalived實現了VRRP協議。這個協議可以這樣簡潔的描述為:
虛擬路由器冗餘協議(VRRP)是一種選擇協議,它可以把一個虛擬路由器的責任動態分配到區域網上的 VRRP 路由器中的一臺。控制虛擬路由器 IP 地址的 VRRP 路由器稱為主路由器,它負責轉發資料包到這些虛擬 IP 地址。一旦主路由器不可用,這種選擇過程就提供了動態的故障轉移機制,這就允許虛擬路由器的 IP 地址可以作為終端主機的預設第一跳路由器。使用 VRRP 的好處是有更高的預設路徑的可用性而無需在每個終端主機上配置動態路由或路由發現協議。 VRRP 包封裝在 IP 包中傳送。[ 引用自rfc2338]。
5. Keepalived 配置語法
配置檔案分為三個部分:
5.1 全域性定義的語法
5.2 虛擬伺服器定義語法
5.3 VRRP例項定義語法